import requests


class TiebaSpider:
    """百度贴吧爬虫类"""

    def __init__(self, tieba_name) -> None:
        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/110.0.0.0 Safari/537.36"}

    def get_url_list(self) -> list:
        """构造一个url列表,将所有url_temp添加到列表中,并返回列表"""
        url_list = []
        for i in range(10):
            url_list.append(self.url_temp.format(i*50))
        return url_list
        # return [self.url_temp.format(i*50) for i in range(10)]

    def parse_url(self, url) -> str:
        """
        发送请求获取响应

        url:get_url_list方法中返回列表中的url元素
        """
        print(url)  # 打印爬取的当前url
        # 发送请求
        response = requests.get(url, headers=self.headers)
        # 返回解码后的字符串
        return response.content.decode()

    def seve_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)

    def run(self):
        """主逻辑方法"""
        # 1.将get_url_list方法返回的列表重新赋值给url_list
        url_list = self.get_url_list()
        # 2.遍历,发送请求,获取响应
        for url in url_list:
            # 将parse_url返回的字符串赋值给html_str变量
            html_str = self.parse_url(url)
            # 3.保存
            # 将列表的索引赋值给page_num
            page_num = url_list.index(url) + 1  # 页码
            # 调用seve_html方法,储存html_str
            self.seve_html(html_str, page_num)


if __name__ == "__main__":
    t = TiebaSpider("李毅")

思维导图