需求分析
根据输入的贴吧名字爬取指定贴吧的前100页html。
主要逻辑
为了养成面向对象编程的思想,我们选择写一个贴吧爬虫类。
1.start_url
2.发送请求,获取响应
3.提取数据,跳到下一页地址
3.1提取列表页的url地址
3.2请求列表页的url地址,获取详情页的第一页
3.3提取详情页第一页的图片,提取下一页的地址
3.4请求详情页下一页的地址,进入循环3.2-3.4
4.保存数据。
5.请求下一页的url地址,进入循环2-5步。
页面分析
1.打开chrome浏览器进入百度贴吧首页随意输入一个贴吧名。
比如李毅吧。

4
我们再次输入lol。

3
我们发现https://tieba.baidu.com/f?kw=李毅, 在我们搜索不同的吧名时所携带的参数kw=后面就是我们搜索的吧名。
2.我们点击下一页进入第二页。

2
发现url的地址是:https://tieba.baidu.com/f?kw=李毅&ie=utf-8&pn=50
我们再点下一页到第三页。

5
发现url地址是:https://tieba.baidu.com/f?kw=李毅&ie=utf-8&pn=100
我们再把pn后面的参数改为0。发现回到了李毅吧第一页。说明每次增加一页pn后面的数字加50。

1
主要模块
1.init方法对爬虫实例进行初始化
self.tieba_name接收用户指定的贴吧名字
self.url_temp是一个拼接字符串,其中贴吧名和页码数pn是变化的,每次增加一页,数字加50。
self.headers构造请求头,模拟浏览器访问。
右键点击检查,把User-Agent复制下来。

6
def __init__(self, tieba_name):
self.tieba_name = tieba_name
self.url_temp = "https://tieba.baidu.com/f?kw=" + self.tieba_name + "&ie=utf-8&pn={}"
self.headers = {
"User - Agent": "Mozilla / 4.0(X11;Linuxx85_64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 75.0.3770.142Safari / 537.36"
}
2.get_url_list方法构造url列表
def get_url_list(self):
"""构造url列表"""
url_list = list()
for i in range(100):
url_list.append(self.url_temp.format(i*50))
return url_list
此处可以用列表推导式优化代码,如下:
def get_url_list(self):
"""构造url列表"""
return [self.url_temp.format(i * 50) for i in range(100)]
3.parse_url方法发送请求,获取响应
使用requests发送请求,return返回响应的内容。
def parse_url(self, url):
"""发送请求,获取响应"""
print(url)
response = requests.get(url, headers=self.headers)
return response.content.decode()
4.save_html保存数据,并且保存为[贴吧名]-第[页码]页的html文件。
def save_html(self, html_str, page_num):
"""保存html字符串"""
file_path = "{}-第{}页.html".format(self.tieba_name, page_num)
with open(file_path, "w", encoding="utf-8") as f:
f.write(html_str)
5.run方法实现主要逻辑。
def run(self):
"""实现主要逻辑"""
# 1.构造URL列表
url_list = self.get_url_list()
# 2.遍历,发送请求,获取响应
for url in url_list:
html_str = self.parse_url(url)
# 3.保存
page_num = url_list.index(url) + 1 # 页码数
self.save_html(html_str, page_num)
最后对贴吧爬虫类进行实例化。
if __name__ == "__main__":
tieba_spider = TiebaSpider(input("请输入贴吧名字:"))
tieba_spider.run()
运行后输入 李毅 回车。

7
出现爬取下来的html文件,可以在浏览器打开。

8
本文章仅用于学习交流,切勿用于非法用途。完整代码保存在我的个人网站上,感兴趣的小伙伴请点击传送门百度贴吧爬虫。同时欢迎各位读者在评论区进行批评指正与交流,我们一起学爬虫,获取更多爬虫教程以及源码请关注www.51spider.cn。