zoukankan      html  css  js  c++  java
  • 贴吧爬取保存到本地

    面向过程的代码

    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()
  • 相关阅读:
    解决Android SDK Manager无法更新下载
    使用Anaconda3配置多版本Python虚拟开发环境
    Python·Jupyter Notebook各种使用方法
    学习 python 编写规范 pep8 的问题笔记
    ajax工作原理及其优缺点
    json和jsonp
    cookie、session、localStorage、sessionStorage区别
    浅谈前端性能优化(PC版)
    浅谈前端性能优化(移动端)
    前端优化 -- Combo Handler
  • 原文地址:https://www.cnblogs.com/wutongluo/p/12735498.html
Copyright © 2011-2022 走看看