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使用socket远程连接错误处理方法
Apr 29 Python
python简单实现基数排序算法
May 16 Python
Python函数可变参数定义及其参数传递方式实例详解
May 25 Python
Python回调函数用法实例详解
Jul 02 Python
Python爬虫爬验证码实现功能详解
Apr 14 Python
Python中datetime模块参考手册
Jan 13 Python
python3 遍历删除特定后缀名文件的方法
Apr 23 Python
Python 利用高德地图api实现经纬度与地址的批量转换
Aug 14 Python
python2和python3实现在图片上加汉字的方法
Aug 22 Python
FFT快速傅里叶变换的python实现过程解析
Oct 21 Python
python 实现检验33品种数据是否是正态分布
Dec 09 Python
使用python+poco+夜神模拟器进行自动化测试实例
Apr 23 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编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
一个完整的php文件上传类实例讲解
2015/10/27 PHP
解决laravel id非自增 模型取回为0 的问题
2019/10/11 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
javascript String 的扩展方法集合
2008/06/01 Javascript
ASP 过滤数组重复数据函数(加强版)
2010/05/31 Javascript
javascript与webservice的通信实现代码
2010/12/25 Javascript
JS无法捕获滚动条上的mouse up事件的原因猜想
2012/03/21 Javascript
jQuery动画效果实现图片无缝连续滚动
2016/01/12 Javascript
jquery自动补齐功能插件flexselect用法示例
2016/08/06 Javascript
Angular 4 指令快速入门教程
2017/06/07 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
2017/08/04 Javascript
node.js 发布订阅模式的实例
2017/09/10 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
Angular刷新当前页面的实现方法
2018/11/21 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
nodejs dgram模块广播+组播的实现示例
2019/11/04 NodeJs
vue实现简单瀑布流布局
2020/05/28 Javascript
你不知道的SpringBoot与Vue部署解决方案
2020/11/09 Javascript
详解Python 数据库 (sqlite3)应用
2016/12/07 Python
python实现的多线程端口扫描功能示例
2017/01/21 Python
Django自定义插件实现网站登录验证码功能
2017/04/19 Python
浅谈python 里面的单下划线与双下划线的区别
2017/12/01 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
Python 保持登录状态进行接口测试的方法示例
2019/08/06 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
PHP面试题大全
2015/10/16 面试题
求职简历的自我评价怎样写好
2013/10/07 职场文书
公司年会主持词
2014/03/22 职场文书
授权委托书范本
2014/04/03 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书