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 相关文章推荐
Python转码问题的解决方法
Oct 07 Python
使用Python压缩和解压缩zip文件的教程
May 06 Python
简单掌握Python的Collections模块中counter结构的用法
Jul 07 Python
python2.7 mayavi 安装图文教程(推荐)
Jun 22 Python
python实现自主查询实时天气
Jun 22 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
Jan 29 Python
Python实现数据结构线性链表(单链表)算法示例
May 04 Python
django自定义模板标签过程解析
Dec 14 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
Dec 19 Python
Python基于类路径字符串获取静态属性
Mar 12 Python
selenium切换标签页解决get超时问题的完整代码
Aug 30 Python
python中Array和DataFrame相互转换的实例讲解
Feb 03 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 数组的创建、调用和更新实现代码
2009/03/09 PHP
php后退一页表单内容保存实现方法
2012/06/17 PHP
深入php list()函数的详解
2013/06/05 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
PHP通过串口实现发送短信
2015/07/08 PHP
PHP常见数组函数用法小结
2016/03/21 PHP
PHP基于GD库实现的生成图片缩略图函数示例
2017/07/05 PHP
JavaScript 开发中规范性的一点感想
2009/06/23 Javascript
用js做一个小游戏平台 (一)
2009/12/29 Javascript
jQuery中创建实例与原型继承揭秘
2011/12/21 Javascript
用nodejs实现PHP的print_r函数代码
2014/03/14 NodeJs
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
最简单的JavaScript图片轮播代码(两种方法)
2015/12/18 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
vue如何获取点击事件源的方法
2017/08/10 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
2017/11/07 Javascript
windows下更新npm和node的方法
2017/11/30 Javascript
vue实现select下拉显示隐藏功能
2019/09/30 Javascript
JS如何生成动态列表
2020/09/22 Javascript
[01:15]《辉夜杯》北京网鱼队巡礼
2015/10/26 DOTA
简单理解Python中的装饰器
2015/07/31 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
python中reduce()函数的使用方法示例
2017/09/29 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
2019/07/28 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
自主招生自荐信格式
2013/12/03 职场文书
导游实习生自荐书
2014/01/28 职场文书
《维生素c的故事》教学反思
2014/02/18 职场文书
小学生爱国演讲稿
2014/04/25 职场文书
2014年消防工作总结
2014/11/21 职场文书
2014年小学英语教师工作总
2014/12/03 职场文书
社区安全温馨提示语
2015/07/14 职场文书
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript