贴吧爬取保存到本地

面向过程的代码

import requests

# 步骤
# 确定url地址,生成一个url列表
# 遍历url列表,请求数据
# 把返回的数据保存到本地

# https://tieba.baidu.com/f?kw=武汉&pn=0    50*0
# https://tieba.baidu.com/f?kw=武汉&pn=50   50*1
# https://tieba.baidu.com/f?kw=武汉&pn=100   50*2
# https://tieba.baidu.com/f?kw=武汉&pn=150   50*3
# https://tieba.baidu.com/f?kw=武汉&pn=200   50*4
# 自定义贴吧的名字
name = input('请输入贴吧的名字:')
# url模版
url = 'https://tieba.baidu.com/f?kw={}&pn={}'
# 生成url列表
url_list = [url.format(name, i * 50) for i in range(5)]
print(url_list)
# 定义请求头信息   把浏览器的信息拷贝过来
headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"}
# 遍历url_list, 得到url
for item in url_list:
    # 请求url , 获取数据
    response = requests.get(item, headers=headers)
    # 文件名字
    file_name = '贴吧_' + name + "第{}页".format(url_list.index(item)+1)+".html"
    # 保存到文件
    with open(file_name, 'w', encoding='utf-8') as f:
        f.write(response.content.decode())

封装面向对象的代码

# 1.确定url 生成url_list
# 2.遍历列表,请求数据
# 3.返回数据,保存到本地
import requests


class Tieba_spider(object):
    def __init__(self, name):
        # 贴吧的名字
        self.name = name
        # 初始化贴吧的url
        self.url = 'https://tieba.baidu.com/f?kw=' + name + '&pn={}'
        # 定义请求头信息   把浏览器的信息拷贝过来
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"}

    def get_url_list(self):
        """生成url列表"""
        url_list = [self.url.format(i * 50) for i in range(5)]
        return url_list

    def get_data_fromurl(self, url):
        """从服务器获取数据,并且解码返回"""
        # 请求url , 获取数据   这个url 是从url_list遍历得来的
        response = requests.get(url, headers=self.headers)
        return response.content.decode()

    def save_html(self, html_str, num):
        # 文件名字
        file_name = '贴吧_' + self.name + "第{}页".format(num) + ".html"
        # 保存到文件
        with open(file_name, 'w', encoding='utf-8') as f:
            f.write(html_str)

    def run(self):
        pass
        # 1.确定url 生成url_list
        url_list = self.get_url_list()
        # 2.遍历列表,请求数据
        for item_url in url_list:
            html_str = self.get_data_fromurl(item_url)
            # 3.返回数据,保存到本地
            self.save_html(html_str, url_list.index(item_url) + 1)


if __name__ == '__main__':
    # 输入
    name = input('请输入贴吧名字:')
    # 初始化
    spider = Tieba_spider(name)
    # 调用run方法
    spider.run()

猜你喜欢

转载自www.cnblogs.com/wutongluo/p/12735498.html
今日推荐