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正则匹配查询港澳通行证办理进度示例分享
Dec 27 Python
Python中文编码那些事
Jun 25 Python
深入浅析Python的类
Jun 22 Python
python3 实现验证码图片切割的方法
Dec 07 Python
连接pandas以及数组转pandas的方法
Jun 28 Python
修改Pandas的行或列的名字(重命名)
Dec 18 Python
pytorch实现从本地加载 .pth 格式模型
Feb 14 Python
利用Python制作动态排名图的实现代码
Apr 09 Python
python中wx模块的具体使用方法
May 15 Python
Python map及filter函数使用方法解析
Aug 06 Python
python 将列表里的字典元素合并为一个字典实例
Sep 01 Python
Python实现钉钉/企业微信自动打卡的示例代码
Feb 02 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+mysql注射语句构造
2009/10/30 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
2014/11/29 PHP
php随机抽奖实例分析
2015/03/04 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
2016/02/23 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
jQuery 连续列表实现代码
2009/12/21 Javascript
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
15个常用的jquery代码片段
2015/12/19 Javascript
JavaScript实现身份证验证代码
2016/02/17 Javascript
通过javascript实现扫雷游戏代码实例
2020/02/09 Javascript
javascript实现滚轮轮播图片
2020/12/13 Javascript
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
Scrapy 配置动态代理IP的实现
2020/09/28 Python
美国帽子俱乐部商店:Hat Club
2019/07/05 全球购物
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
演讲稿怎么写才完美
2014/01/02 职场文书
事业单位辞职信范文
2014/01/19 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
网站创业计划书
2014/04/30 职场文书
小学生常见病防治方案
2014/06/06 职场文书
合作意向书
2014/07/30 职场文书
2015年妇联工作总结范文
2015/04/22 职场文书
幼儿园园长工作总结2015
2015/05/25 职场文书
创业计划书之婴幼儿游泳馆
2019/09/11 职场文书
Mysql 性能监控及调优
2021/04/06 MySQL
浅谈redis五大数据结构和使用场景
2021/04/12 Redis
python 机器学习的标准化、归一化、正则化、离散化和白化
2021/04/16 Python
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript