Python爬虫实战:爬取百度贴吧数据并保存到本地
💡 学习提示:本文提供完整爬虫代码,适合Python初学者。更多数据分析/职场/AI干货,欢迎关注公主号:船长Talk
需求分析
我们需要爬取百度贴吧指定关键词的多页内容,并将每页保存为HTML文件。
完整代码
# Python爬虫:爬取百度贴吧数据
# 公主号:船长Talk(更多数据分析/职场/AI干货)
import requests
import time
def GetHtml(keywords, pages, timeSleep):
"""
爬取百度贴吧数据并保存到本地
Args:
keywords: 搜索关键词
pages: 爬取页数
timeSleep: 每次爬取间隔时间(秒)
"""
# 百度贴吧基础URL
url = "http://tieba.baidu.com/f"
# 设置User-Agent,模拟浏览器访问
kv = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36'
}
# 循环爬取指定页数
for i in range(0, pages):
# 构造文件名
File_name = '贴吧第' + str(i+1) + '页' + '.html'
# 计算偏移量(每页50条)
i = i * 50
# 构造请求参数
kv2 = {'kw': keywords, 'pn': i}
# 控制爬取频率,避免被封IP
time.sleep(timeSleep)
# 发送GET请求
r = requests.get(url, params=kv2, headers=kv)
# 打印实际访问URL
print(r.url)
# 设置编码为utf-8
r.encoding = "utf8"
# 保存到本地文件
with open(File_name, 'w', encoding="utf8") as baiduFile:
baiduFile.write(r.text)
if __name__ == '__main__':
while True:
# 获取用户输入
keywords = input("请输入搜索关键字:")
pages = int(input("请输入需要获得的页数:"))
timeSleep = int(input('请输入每次爬取的间隔时间:'))
# 执行爬取
GetHtml(keywords, pages, timeSleep)
print("爬取成功!")
# 询问是否继续
choice = input("是否继续爬取其他关键词?(y/n): ")
if choice.lower() != 'y':
break
代码解析
1. 导入必要的库
import requests # HTTP请求库
import time # 时间控制库
2. GetHtml函数参数
-
keywords:搜索的关键词 -
pages:要爬取的页数 -
timeSleep:每次请求间隔时间(秒),避免频繁请求被封IP
3. 关键代码说明
User-Agent设置:模拟浏览器访问,避免被反爬虫机制拦截。
分页参数pn:百度贴吧每页显示50条帖子,pn=0表示第一页,pn=50表示第二页,以此类推。
编码设置:设置 r.encoding = "utf8" 避免中文乱码。
运行示例
请输入搜索关键字:Python
请输入需要获得的页数:3
请输入每次爬取的间隔时间:2
http://tieba.baidu.com/f?kw=Python&pn=0
http://tieba.baidu.com/f?kw=Python&pn=50
http://tieba.baidu.com/f?kw=Python&pn=100
爬取成功!
注意事项
-
控制爬取频率:建议间隔时间不少于2秒,避免频繁请求被封IP
-
遵守robots协议:仅用于学习目的,不要用于商业用途
-
合法合规:不要爬取敏感内容或侵犯隐私的数据
更多Python/数据分析/职场干货,欢迎关注公主号:船长Talk