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刷投票的脚本实现代码
Nov 08 Python
构建Python包的五个简单准则简介
Jun 15 Python
Python实现手写一个类似django的web框架示例
Jul 20 Python
python selenium 弹出框处理的实现
Feb 26 Python
详解Python读取yaml文件多层菜单
Mar 23 Python
利用python如何在前程无忧高效投递简历
May 07 Python
python 解压、复制、删除 文件的实例代码
Feb 26 Python
什么是python的自省
Jun 21 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
Jul 02 Python
超级实用的8个Python列表技巧
Aug 24 Python
python MD5加密的示例
Oct 19 Python
解决使用Pandas 读取超过65536行的Excel文件问题
Nov 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
ASP知识讲座四
2006/10/09 PHP
用来给图片加水印的PHP类
2008/04/09 PHP
php数组删除元素示例
2014/03/21 PHP
php使用NumberFormatter格式化货币的方法
2015/03/21 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
2018/05/12 PHP
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
在IE浏览器中resize事件执行多次的解决方法
2011/07/12 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
JS两种定义方式的区别、内部原理
2013/11/21 Javascript
JavaScript使用DeviceOne开发实战(四)仿优酷视频应用
2015/12/02 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
nodeJs爬虫获取数据简单实现代码
2016/03/29 NodeJs
纯JS代码实现气泡效果
2016/05/04 Javascript
Web程序员必备的7个JavaScript函数
2016/06/14 Javascript
相册展示PhotoSwipe.js插件实现
2016/08/25 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
关于angular js_$watch监控属性和对象详解
2017/04/24 Javascript
VUE中使用MUI方法
2019/02/12 Javascript
Windows下安装 node 的版本控制工具 nvm
2020/02/06 Javascript
基于vue+element实现全局loading过程详解
2020/07/10 Javascript
vue select 获取value和lable操作
2020/08/28 Javascript
python获取指定时间差的时间实例详解
2017/04/11 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
对python多线程与global变量详解
2018/11/09 Python
python交易记录整合交易类详解
2019/07/03 Python
GLAMGLOW格莱魅美国官网:美国知名的面膜品牌
2016/12/31 全球购物
Paper Cape官网:美国婴儿和儿童服装品牌
2019/11/02 全球购物
最新大学生自我评价
2013/09/24 职场文书
国际商务专业职业生涯规划书范文
2014/01/17 职场文书
《那片绿绿的爬山虎》教学反思
2014/02/27 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书
设备技术员岗位职责
2015/04/11 职场文书
运动会开幕式致辞
2015/07/29 职场文书
三八节祝酒词
2015/08/11 职场文书
Python绘制分类图的方法
2021/04/20 Python
拙作再改《我的收音机情缘》
2022/04/05 无线电