在家无聊写的爬虫程序,用来爬取图片,由于这个是好久之前写的,有点忘了,写的不详细,后面再写一份详细的
爬虫的基本原理就是:
发起请求->获取响应->解析内容->保存数据
第一步:发起请求,这一步需要用到requests库,此库专门用于发请求,一般需要一个headers用于伪装
第二步:获取响应,这一步就是将刚才发请求后得到的响应保存到变量中,方便后面解析
第三步:解析内容(这一步是重点),就是将获取到的响应数据进行解析,一般可以用正则(用着头疼,高手的话当我没说)、beautifulsoup或者xpath,我这里用的是xpath,因为他是一层一层写的,我比较喜欢用这个
最后一步:保存数据,对解析后的数据保存到本地,大功告成
这里提一下,由于这个网站第一页的index不是1,所以爬取时起始页不能输入1(其他都可以,只要在这个网站的页码范围内),不然会报错
运行截图如下(我这里图片的命名用的是源码中解析出来的相关的中文字符串):
具体代码如下(使用时需要改一下保存地址,具体位置代码中已给出注释):
import requests
from lxml import etree
if __name__ == "__main__":url='https://pic.netbian.com/4kdongman/index_%d.html'headers={"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"}a=eval(input('请输入起始页'))b=eval(input('请输入终止页'))for num in range(a,b):newurl=format(url%num)response=requests.get(url=newurl,headers=headers)response.encoding='gbk'text=response.texttree=etree.HTML(text)list=tree.xpath('//div[@class="slist"]/ul/li')for li in list:c_url='https://pic.netbian.com'+li.xpath('./a//@href')[0]c_response=requests.get(url=c_url,headers=headers)c_text=c_response.textc_tree=etree.HTML(c_text)c_list=c_tree.xpath('//div[@class="photo-pic"]/a/img/@src')[0]lasturl='https://pic.netbian.com'+c_listl_response=requests.get(url=lasturl,headers=headers)l_response.encoding='gbk'name = c_tree.xpath('//div[@class="photo-pic"]/a/img/@alt')[0]name=name.encode('iso-8859-1').decode('gbk')date=l_response.contentpath = 'D:\\图片\\' + name +'.jpg'# 根据自己需要改这里(name之前)with open(path, 'wb') as p:p.write(date)print(name, '爬取成功')
print('爬取完成')