介绍
美桌壁纸小姐姐壁纸爬取
准备
- PYthon3.8(我用的是这个版本的)
- pycharm (其他的编辑器也可以)
- 模块:requests,parsel,os
思路
爬虫的思路
- 分析目标网页,确定爬取的url路径,headers参数
- 发送请求 – requests 模拟浏览器发送请求,获取响应数据
- 解析数据 – parsel 转化为Selector对象,Selector对象具有xpath的方法,能够对转化的数据进行处理
- 保存数据
步骤
第一步
确定爬取的url路径,headers参数
1 2
| base_url = 'http://www.win4000.com/mobile_2340_0_0_1.html' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36'}
|
User-Agent在浏览器的F12 Network里面获取(里面找到headers,在最下面就有你自己浏览器的User-Agent参数)
第二步
发送请求 – requests 模拟浏览器发送请求,获取响应数据
1 2
| response = requests.get(base_url, headers=headers) data = response.text
|
第三步
解析数据 – parsel 转化为Selector对象,Selector对象具有xpath的方法,能够对转化的数据进行处理
1 2
| html_data = parsel.Selector(data) data_list = html_data.xpath('//div[@class="Left_bar"]//ul/li/a/@href|//div[@class="Left_bar"]//ul/li/a/@title').extract()
|
使用列表推导式对列表进行分组
1
| data_list = [data_list[i:i + 2] for i in range(0, len(data_list), 2)]
|
创建图片的文件夹
1 2 3
| if not os.path.exists('img\\' + file_name): os.mkdir('img\\' + file_name) print('正在下载:', file_name)
|
发送详情页的请求,解析出总页数
1 2 3
| response_2 = requests.get(html_url, headers=headers).text html_2 = parsel.Selector(response_2) page_num = html_2.xpath('//div[@class="ptitle"]//em/text()').extract_first()
|
最后
构建相册翻页的url地址,解析每一页的图片url地址,保存数据
1 2 3 4 5 6 7 8 9 10 11 12 13
| for url in range(1, int(page_num) + 1): url_list = html_url.split('.') all_url = url_list[0] + '.' + url_list[1] + '.' + url_list[2] + '_' + str(url) + '.' + url_list[3] response_3 = requests.get(all_url, headers=headers).text html_3 = parsel.Selector(response_3) img_url = html_3.xpath('//div[@class="pic-meinv"]//img/@src').extract_first() img_data = requests.get(img_url, headers=headers).content img_name = str(url) + '.jpg' with open('img\\{}\\'.format(file_name) + img_name, 'wb') as f: print('下载完成:', img_name) f.write(img_data)
|
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| import requests import parsel import os base_url = 'http://www.win4000.com/mobile_2340_0_0_1.html' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36'} response = requests.get(base_url, headers=headers) data = response.text html_data = parsel.Selector(data) data_list = html_data.xpath('//div[@class="Left_bar"]//ul/li/a/@href|//div[@class="Left_bar"]//ul/li/a/@title').extract() data_list = [data_list[i:i + 2] for i in range(0, len(data_list), 2)] for alist in data_list: html_url = alist[0] file_name = alist[1] if not os.path.exists('img\\' + file_name): os.mkdir('img\\' + file_name) print('正在下载:', file_name) response_2 = requests.get(html_url, headers=headers).text html_2 = parsel.Selector(response_2) page_num = html_2.xpath('//div[@class="ptitle"]//em/text()').extract_first() for url in range(1, int(page_num) + 1): url_list = html_url.split('.') all_url = url_list[0] + '.' + url_list[1] + '.' + url_list[2] + '_' + str(url) + '.' + url_list[3] response_3 = requests.get(all_url, headers=headers).text html_3 = parsel.Selector(response_3) img_url = html_3.xpath('//div[@class="pic-meinv"]//img/@src').extract_first() img_data = requests.get(img_url, headers=headers).content img_name = str(url) + '.jpg' with open('img\\{}\\'.format(file_name) + img_name, 'wb') as f: print('下载完成:', img_name) f.write(img_data)
|
说明:这个代码并不能爬取全站图片,详细的自己研究
转送门
好像不是特别全上传的时候似乎漏掉了几个
偶然发现pyinstaller这个模块,这个模块可以把py程序封装成exe程序,在没有py环境的电脑上也可以运行
想要的可以直接下载,exe软件下载地址–>传送门