【笔记整理】[案例]爬取贴吧并保存网页文件

发布时间 2023-07-17 11:05:40作者: 蕝戀

[案例]爬取贴吧并保存网页文件

import urllib.parse
import requests


class TiebaSpider(object):
    def __init__(self, url, name):
        self.url = url
        self.name = name

    def get_data(self, pagesize):
        # 带了UA去请求和不带UA去请求返回的内容不一样,证明网站都是有检测UA的,以前做易语言POST都做过了....
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/104.0"
        }
        url = f"{self.url}{urllib.parse.quote(self.name)}&ie=utf-8&pn={pagesize * 50}"

        #print(f"{url=}")

        # 如果不想requests使用系统代理,但是你系统上正在运行代理,可以将代理设置为None
        proxies = {
            # 这个字典的key不可以乱写,必须是http和https
            # 如果你的只有http那就只写http代理,htpps也是相同的道理。
            # http代理
            "http": None,
            # https代理
            "https": None
        }
        # 或者修改脚本的环境变量,添加一个NO_PROXY=* 也可以解决问题
        # os.environ["NO_PROXY"] = "*"

        resp = requests.get(url, headers=headers, )
        return resp.content

    def save_to_file(self, file_path, data):
        with open(file_path, "wb") as f:
            f.write(data)

    def run(self, size):
        for i in range(size + 1):
            print(f"正在{self.name}获取第{i + 1}页....")
            data = self.get_data(i)
            self.save_to_file(f"tieba-{self.name}page{i + 1}.html", data)


if __name__ == '__main__':
    import sys

    if len(sys.argv) >= 3:
        name = sys.argv[1]
        pages = int(sys.argv[2])
    else:
        # 不爬太多了,就爬几页
        pages = 2
        name = "海贼王"

    url = "https://tieba.baidu.com/f?kw="

    TiebaSpider(url, name).run(pages)