美文网首页Python
Python爬取 Bing壁纸并结构化保存(上)

Python爬取 Bing壁纸并结构化保存(上)

作者: Odinmx | 来源:发表于2019-12-15 22:14 被阅读0次

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() 是将要写的结构化存储图片的函数。
下篇

相关文章

网友评论

    本文标题:Python爬取 Bing壁纸并结构化保存(上)

    本文链接:https://www.haomeiwen.com/subject/hbilnctx.html