python爬虫解决中文乱码和爬取美女图片
想试试爬取图片是,结果图片名字打印的时候就出现了中文乱码。
代码是这样的
# -- 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爬虫解决中文乱码和爬取美女图片相关推荐
- Python 爬虫实例(1)—— 爬取百度图片
爬取百度图片 在Python 2.7上运行 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: loveNightimport json ...
- python爬虫实战1:批量爬取网址图片
1.爬虫基础知识 目前,爬虫的相关知识了解了以下这么多. 2.爬取图片的步骤 学习了很多视频教程,基本介绍爬虫都是主要分3步: 1.请求网页 2.解析网页 3.保存图片 3.爬虫实战 唯有实战,才能提 ...
- 从入门到入土:Python爬虫学习|实例练手|爬取百度产品列表|Xpath定位标签爬取|代码注释详解
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- 从入门到入土:Python爬虫学习|实例练手|爬取猫眼榜单|Xpath定位标签爬取|代码
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- 从入门到入土:Python爬虫学习|实例练手|爬取百度翻译|Selenium出击|绕过反爬机制|
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- 从入门到入土:Python爬虫学习|实例练手|爬取新浪新闻搜索指定内容|Xpath定位标签爬取|代码注释详解
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- Python 爬虫实战,模拟登陆爬取数据
Python 爬虫实战,模拟登陆爬取数据 从0记录爬取某网站上的资源连接: 模拟登陆 爬取数据 保存到本地 结果演示: 源网站展示: 爬到的本地文件展示: 环境准备: python环境安装 略 安装r ...
- Python爬虫利用18行代码爬取虎牙上百张小姐姐图片
Python爬虫利用18行代码爬取虎牙上百张小姐姐图片 下面开始上代码 需要用到的库 import request #页面请求 import time #用于时间延迟 import re #正则表达式 ...
- Python爬虫笔记(3)- 爬取丁香园留言
Python爬虫笔记(3)- 爬取丁香园留言 爬取丁香园留言:主要用到了模拟登录 爬取丁香园留言:主要用到了模拟登录 import requests, json, re, random,time fr ...
最新文章
- Vue项目中使用wangEditor富文本输入框(推荐)
- Android Service与Runnable整合并用
- python3.4.4怎么用_python3.4使用文件
- [剑指offer]面试题41:和为s的两个数字VS和为s的连续正数序列
- ImageView及其子类
- 以二维振动为例展示使用matlab画圆形三维图的偷懒方法
- 【算法分析与设计】矩阵链乘法最优顺序问题
- 分享一下字节面试和华为面试,希望我失败经验能为大家铺铺路
- 安装系统不求人 就算没有光驱和软驱也能行
- BZOJ3505 [Cqoi2014]数三角形
- 我们到底能从《别逗了,费曼先生》中学到什么?
- zlib压缩解压缩文件
- django {%url %}传递参数 url 传参 报错
- Pseudo-3D Residual Networks算法的pytorch代码
- Latex【Error】Reference:Something‘s wrong--perhaps a missing \item. \end{thebibliography} 参考文献报错
- 独立产品灵感周刊 DecoHack #013
- java getiotype_坑爹微信之读取PKCS12流时出现的java.io.IOException: DerInputStream.getLength...
- 2113: 小飞的游戏
- java job定时任务_java实现job功能,定时开启任务
- VS SDK更新问题(error MSB8036: 找不到 Windows SDK 版本10.0.14393.0)