爬取目标网站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
....
我不知道这里要怎么处理,如果没有那个_,可以用占位符加上循环获取,但是那个_把我给整懵了,有能力的大牛麻烦可以在评论区告诉我一下,感谢!