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的WEB框架Flask中使用多个配置文件的解决方法
Apr 18 Python
Python3指定路径寻找符合匹配模式文件
May 22 Python
在Django的模型中添加自定义方法的示例
Jul 21 Python
python实现SMTP邮件发送功能
Jun 16 Python
小议Python中自定义函数的可变参数的使用及注意点
Jun 21 Python
Python实现FTP上传文件或文件夹实例(递归)
Jan 16 Python
python爬虫实战之爬取京东商城实例教程
Apr 24 Python
Python3.5 创建文件的简单实例
Apr 26 Python
python 使用pandas计算累积求和的方法
Feb 08 Python
Flask框架模板渲染操作简单示例
Jul 31 Python
基于python实现语音录入识别代码实例
Jan 17 Python
解决pyCharm中 module 调用失败的问题
Feb 12 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面向对象分析设计的经验原则
2008/09/20 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
2014/10/29 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
2015/08/18 PHP
详解PHP PDO简单教程
2019/05/28 PHP
javascript dom 操作详解 js加强
2009/07/13 Javascript
不安全的常用的js写法
2009/09/15 Javascript
javascript打印输出json实例
2013/11/11 Javascript
jQuery实现tab标签自动切换的方法
2015/02/28 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
bootstrapvalidator之API学习教程
2017/06/29 Javascript
微信小程序 动画的简单实例
2017/10/12 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
vue3使用vue-count-to组件的实现
2020/12/25 Vue.js
node使用async_hooks模块进行请求追踪
2021/01/28 Javascript
[01:33]完美世界DOTA2联赛PWL S3 集锦第二期
2020/12/21 DOTA
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
win7 x64系统中安装Scrapy的方法
2018/11/18 Python
用Python逐行分析文件方法
2019/01/28 Python
完美解决pycharm 不显示代码提示问题
2020/06/02 Python
python如何实现word批量转HTML
2020/09/30 Python
python 基于opencv操作摄像头
2020/12/24 Python
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
售后专员岗位职责
2013/12/08 职场文书
剪彩仪式主持词
2014/03/19 职场文书
责任书范本
2014/08/25 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
房产公证书格式
2015/01/26 职场文书
银行先进个人总结
2015/02/15 职场文书
培训督导岗位职责
2015/04/10 职场文书
centos7安装mysql5.7经验记录
2022/05/02 Servers