在家无聊写的爬虫程序,用来爬取图片,由于这个是好久之前写的,有点忘了,写的不详细,后面再写一份详细的
爬虫的基本原理就是:
发起请求->获取响应->解析内容->保存数据
第一步:发起请求,这一步需要用到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.text
tree=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.text
c_tree=etree.HTML(c_text)
c_list=c_tree.xpath('//div[@class="photo-pic"]/a/img/@src')[0]
lasturl='https://pic.netbian.com'+c_list
l_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.content
path = 'D:\\图片\\' + name +'.jpg'# 根据自己需要改这里(name之前)
with open(path, 'wb') as p:
p.write(date)
print(name, '爬取成功')
print('爬取完成')