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中常用检测字符串相关函数汇总
Apr 15 Python
python通过自定义isnumber函数判断字符串是否为数字的方法
Apr 23 Python
在Python中使用正则表达式的方法
Aug 13 Python
Python 多线程抓取图片效率对比
Feb 27 Python
详解重置Django migration的常见方式
Feb 15 Python
Python一个简单的通信程序(客户端 服务器)
Mar 06 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
Dec 19 Python
Python操作Sqlite正确实现方法解析
Feb 05 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
Feb 17 Python
Python自定义聚合函数merge与transform区别详解
May 26 Python
Python3 pywin32模块安装的详细步骤
May 26 Python
python自动生成证件号的方法示例
Jan 14 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 session处理的定制
2009/03/16 PHP
PHP生成自定义长度随机字符串的函数分享
2014/05/04 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
php metaphone()函数的定义和用法
2016/05/15 PHP
php图像处理函数imagecopyresampled用法详解
2016/12/02 PHP
javascript 精粹笔记
2010/05/09 Javascript
javascript调试说明
2010/06/07 Javascript
Jquery从头学起第四讲 jquery入门教程
2010/08/01 Javascript
JS 两日期相减,获得天数的小例子(兼容IE,FF)
2013/07/01 Javascript
jquery中animate动画积累的解决方法
2013/10/05 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
再JavaScript的jQuery库中编写动画效果的指南
2015/08/13 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
JavaScript类型系统之布尔Boolean类型详解
2016/06/26 Javascript
js enter键激发事件实例代码
2016/08/17 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
前端Vue项目详解--初始化及导航栏
2019/06/24 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
pyspark操作MongoDB的方法步骤
2019/01/04 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
浅谈HTML5 defer和async的区别
2016/06/07 HTML / CSS
精油和天然健康美容产品:Art Naturals
2018/01/27 全球购物
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
辞职信如何写
2015/02/27 职场文书
2015年七一建党节演讲稿
2015/03/19 职场文书
公司员工辞职信范文
2015/05/12 职场文书
匿名信格式范文
2015/05/27 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书
Golang二维切片初始化的实现
2021/04/08 Golang
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA
windows10 家庭版下FTP服务器搭建教程
2022/08/05 Servers