背景:最近开始看一些Python爬虫相关的知识,就在网上找了一些简单已与练习的一些爬虫脚本
实现功能:1,读取用户想要爬取的贴吧
2,读取用户先要爬取某个贴吧的页数范围
3,爬取每个贴吧中用户输入的页数范围内的每个帖子的链接
4,爬取每个帖子中的图片,并下载到本地。
开发环境:Python 3.7 , lxml, urllib
思路分析:
1,指定贴吧URL的获取
比如我们进入“秦时明月汉时关”吧
?后面为查询字符串,“%E7%A7%A6%E6%97%B6%E6%98%8E%E6%9C%88“是贴吧名称“秦时明月”的url编码。
这样我们就可以通过构造请求进入每一个贴吧了,代码实现如下:
importurllib.parse#贴吧url前半部分
url = "http://tieba.baidu.com/f?"value= input("请输入要爬取的贴吧名称:")#将查询字符串转换为url编码形式
key = urllib.parse.urlencode({"kw":value})#组合完整的贴吧url url = url +key#查看完整url
print url
运行程序,这里输入“天行九歌”作为演示,可以得到天行九歌吧的完整链接如下:
这样就可以获取任意贴吧的链接了。
二、获取贴吧指定页数的链接:
我们进入天行九歌吧,取出该贴吧第2页到底4页的url,如下:
我们发现,每一页的url变化的是pn的值,依次增加50,结合上面贴吧完整的url,要想获得每一页的链接可以如下
importurllib.parse
url= "http://tieba.baidu.com/f?"value= input("请输入要爬取的贴吧名称:")
key= urllib.parse.urlencode({"kw":value})#贴吧完整url
url = url +key
begin_page= int(input("请输入起始页:"))
end_page= int(input("请输入终止页:"))for page in range(begin_page, end_page+1):
pn= (page-1)*50
#组合出贴吧每一页的url
full_url = url + "&pn=" +str(pn)