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获取GY-85九轴模块信息示例
Dec 05 Python
简单谈谈Python中的json与pickle
Jul 19 Python
Django中间件工作流程及写法实例代码
Feb 06 Python
Windows下python3.6.4安装教程
Jul 31 Python
pygame游戏之旅 载入小车图片、更新窗口
Nov 20 Python
python+selenium 定位到元素,无法点击的解决方法
Jan 30 Python
Django框架HttpRequest对象用法实例分析
Nov 01 Python
opencv 图像腐蚀和图像膨胀的实现
Jul 07 Python
Python自动化测试中yaml文件读取操作
Aug 20 Python
Python pysnmp使用方法及代码实例
Aug 24 Python
Python基础之教你怎么在M1系统上使用pandas
May 08 Python
Python 中数组和数字相乘时的注意事项说明
May 10 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
使用sockets:从新闻组中获取文章(三)
2006/10/09 PHP
真正的ZIP文件操作类(php)
2007/07/21 PHP
解析PHP工厂模式的好处
2013/06/18 PHP
php去掉文件前几行的方法
2015/07/29 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
Mootools 1.2教程(21)——类(二)
2009/09/15 Javascript
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
jquery radio 操作代码
2011/03/16 Javascript
Extjs中TabPane如何嵌套在其他网页中实现思路及代码
2013/01/27 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
Javascript获取当前时间函数和时间操作小结
2014/10/01 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
Vue2.0表单校验组件vee-validate的使用详解
2017/05/02 Javascript
详解Angular2组件之间如何通信
2017/06/22 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
Angularjs按需查询实例代码
2017/10/30 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
2018/01/30 Javascript
详解js类型判断
2018/05/22 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
JavaScript 点击触发复制功能实例详解
2018/11/02 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
Vue.extend 编程式插入组件的实现
2019/11/18 Javascript
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
Python3.5 处理文本txt,删除不需要的行方法
2018/12/10 Python
如何利用Python动态模拟太阳系运转
2020/09/04 Python
CSS3+HTML5+JS 实现一个块的收缩与展开动画效果
2020/11/17 HTML / CSS
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
英国知名化妆品网站:Revolution Beauty(原TAM Beauty)
2018/02/28 全球购物
难忘的一课教学反思
2014/04/30 职场文书
2015年信访维稳工作总结
2015/04/07 职场文书