Python3爬虫--阶段性成果
来源:互联网 发布:php简易商城源码 编辑:程序博客网 时间:2024/05/16 13:47
抓取妹子图网站某一个页面的专题图片。
工具:Anaconda3
详细记录从无到有的过程:
相关网页源代码:
1 requests + BeautifulSoup获取图片名和图片链接
from bs4 import BeautifulSoupimport requestsurlpage = "http://www.meizitu.com/a/5530.html"html = requests.get(urlpage)soup = BeautifulSoup(html.content,"lxml")img_tag = soup.find('div',id="picture").find_all("img")print(img_tag)
运行结果,得到了所有专题图片的标签(一个列表)。
In [1]: runfile('C:/Users/Administrator/Desktop/scrapy/meizitu1.py', wdir='C:/Users/Administrator/Desktop/scrapy')[<img alt="你觉得哪个妹纸最打动你的心,第1张" src="http://mm.howkuai.com/wp-content/uploads/2017a/04/18/01.jpg"/>, <img alt="你觉得哪个妹纸最打动你的心,第2张" src="http://mm.howkuai.com/wp-content/uploads/2017a/04/18/02.jpg"/>, <img alt="你觉得哪个妹纸最打动你的心,第3张" src="http://mm.howkuai.com/wp-content/uploads/2017a/04/18/03.jpg"/>, <img alt="你觉得哪个妹纸最打动你的心,第4张" src="http://mm.howkuai.com/wp-content/uploads/2017a/04/18/04.jpg"/>, <img alt="你觉得哪个妹纸最打动你的心,第5张" src="http://mm.howkuai.com/wp-content/uploads/2017a/04/18/05.jpg"/>, <img alt="你觉得哪个妹纸最打动你的心,第6张" src="http://mm.howkuai.com/wp-content/uploads/2017a/04/18/06.jpg"/>, <img alt="你觉得哪个妹纸最打动你的心,第7张" src="http://mm.howkuai.com/wp-content/uploads/2017a/04/18/07.jpg"/>, <img alt="你觉得哪个妹纸最打动你的心,第8张" src="http://mm.howkuai.com/wp-content/uploads/2017a/04/18/08.jpg"/>, <img alt="你觉得哪个妹纸最打动你的心,第9张" src="http://mm.howkuai.com/wp-content/uploads/2017a/04/18/09.jpg"/>]
可以发现,图片名字对应着 img 标签的 alt 属性,图片链接对应着 img 标签的 src 属性。
还有,每个 img 标签都是 img_tag 列表中的一个元素,例如查看列表中第二个元素的图片名和图片链接:
In [7]: img_url_2 = img_tag[1]['src']In [8]: img_name_2 = img_tag[1]['alt']In [9]: img_url_2Out[9]: 'http://mm.howkuai.com/wp-content/uploads/2017a/04/18/02.jpg'In [10]: img_name_2Out[10]: '你觉得哪个妹纸最打动你的心,第2张'
2 根据图片链接和图片名下载图片
urllib.request库中的urlretrieve()方法可以用来下载图片:
In [12]: from urllib.request import urlretrieveIn [13]: help(urlretrieve)Help on function urlretrieve in module urllib.request:urlretrieve(url, filename=None, reporthook=None, data=None) Retrieve a URL into a temporary location on disk. Requires a URL argument. If a filename is passed, it is used as the temporary file location. The reporthook argument should be a callable that accepts a block number, a read size, and the total file size of the URL target. The data argument should be valid URL encoded data. If a filename is passed and the URL points to a local resource, the result is a copy from local file to new file. Returns a tuple containing the path to the newly created data file as well as the resulting HTTPMessage object.
然后想到把urlretrieve()方法加到循环体内:
for i in range(len(img_tag)): img_url = img_tag[i]['src'] img_name = img_tag[i]['alt'] path = 'F:\\meizitu\\'+img_name+'.jpg' urlretrieve(img_url,path) print("正在下载第"+str(i+1)+"张图片")
上篇文章提到过了,这时候出现了 HTTPError: Forbidden 的报错。
3 解决问题
解决方法是为请求加上HTTP头部信息,伪装成浏览器访问网页来下载图片:
打开浏览器,单击鼠标右键—检查—Network—F5刷新—单击任意Name元素—Headers—Requests Headers中的User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
修改后的代码:
from bs4 import BeautifulSoupimport requestsfrom urllib.request import urlretrieveimport urllib.requestopener=urllib.request.build_opener()opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1941.0 Safari/537.36')]urllib.request.install_opener(opener)urlpage = "http://www.meizitu.com/a/5530.html"html = requests.get(urlpage)soup = BeautifulSoup(html.content,"lxml")img_tag = soup.find('div',id="picture").find_all("img")#print(img_tag)for i in range(len(img_tag)): img_url = img_tag[i]['src'] img_name = img_tag[i]['alt'] path = 'F:\\pic_test\\'+img_name+'.jpg' urlretrieve(img_url,path) print("正在下载第"+str(i+1)+"张图片")
运行结果:
runfile('C:/Users/Administrator/Desktop/scrapy/meizitu1.py', wdir='C:/Users/Administrator/Desktop/scrapy')正在下载第1张图片正在下载第2张图片正在下载第3张图片正在下载第4张图片正在下载第5张图片正在下载第6张图片正在下载第7张图片正在下载第8张图片正在下载第9张图片
F盘的pic_test文件夹中出现了下载好的9张图片:
只是抓取了某个页面的图片,没有异常处理,没有使用requests库中的高级用法,没有封装代码。
但是,已经很不错了啊,哈哈
阅读全文
0 0
- Python3爬虫--阶段性成果
- python3 爬虫
- python3爬虫
- python3 爬虫
- Python3 爬虫
- python3 多线程爬虫
- 自制 Python3爬虫
- python3.4-小爬虫
- python3基本爬虫
- Python3.4爬虫编程
- Python3.x爬虫
- Python3写简单爬虫
- python3 爬虫 urlretrieve
- python3.5.2爬虫
- [python3]糗事百科爬虫
- python3爬虫之旅
- python3爬虫学习
- python3爬虫(一)
- GIT 源码阅读之 update-cache
- mysql 命令安装zip版本总结
- 网页加载速度提升——大总结(未完待续)
- Androidstudio查不出具体哪行报错解决办法
- http://blog.csdn.net/erfucun/article/details/52269610
- Python3爬虫--阶段性成果
- Spring3.1.0实现原理分析(十九).MVC异常处理
- Android异常捕获篇(下)---retrofit实现文件的上传
- Extern C {}
- poj3169----查分约束系统的应用
- 640. Solve the Equation
- 《Thinking In Algorithm》09.彻底理解递归
- Opendaylight源码编译相关问题以及导入eclipse
- Spark Streaming基于kafka的Direct详解