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 相关文章推荐
Ubuntu下安装PyV8
Mar 13 Python
windows10系统中安装python3.x+scrapy教程
Nov 08 Python
使用Python3制作TCP端口扫描器
Apr 17 Python
关于Python中空格字符串处理的技巧总结
Aug 10 Python
Python3 操作符重载方法示例
Nov 23 Python
通过python顺序修改文件名字的方法
Jul 11 Python
对python中数组的del,remove,pop区别详解
Nov 07 Python
python Tkinter版学生管理系统
Feb 20 Python
浅析Python3中的对象垃圾收集机制
Jun 06 Python
python sorted方法和列表使用解析
Nov 18 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
Apr 02 Python
浅谈Python协程asyncio
Jun 20 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
sony ICF-2010 拆解与改装
2021/03/02 无线电
调整PHP的性能
2013/10/30 PHP
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
开启PHP Static 关键字之旅模式
2015/11/13 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
js DOM 元素ID就是全局变量
2012/09/20 Javascript
php图像生成函数之间的区别分析
2012/12/06 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
jquery 按键盘上的enter事件
2014/05/11 Javascript
javascript实现Email邮件显示与删除功能
2015/11/21 Javascript
IE下JS保存图片的简单实例
2016/07/15 Javascript
微信小程序 Flex布局详解
2016/10/09 Javascript
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
layui表格实现代码
2017/05/20 Javascript
通过命令行生成vue项目框架的方法
2017/07/12 Javascript
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
解决ele ui 表格表头太长问题的实现
2019/11/13 Javascript
js用正则表达式筛选年月日的实例方法
2021/01/04 Javascript
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
Pandas:DataFrame对象的基础操作方法
2018/06/07 Python
Python实现 版本号对比功能的实例代码
2019/04/18 Python
python数值基础知识浅析
2019/11/19 Python
基于python修改srt字幕的时间轴
2020/02/03 Python
python实现打砖块游戏
2020/02/25 Python
python 代码运行时间获取方式详解
2020/09/18 Python
CSS3 选择器 基本选择器介绍
2012/01/21 HTML / CSS
CSS3中引入多种自定义字体font-face
2020/06/12 HTML / CSS
h5移动端调用支付宝、微信支付的实现
2020/06/08 HTML / CSS
详解如何解决使用JSON.stringify时遇到的循环引用问题
2021/03/23 Javascript
青年创业培训欢迎词
2014/01/10 职场文书
社区清明节活动总结
2014/07/04 职场文书
2014年质检工作总结
2014/11/26 职场文书
2016年六一儿童节开幕词
2016/03/04 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
2022/09/23 MySQL