Fork me on GitHub

Python练习第九题,爬取贴吧图片

这是崔斯特的第四篇原创文章

一、问题:用 Python爬取妹子图片 :)

http://tieba.baidu.com/p/2166231880

二、分析贴吧网页源码

打开网页http://tieba.baidu.com/p/2166231880,F12

发现图片链接都在<img>标签中

<cc>
        <div...>
           <img...>
           <img...>

测试发现,src中的链接就是图片链接。那么就很简单,只需要把<img>中的src的链接拿出来即可。

三、写代码

环境:Python3,Pycharm

使用requestsxpath,最近才学了xpath,发现超级好用,比bs4简洁,有兴趣看看这个https://zhuanlan.zhihu.com/p/25572729

import requests
from lxml import etree

url = 'http://tieba.baidu.com/p/2166231880'
header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
r = requests.get(url,headers=header).content
s = etree.HTML(r)
print(s.xpath('//div/img/@src'))

发现链接都已经拿到手,下一步就是下载了~

下载图片的语句:

import urllib.request
path = '......' #下载链接
jpg_link = '......'  #图片链接
request.urlretrieve(jpg_link, path) 

加在一起,大功告成。

四、总结

经测试,贴吧里面其他网页如:http://tieba.baidu.com/p/1165861759

本代码都可以下载,顺便说一说问题。

1、图片名称使用图片链接中的名称,包含大量数字和字母,可以优化。

2、可以看到,下载文件中包含了一个表情,查看那是用户所发,说明筛选出了问题。

3、帖子数量多,翻页过后,需要在代码中加入获取下一页链接。

除此之外,还有什么问题呢?

源码请见:https://github.com/zhangslob/TiebaImg