爬取目标网站https://pic.netbian.com/4kfengjing/index.html
之前写的时候发现爬取的图片都是缩略图,不是原图4k的,经过改良得以实现
思路:
话不多说,详细思路,直接上代码
# -*- codeing = utf-8 -*-
# @Time : 2021/7/19 15:32
# @Author : ArthurHuang
# @File : 8_4k图片解析爬取(优化).py
# @Software : PyCharm
import requests
from lxml import html
etree = html.etree #新版本etree现在需要这样导入
import os
if __name__ == "__main__":
url = "https://pic.netbian.com/4kfengjing/" #爬取的是第一页
# UA伪装:将对应的User-Agent封装到一个字典中
headers = {
"User-Agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 91.0.4472.77 Safari / 537.36"
}
#这三句代码设置想要数据的编码 编码格式跟爬取的网站的格式一样 才不会乱码
response = requests.get(url=url,headers=headers)
#response.encoding='gbk' 上下两种方法都是可以的
page_text = response.text
#实例化etree对象
tree = etree.HTML(page_text)
#数据解析:这里解析的是第一页
a_list = tree.xpath('//div[@class="slist"]/ul/li/a')
#创建一个文件夹保存图片
if not os.path.exists('./4kpicLibs'):
os.mkdir('./4kpicLibs')
for a in a_list:
img_name = a.xpath('./img/@alt')[0] + '.jpg'
img_name = img_name.encode('iso-8859-1').decode('gbk') #通用处理中文乱码的解决方案
#print(img_name)
imgpage_src = 'https://pic.netbian.com/'+a.xpath('./@href')[0] # ./表示当前这个li标签
# 对图片详情页发起请求,解析出图片的herf
response = requests.get(imgpage_src, headers=headers)
imgsrc_text = response.text
# 实例化etree对象
imgtree = etree.HTML(imgsrc_text)
src_list = imgtree.xpath('//div[@class="photo-pic"]/a') #原图片所在的网页
for img in src_list:
img_src = 'https://pic.netbian.com/' + img.xpath('./img/@src')[0] # ./表示当前这个li标签
#print(img_src)
img_data = requests.get(url=img_src, headers=headers).content #content 处理图片的二进制数据
img_path = '4kpicLibs/'+img_name
with open(img_path,'wb')as fp:
fp.write(img_data)
print(img_name,"下载成功!!!")
项目实现的还不是很完美,因为个人能力,分页获取图片功能无法实现,原因在于
我发现第一页的url是https://pic.netbian.com/4kfengjing/index.html
往后的url是
https://pic.netbian.com/4kfengjing/index_2.html
https://pic.netbian.com/4kfengjing/index_3.html
....
我不知道这里要怎么处理,如果没有那个_,可以用占位符加上循环获取,但是那个_把我给整懵了,有能力的大牛麻烦可以在评论区告诉我一下,感谢!