Python面向对象爬取百度贴吧:requests库实现前1000页数据抓取

橘子海
橘子海
发布时间:2026-10-13 | 4人浏览过
原创

本文介绍如何使用Python的requests库结合面向对象思想,编写程序批量抓取百度贴吧指定吧前1000页的网页内容。通过封装URL生成、请求发送及HTML保存等方法,实现高效的数据采集流程,适合初学者理解爬虫基础逻辑与代码结构。

百度贴吧爬虫实现概述

本示例以李毅吧为目标,采用面向对象的设计模式来编写爬虫程序,实现网页数据的爬取与本地保存。目前版本尚未引入并发处理机制,后续可根据实际需求进行性能优化。

  • 在开始编码前,需先分析百度贴吧的URL结构。通过观察地址栏参数,确定分页对应的参数名为pn,以及指定贴吧名称的参数名为kw。
  • 接下来定义爬虫类,初始化__init__方法,并预留run方法作为程序入口。在__init__中,可先使用pass语句占位,后续再补充具体逻辑。
  • 在run方法中,梳理整体执行逻辑:首先构造URL列表,然后遍历发送请求获取响应,最后保存HTML内容。
    • 为了获取前1000页的数据,需要构造一个包含所有目标页面的URL列表,确保每一页都有对应的访问链接。
    • 遍历生成的URL列表,依次发送HTTP请求并获取服务器返回的响应数据。
    • 将获取到的HTML内容保存至本地文件,以便后续处理或查看。
  • 为了提高代码的可读性和复用性,将可封装的功能步骤分离到独立的方法中,因此额外增加了三个辅助方法。
    • 定义get_url_list方法,负责生成并返回所有需要访问的URL列表。
    • 定义parse_url方法,用于接收单个URL,发送请求获取响应,并返回解析后的HTML页面字符串。
    • 定义save_html方法,负责将HTML字符串写入本地文件进行持久化存储。
    • run方法作为核心调度器,整合上述三个功能方法及所需参数,执行完整的爬取流程。
  • 对于程序中频繁使用的参数,建议在__init__方法中将其定义为实例属性,以便在各方法间共享和调用。
  • 完成类定义后,实例化该类并运行测试。程序将自动在当前目录下持续生成保存的HTML文件。

核心代码结构与逻辑


import requests


class TiebaSpider(object):
  def __init__(self, tieba_name): # tieba_name为要爬取贴吧的名称
    self.tieba_name = tieba_name
    self.url_temp = 'https://tieba.baidu.com/f?kw=' + tieba_name + '&ie=utf-8&pn={}'
    self.headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
    }

  def get_url_list(self): # 构造url列表
    # url_list = []
    # for i in range(1000):
    #   url_list.append(self.url_temp.format(i * 50))
    # return url_list
    return [self.url_temp.format(i*50) for i in range(1000)] # 列表推导式替换上面代码

  def parse_url(self, url): # 发送请求,获取响应
    print(url)
    response = requests.get(url, headers=self.headers)
    return response.content.decode()

  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: # 样例: 李毅-第一页.html
      f.write(html_str)

  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('李毅')
  tieba_spider.run()

总结与展望

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表