python爬虫解决中文乱码和爬取美女图片

您所在的位置:网站首页 jpg图片上传都是乱码怎么办 python爬虫解决中文乱码和爬取美女图片

python爬虫解决中文乱码和爬取美女图片

2024-07-06 05:52| 来源: 网络整理| 查看: 265

想试试爬取图片是,结果图片名字打印的时候就出现了中文乱码。

 

代码是这样的

# -- coding:UTF-8 -- from lxml import etree import requests import os if __name__ == "__main__": if not os.path.exists('美女图片'): os.mkdir('美女图片') headers = { "user-agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 97.0.4692.71Safari / 537.36Edg / 97.0.1072.55" } url = 'http://pic.netbian.com/4kmeinv/' page_text = requests.get(url=url,headers=headers).text tree = etree.HTML(page_text) li_list = tree.xpath('//div[@class="slist"]/ul/li') for li in li_list: img_src = 'http://pic.netbian.com'+li.xpath('./a/img/@src')[0] print(img_src) img_name = li.xpath('./a/img/@alt')[0]+'.jpg' img_data = requests.get(url=img_src,headers=headers).content img_path = '美女图片/'+img_name with open(img_path,'wb') as fp: fp.write(img_data) print(img_name,'下载成功')

 后面在网上找了几种方法,有两种是可行的。

1、直接在获取的网页源码进行'iso-8859-1'编码。

page_text = requests.get(url=url,headers=headers).text.encode('iso-8859-1')

2、在乱码的地方先进行 'iso-8859-1'编码,再进行'gbk'解码。

例如这里是图片名字出现了乱码,就在图片名字这里进行编码和解码。

img_name = li.xpath('./a/img/@alt')[0]+'.jpg' img_name = img_name.encode('iso-8859-1').decode('gbk')

 具体编码和解码的原理大家可以去百度一下,有很多的博主都写得很好,这里就不多说了。

接下来就是怎么爬取图片?

如果网页不是动态加载的话,只要解析到图片的地址就好办了。假如是Ajax动态加载,那就要用到selenium,动态加载的情况之后再说。

以我们这次为例,通过开发者工具我们知道图片的地址都存储在标签里。

我们可以直接通过xpath获取所有的标签,放在一个列表当中。

li_list = tree.xpath('//div[@class="slist"]/ul/li')

然后再逐一解析图片的地址,打开标签就能发现下面还有一个标签,标签里面的href属性就是图片的地址。

 不过这个地址不全,需要我们手动补全。

for li in li_list: img_src = 'http://pic.netbian.com'+li.xpath('./a/img/@src')[0]

现在就有了图片的完整地址,只要对这个地址放松请求,获取二进制数据,再保存就行了

img_data = requests.get(url=img_src,headers=headers).content

下面是完整的代码

# -- coding:UTF-8 -- from lxml import etree import requests import os if __name__ == "__main__": if not os.path.exists('美女图片'): os.mkdir('美女图片') headers = { "user-agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 97.0.4692.71Safari / 537.36Edg / 97.0.1072.55" } url = 'http://pic.netbian.com/4kmeinv/' page_text = requests.get(url=url,headers=headers).text.encode('iso-8859-1') tree = etree.HTML(page_text) li_list = tree.xpath('//div[@class="slist"]/ul/li') for li in li_list: img_src = 'http://pic.netbian.com'+li.xpath('./a/img/@src')[0] img_name = li.xpath('./a/img/@alt')[0]+'.jpg' # 通用处理中文乱码的解决方案 # img_name = img_name.encode('iso-8859-1').decode('gbk') img_data = requests.get(url=img_src,headers=headers).content img_path = '美女图片/'+img_name with open(img_path,'wb') as fp: fp.write(img_data) print(img_name,'下载成功')



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3