Python百度贴吧爬虫实战:完整数据采集指南

0 阅读2分钟

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