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中使用gzip模块压缩文件的简单教程
Apr 08 Python
python实现linux下使用xcopy的方法
Jun 28 Python
浅谈Python的Django框架中的缓存控制
Jul 24 Python
答题辅助python代码实现
Jan 16 Python
对python中的for循环和range内置函数详解
Apr 17 Python
PyQt4实现下拉菜单可供选择并打印出来
Apr 20 Python
python调用百度地图WEB服务API获取地点对应坐标值
Jan 16 Python
Python中字符串List按照长度排序
Jul 01 Python
python序列类型种类详解
Feb 26 Python
Python文件操作基础流程解析
Mar 19 Python
Python闭包与装饰器原理及实例解析
Apr 30 Python
Python Mock模块原理及使用方法详解
Jul 07 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实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
redis查看连接数及php模拟并发创建redis连接的方法
2016/12/15 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
csdn 批量接受好友邀请
2009/02/19 Javascript
jQuery 创建Dom元素
2010/05/07 Javascript
修复ie8&chrome下window的resize事件多次执行
2011/10/20 Javascript
javascript数组去重方法终极总结
2014/06/05 Javascript
jQuery Html控件基本操作(日常收集整理)
2016/03/11 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
Angular 表单控件示例代码
2017/06/26 Javascript
Vue实例中生命周期created和mounted的区别详解
2017/08/25 Javascript
Node.js 中使用 async 函数的方法
2017/11/20 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
基于vue-element组件实现音乐播放器功能
2018/05/06 Javascript
webstorm和.vue中es6语法报错的解决方法
2018/05/08 Javascript
如何用原生js写一个弹窗消息提醒插件
2019/05/24 Javascript
Python中用函数作为返回值和实现闭包的教程
2015/04/27 Python
Anaconda多环境多版本python配置操作方法
2017/09/12 Python
详解supervisor使用教程
2017/11/21 Python
python机器学习理论与实战(一)K近邻法
2021/01/28 Python
python开头的coding设置方法
2019/08/08 Python
Pytorch释放显存占用方式
2020/01/13 Python
python 爬虫如何实现百度翻译
2020/11/16 Python
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
法国购买隐形眼镜和眼镜网站:Optical Center
2019/10/08 全球购物
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
WINDOWS域的具体实现方式是什么
2014/02/20 面试题
逻辑链路控制协议
2016/10/01 面试题
财务情况说明书范文
2014/05/06 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
六查六看自查报告
2014/10/14 职场文书
教师工作态度自我评价
2015/03/05 职场文书
医院病假条范文
2015/08/17 职场文书
Python实现的扫码工具居然这么好用!
2021/06/07 Python
悬疑名作《朋友游戏》动画无字ED宣传片 新角色公开
2022/04/13 日漫