上期我们讲解了爬虫是什么、爬虫的基本步骤、以及如何简单的爬取图片的案例:python爬虫入门|教你简单爬取爱豆的图片
今天我们来讲解在上期文章的基础之上,进行全站图片的爬取。
首页链接:http://www.win4000.com/mt/yiyangqianxi_1.html
里面是一组一组的组图,一共二十四组。每一组图都有一个特定的url。
点进去组图就是需要保存的目标了.
在首页往下拉,发现易烊千玺的图片组图一共有五页。
点击下一页查看url变化
http://www.win4000.com/mt/yiyangqianxi_1.html
http://www.win4000.com/mt/yiyangqianxi_2.html
http://www.win4000.com/mt/yiyangqianxi_3.html
发现后面的数字发生了变化,和上期文章一样依然是有规律的递增,可知是静态网页。
1.访问首页链接:http://www.win4000.com/mt/yiyangqianxi_1.html
2.获取首页中的组图url,然后遍历访问组图url,保存组图中的缩览图图片。本文不直接保存图片,而是以文本格式保存图片的url,再进行保存图片,以此跳过反爬。
3.进行翻页,获取下一页的内容。
1.导入依赖库
lxml库是html解析库,需要安装,安装方法可以看下上期文章。也可以要re库,看个人爱好。
time是时间库,用来减速用的。
import requests
from lxml import etree
import time
2.建立反爬措施
headers = {
'User-Agent': 你的User-Agent
}
User-Agent字段可以在开发者工具中找到。
3.建立请求函数,获取首页数据。
#定义resposn_data函数,传入页数和反爬措施参数
def resposn_data(page,headers):
#format传入页数进行翻页操作
url = 'http://www.win4000.com/mt/yiyangqianxi_{}.html'.format(str(page))
#爬完一页等2秒
time.sleep(2)
resposn = requests.get(url,headers=headers).text
#返回参数
return resposn
4.解析网页,获取图片url。
#定义html_data函数,传入网页源代码数据和反爬措施参数
def html_data(resposn,headers):
#建立列表,保存url
datas_url = []
#传入网页源码进行解析
etrees = etree.HTML(resposn)
#xpath提取组图url
data_url = etrees.xpath('//div[@class="Left_bar"]//ul[@class="clearfix"]/li/a/@href')
time.sleep(3)
for str_url in data_url:
data_resposn_url = requests.get(str_url, headers=headers).text
url_etrees = etree.HTML(data_resposn_url)
#xpath提取组图内的缩览图url
sky_url = url_etrees.xpath('//ul[@class="scroll-img scroll-img02 clearfix"]/li/a/img/@data-original')
for i in sky_url:
url = i.replace('_130_170','')
datas_url.append(url)
return datas_url
xpath是网页的标签(div,li,img等),定位需要获取的内容,需要有html基础知识。本文不详细讲解,本文只介绍个简单获取xpath的方法:
在网页中点击鼠标右键检查→点击开发者工具左边的小箭头→点击组图找到组图url→在url上右键→copy(复制)→copy xpath→ctrl+f把复制的xpath粘贴在上面→删除最后面的[1]、[2]...内容。具体操作可以看下gif:
删除最后面的[1]、[2]...内容后,url只剩下24个。
5.保存图片url
def url_txt(datas_url):
for i in datas_url:
#encoding='utf-8'编码
f = open('图片url.txt','a',encoding='utf-8')
#\n换行
f.write(str(i)+'\n')
6.建立脚本启动器,调动函数,传入相应参数
if __name__ == '__main__':
for page in range(1,6):
resposn = resposn_data(page,headers)
datas_url = html_data(resposn, headers)
url_txt(datas_url)
7.另外新建py文件,进行图片保存
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
}
with open('图片url.txt') as t:
for datas_urls in t:
#删除文件的空行
tp_url=datas_urls.rstrip()
#图片的名字
name = tp_url.split('/')[-1]
data_sky_url = requests.get(tp_url, headers=headers)
with open(r'易烊千玺\{}'.format(name),'wb') as f:
f.write(data_sky_url.content)
8.点击鼠标右键运行后,查看成果,一共有九百七十七张。
1.本文在原有的基础上进行了嵌套以及翻页爬取全网站易烊千玺的图片。
2.本文简单的介绍了xpath语法以及怎么简单的获取xpath定位需要的标签,但是xpath语法较为复杂,以后再详细讲解。re库也可以进行解析,用法基本使用.*?即可匹配。
本文分享自 Python与Excel之交 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!