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实现文件快照加密保护的方法
Jun 30 Python
详解在Python程序中解析并修改XML内容的方法
Nov 16 Python
Python将list中的string批量转化成int/float的方法
Jun 26 Python
python实现彩色图转换成灰度图
Jan 15 Python
python实现连连看辅助(图像识别)
Mar 25 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
Aug 23 Python
python自动化工具之pywinauto实例详解
Aug 26 Python
pytorch中的transforms模块实例详解
Dec 31 Python
如何在sublime编辑器中安装python
May 20 Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 Python
python 读取串口数据的示例
Nov 09 Python
python 简单的调用有道翻译
Nov 25 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
星际争霸 Starcraft 秘技补丁
2020/03/14 星际争霸
php模板引擎技术简单实现
2016/03/15 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
没有document.getElementByName方法
2013/08/19 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
2016/06/13 Javascript
React Native实现简单的登录功能(推荐)
2016/09/19 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
在Vue中使用echarts的实例代码(3种图)
2017/07/10 Javascript
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
JS精确判断数据类型代码实例
2019/12/18 Javascript
JavaScript实现简单贪吃蛇效果
2020/03/09 Javascript
jQuery实现高度灵活的表单验证功能示例【无UI】
2020/04/30 jQuery
微信小程序学习总结(二)样式、属性、模板操作分析
2020/06/04 Javascript
python中dir函数用法分析
2015/04/17 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
2015/12/19 Python
浅谈Python浅拷贝、深拷贝及引用机制
2016/12/15 Python
浅谈python正则的常用方法 覆盖范围70%以上
2018/03/14 Python
Python使用zip合并相邻列表项的方法示例
2018/03/17 Python
python散点图实例之随机漫步
2018/08/27 Python
使用python socket分发大文件的实现方法
2019/07/08 Python
Window系统下Python如何安装OpenCV库
2020/03/05 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
Tensorflow全局设置可见GPU编号操作
2020/06/30 Python
django 实现后台从富文本提取纯文本
2020/07/02 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
Under Armour安德玛英国官网:美国高端运动科技品牌
2018/09/17 全球购物
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
化验室技术员岗位职责
2013/12/24 职场文书
社区重阳节活动总结
2015/03/24 职场文书
小学生班干部竞选稿
2015/11/20 职场文书
解决Pytorch中关于model.eval的问题
2021/05/22 Python
Python中的套接字编程是什么?
2021/06/21 Python
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL