每个人的电脑桌面都想设置一个精美的壁纸,但很多精美的壁纸都需要支付一定的金额才可以下载。此次我们将使用Urllib3模块与python基础中的re模块实现爬取必应壁纸的爬虫程序。
在浏览器中打开必应壁纸的下载榜(https://bing.ioliu.cn/ranking ,如图1所示。
图1 必应壁纸下载榜
浏览器右上角依次选择“更多工具”>“开发者工具”,然后在顶部导航条中选择“Elements”选项,接着单击导航条左侧的图标,再用鼠标选中需要下载的壁纸,此时将显示壁纸所对应的HTML代码位置。具体操作步骤如图2所示。
图2 获取壁纸对应的HTML代码
从图4.10的图片信息中可以看出,图片的大小为640*480px,所以可以断定这并不是一张高清壁纸,所以需要换思路再次分析,经过分析发现壁纸右下角有一个下载按钮,打开浏览器开发者工具,查看下载按钮对应的HTML代码,发现其中包含高清壁纸的下载地址,如图3所示。
图3 分析壁纸下载地址
在没有学习爬虫的解析模块前,本章将同样使用re模块与正则表达式来实现数据的匹配。爬虫程序实现的具体步骤如下
(1 导入爬虫程序所需要的urllib3、re、os模块,分别用于发送网络请求、提取数据、创建目录。代码如下
01 import urllib3 # 导入urllib3模块 02 import re # 导入re模块 03 import os # 导入系统os模块 |
(2 创建send_request()方法,在该方法中首先发送一个get请求,然后根据响应码判断一下,如果请求成功就将解码后的HTML代码返回。代码如下
04 # 实现发送网络请求,返回响应结果 05 def send_request(url,headers): 06 response = http.request('GET',url,headers=headers) # 发送GET请求 07 if response.status == 200: 08 html_str = response.data.decode('utf-8') # html代码 09 return html_str # 返回解码后的HTML |
(3 创建download_pictures()方法,在该方法中首先在响应数据中通过正则表达式提取壁纸的名称与下载地址,然后再次对下载地址发送网络请求,并通过open()函数将壁纸保存至本地。代码如下
10 # 解析地址并下载壁纸 11 def download_pictures(html_str): 12 # 提取壁纸名称 13 pic_names = re.findall('<div><h3>(.*?)</h3>',html_str) 14 # 提取壁纸的下载地址 15 pic_urls = re.findall('<a class="ctrl download" href="(.*?)" ',html_str) 16 for name,url in zip(pic_names,pic_urls): # 遍历壁纸的名称与地址 17 pic_name = name.replace('/',' ') # 把图片名称中的/换成空格 18 pic_url = 'https://bing.ioliu.cn'+url # 组合一个完整的url 19 # 发送网络请求,准备下载图片 20 pic_response = http.request('GET',pic_url,headers=headers) 21 if not os.path.exists('pic'): # 判断pic文件夹是否存在 22 os.mkdir('pic') # 创建pic文件夹 23 with open('pic/'+pic_name+'.jpg','wb') as f: 24 f.write(pic_response.data) # 写入二进制数据,下载图片 25 print('图片 ',pic_name,'下载完成了!') |
(4 创建程序入口,然后设置请求地址与请求头信息,接着调用send_request()与interpreting_data()方法启动网络爬虫程序。代码如下
26 if __name__ == '__main__': 27 url = 'https://bing.ioliu.cn/ranking' 28 # 定义火狐浏览器请求头信息 29 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0'} 30 http = urllib3.PoolManager() # 创建连接池管理对象 31 html_str=send_request(url=url,headers=headers) # 调用发送网络请求的方法 32 download_pictures(html_str=html_str) # 调用解析数据并下载壁纸的方法 |
(5 爬虫程序启动后,控制台将显示壁纸下载信息,如图4所示。壁纸下载完成后,项目文件夹当中将自动生成pic文件夹,该文件夹中壁纸如图5所示。
图4 控制台所显示的下载信息
图5 文件夹中所下载的壁纸图片
Powered by 小羊羔外链网 8.3.12
©2015 - 2024 小羊羔外链网
您的IP:39.81.24.203,2024-04-25 20:07:59,Processed in 0.04906 second(s).