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

代码是这样的

# -- 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).texttree = 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).contentimg_path = '美女图片/'+img_namewith 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,动态加载的情况之后再说。

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

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

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

然后再逐一解析图片的地址,打开<li>标签就能发现下面还有一个<a>标签,<a>标签里面的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).contentimg_path = '美女图片/'+img_namewith open(img_path,'wb') as fp:fp.write(img_data)print(img_name,'下载成功')

python爬虫解决中文乱码和爬取美女图片相关推荐

  1. Python 爬虫实例(1)—— 爬取百度图片

    爬取百度图片  在Python 2.7上运行 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: loveNightimport json ...

  2. python爬虫实战1:批量爬取网址图片

    1.爬虫基础知识 目前,爬虫的相关知识了解了以下这么多. 2.爬取图片的步骤 学习了很多视频教程,基本介绍爬虫都是主要分3步: 1.请求网页 2.解析网页 3.保存图片 3.爬虫实战 唯有实战,才能提 ...

  3. 从入门到入土:Python爬虫学习|实例练手|爬取百度产品列表|Xpath定位标签爬取|代码注释详解

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  4. 从入门到入土:Python爬虫学习|实例练手|爬取猫眼榜单|Xpath定位标签爬取|代码

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  5. 从入门到入土:Python爬虫学习|实例练手|爬取百度翻译|Selenium出击|绕过反爬机制|

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  6. 从入门到入土:Python爬虫学习|实例练手|爬取新浪新闻搜索指定内容|Xpath定位标签爬取|代码注释详解

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  7. Python 爬虫实战,模拟登陆爬取数据

    Python 爬虫实战,模拟登陆爬取数据 从0记录爬取某网站上的资源连接: 模拟登陆 爬取数据 保存到本地 结果演示: 源网站展示: 爬到的本地文件展示: 环境准备: python环境安装 略 安装r ...

  8. Python爬虫利用18行代码爬取虎牙上百张小姐姐图片

    Python爬虫利用18行代码爬取虎牙上百张小姐姐图片 下面开始上代码 需要用到的库 import request #页面请求 import time #用于时间延迟 import re #正则表达式 ...

  9. Python爬虫笔记(3)- 爬取丁香园留言

    Python爬虫笔记(3)- 爬取丁香园留言 爬取丁香园留言:主要用到了模拟登录 爬取丁香园留言:主要用到了模拟登录 import requests, json, re, random,time fr ...

最新文章

  1. Vue项目中使用wangEditor富文本输入框(推荐)
  2. Android Service与Runnable整合并用
  3. python3.4.4怎么用_python3.4使用文件
  4. [剑指offer]面试题41:和为s的两个数字VS和为s的连续正数序列
  5. ImageView及其子类
  6. 以二维振动为例展示使用matlab画圆形三维图的偷懒方法
  7. 【算法分析与设计】矩阵链乘法最优顺序问题
  8. 分享一下字节面试和华为面试,希望我失败经验能为大家铺铺路
  9. 安装系统不求人 就算没有光驱和软驱也能行
  10. BZOJ3505 [Cqoi2014]数三角形
  11. 我们到底能从《别逗了,费曼先生》中学到什么?
  12. zlib压缩解压缩文件
  13. django {%url %}传递参数 url 传参 报错
  14. Pseudo-3D Residual Networks算法的pytorch代码
  15. Latex【Error】Reference:Something‘s wrong--perhaps a missing \item. \end{thebibliography} 参考文献报错
  16. 独立产品灵感周刊 DecoHack #013
  17. java getiotype_坑爹微信之读取PKCS12流时出现的java.io.IOException: DerInputStream.getLength...
  18. 2113: 小飞的游戏
  19. java job定时任务_java实现job功能,定时开启任务
  20. VS SDK更新问题(error MSB8036: 找不到 Windows SDK 版本10.0.14393.0)

热门文章

  1. opencv中使用摄像头录制视频
  2. 【安卓开发、鸿蒙开发】安卓模拟按键事件
  3. html盒子模型的实例,html盒模型的示例分析
  4. 佐助题库1000:1+2+3+N
  5. 倍控3865U软路由安装网络行为管控插件Fros
  6. 数据仓库—stg层_数据仓库(一):认识数据仓库
  7. mysql sha256 示例_SHA256简介
  8. 中标麒麟——初次体验,感觉流畅
  9. 【点宽专栏】破解波动性突破实盘系统
  10. 学计算机的心理300字,【必备】心理作文300字7篇