Bing 壁纸质量一向不错,有没有办法可以批量的下载Bing上的壁纸呢?答案是有的,可以使用Python 爬虫。
Python 不但在机器学习,大数据方面有不错的表现,而且在网络请求,数据爬取方面也表现不错。
下面进入正题:
使用到的库文件:
-
Gevent:基于协程的Python 网络库
-
bs4:网页解析
-
uuid :防止文件名称重复
-
sqlite3:轻量型数据库
-
time:获取时间
以下是整个爬虫需要的库文件,如果没有对应的库文件,可以用pip 获取
import gevent
gevent.monkey.patch_all() #[1]
from bs4 import BeautifulSoup
import uuid
import time
import sqlit3
[1] 打上猴子补丁,使得一些Python自带的阻塞式系统调用的标准库,变为协程,而且一定要在导入其他包之前打上补丁,否则会报错!!
接下来要对网页文件结构进行分析:
这是第一页的链接:
page1.jpg这是第二页的链接:
page2.jpg
细心的可能发现了第一页与第二页的链接区别就是?p=后边的数字不同。现在我们已经知道了每页图片页面的链接。接下来我们构造请求头,构造请求头是为了使爬虫看起来像是浏览器。
FAKEHEADER= {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Charset': 'UTF-8,*;q=0.5',
'Accept-Encoding': 'gzip,deflate,sdch',
'Accept-Language': 'en-US,en;q=0.8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0',
}
然后我们来分析每页图片的网页结构。
开发人员工具.png
打开浏览器的开发人员工具,我们可以看到,每张图片都是一个<img>标签,其src属性就是图片文件的链接。
知道了网页的结构,接下来写获取图片链接的函数。
def Get_Picture(URL,FAKEHEADER,List):
r=requests.get(URL,headers=FAKEHEADER).content
soup=BeautifulSoup(r,'lxml')
img_list=soup.findAll('img')
for img in img_list:
List.append(img.get('src'))
这里传入了网页的链接,上边构造的请求头,以及一个列表,这个是将获取的图片链接放到这个列表中,以备后用。
接下来是保存图片,下边写保存图片的函数:
def Save_Picture(img_url,FAKEHEADER):
img=requests.get(img_url,headers=FAKEHEADER).content
Mapid=uuid.uuid5(uuid.NAMESPACE_URL,img_url).hex
insert_image_db(Mapid,img)
insert_imge_db() 是将要写的结构化存储图片的函数。
下篇
网友评论