python爬取百度贴吧前1000页内容(requests库面向对象思想实现)


Posted in Python onAugust 10, 2019

此程序以李毅吧为例子,以面向对象的设计思想实现爬取保存网页数据,暂时并未用到并发处理,以后有机会的话会加以改善

  • 首先去百度贴吧分析贴吧地址栏中url后的参数,找到分页对应的参数pn,贴吧名字对应的参数kw
  • 首先创建类,写好__init__方法,run方法,__init__方法里先可以直接写pass
  • run方法里大概整理一下整体的思路
    • 构造 url 列表,因为要爬取1000页,每页需对应一个url
    • 遍历发送请求,获取响应
    • 保存
  • 将可封装的步骤封装到单独的方法,所以这里又增加了三个方法
    • get_url_list方法可以返回需要访问的所有url的一个列表
    • parse_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 相关文章推荐
Cython 三分钟入门教程
Sep 17 Python
Python基础之函数用法实例详解
Sep 10 Python
Python中工作日类库Busines Holiday的介绍与使用
Jul 06 Python
numpy排序与集合运算用法示例
Dec 15 Python
python 划分数据集为训练集和测试集的方法
Dec 11 Python
Python内存管理实例分析
Jul 10 Python
python实现单链表的方法示例
Sep 03 Python
将python安装信息加入注册表的示例
Nov 20 Python
python中的itertools的使用详解
Jan 13 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
Jan 05 Python
基于PyTorch中view的用法说明
Mar 03 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 Python
python正则爬取某段子网站前20页段子(request库)过程解析
Aug 10 #Python
Django项目主urls导入应用中views的红线问题解决
Aug 10 #Python
Python中的 sort 和 sorted的用法与区别
Aug 10 #Python
Python测试模块doctest使用解析
Aug 10 #Python
Django发送邮件和itsdangerous模块的配合使用解析
Aug 10 #Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
Aug 10 #Python
python实现邮件发送功能
Aug 10 #Python
You might like
php创建基本身份认证站点的方法详解
2013/06/08 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
Laravel框架源码解析之入口文件原理分析
2020/05/14 PHP
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
Javascript基础教程之定义和调用函数
2015/01/18 Javascript
jQuery Validate初步体验(二)
2015/12/12 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
js实现可控制左右方向的无缝滚动效果
2016/05/29 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
nodejs基础知识
2017/02/03 NodeJs
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
2017/10/27 Javascript
浅谈Vue SPA 首屏加载优化实践
2017/12/15 Javascript
JS实现的缓冲运动效果示例
2018/04/30 Javascript
微信小程序的线程架构【推荐】
2019/05/14 Javascript
ant design实现圈选功能
2019/12/17 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
python内存管理分析
2015/04/08 Python
Python批量提取PDF文件中文本的脚本
2018/03/14 Python
Python实现判断一行代码是否为注释的方法
2018/05/23 Python
对Python Pexpect 模块的使用说明详解
2019/02/14 Python
Falsk 与 Django 过滤器的使用与区别详解
2019/06/04 Python
python字典的setdefault的巧妙用法
2019/08/07 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
巴西手表购物网站:eclock
2019/03/19 全球购物
德国自行车商店:Tretwerk
2019/06/21 全球购物
Java中采用什么结构来捕获、处理异常?各子句的顺序、功能如何
2013/10/07 面试题
会计师事务所审计实习自我鉴定
2013/09/20 职场文书
小学生安全保证书
2014/02/01 职场文书
大学生社会实践活动总结
2014/07/03 职场文书
试了下Golang实现try catch的方法
2021/07/01 Golang
windows server 2012安装FTP并配置被动模式指定开放端口
2022/06/10 Servers