python正则爬取某段子网站前20页段子(request库)过程解析


Posted in Python onAugust 10, 2019

首先还是谷歌浏览器抓包对该网站数据进行分析,结果如下:

该网站地址:http://www.budejie.com/text

该网站数据都是通过html页面进行展示,网站url默认为第一页,http://www.budejie.com/text/2为第二页,以此类推

对网站的内容段子所处位置进行分析,发现段子内容都是在一个 a 标签中

python正则爬取某段子网站前20页段子(request库)过程解析

坑还是有的,这是我第一次写的正则:

content_list = re.findall(r'<a href="/detail-.*" rel="external nofollow" rel="external nofollow" rel="external nofollow" >(.+?)</a>', html_str)

之后发现竟然匹配到了一些推荐的内容,最后我把正则改变下面这样,发现没有问题了,关于正则的知识这里就不做过多解释了

content_list = re.findall(r'<div class="j-r-list-c-desc">\s*<a href="/detail-.*" rel="external nofollow" rel="external nofollow" rel="external nofollow" >(.+?)</a>', html_str)

现在要的是爬取前20页的段子并保存到本地,已经知道翻页的规律和匹配内容的正则,就直接可以写代码了

代码如下,整体思路还是和前两排爬虫博客一样,面向对象的写法:

import requests
import re
import json

class NeihanSpider(object):
  """内涵段子,百思不得其姐,正则爬取一页的数据"""
  def __init__(self):
    self.temp_url = 'http://www.budejie.com/text/{}' # 网站地址,给页码留个可替换的{}
    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 pass_url(self, url): # 发送请求,获取响应
    print(url)
    response = requests.get(url, headers=self.headers)
    return response.content.decode()

  def get_first_page_content_list(self, html_str): # 提取第一页的数据
    content_list = re.findall(r'<div class="j-r-list-c-desc">\s*<a href="/detail-.*" rel="external nofollow" rel="external nofollow" rel="external nofollow" >(.+?)</a>', html_str) # 非贪婪匹配
    return content_list

  def save_content_list(self, content_list):
    with open('neihan.txt', 'a', encoding='utf-8') as f:
      for content in content_list:
        f.write(json.dumps(content, ensure_ascii=False))
        f.write('\n') # 换行
      print('成功保存一页!')

  def run(self): # 实现主要逻辑
    for i in range(20): # 只爬取前20页数据
      # 1. 构造url
      # 2. 发送请求,获取响应
      html_str = self.pass_url(self.temp_url.format(i+1))
      # 3. 提取数据
      content_list = self.get_first_page_content_list(html_str)
      # 4. 保存
      self.save_content_list(content_list)

if __name__ == '__main__':
  neihan = NeihanSpider()
  neihan.run()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python类参数self使用示例
Feb 17 Python
python实现上传样本到virustotal并查询扫描信息的方法
Oct 05 Python
Python自动化构建工具scons使用入门笔记
Mar 10 Python
Python学习之Django的管理界面代码示例
Feb 10 Python
Python中实例化class的执行顺序示例详解
Oct 14 Python
anaconda中更改python版本的方法步骤
Jul 14 Python
Python closure闭包解释及其注意点详解
Aug 28 Python
python-sys.stdout作为默认函数参数的实现
Feb 21 Python
新手入门学习python Numpy基础操作
Mar 02 Python
解决Python发送Http请求时,中文乱码的问题
Apr 30 Python
Python中的全局变量如何理解
Jun 04 Python
Python命令行参数argv和argparse该如何使用
Feb 08 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
Python字典推导式将cookie字符串转化为字典解析
Aug 10 #Python
You might like
php源码之将图片转化为data/base64数据流实例详解
2016/11/27 PHP
javascript 命名规则 变量命名规则
2010/02/25 Javascript
jQuery之ajax技术的详细介绍
2013/06/19 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
jquery实现倒计时效果
2015/12/14 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
2016/05/19 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
老生常谈js-react组件生命周期
2017/05/02 Javascript
JavaScript反弹动画效果的实现代码
2017/07/13 Javascript
ajax请求+vue.js渲染+页面加载的示例
2018/02/11 Javascript
JavaScript实现读取与输出XML文件数据的方法示例
2018/06/05 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
解决vue单页面应用中动态修改title问题
2019/06/09 Javascript
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
Python字典操作简明总结
2015/04/13 Python
Python机器学习算法之k均值聚类(k-means)
2018/02/23 Python
Flask框架各种常见装饰器示例
2018/07/17 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
python爬取盘搜的有效链接实现代码
2019/07/20 Python
python类的实例化问题解决
2019/08/31 Python
python3连接MySQL8.0的两种方式
2020/02/17 Python
浅谈python输出列表元素的所有排列形式
2020/02/26 Python
简单的命令查看安装的python版本号
2020/08/28 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
2020/12/28 Python
澳大利亚在线百货商店:Real Smart
2017/08/13 全球购物
英国123鲜花网站:123 Flowers
2019/07/07 全球购物
美国围栏公司:Walpole Outdoors
2019/11/19 全球购物
保险专业大专生求职信
2013/10/26 职场文书
创业计划书的内容步骤和要领
2014/01/04 职场文书
人力资源管理专业自荐信
2014/06/24 职场文书
县人大领导班子四风对照检查材料思想汇报
2014/10/09 职场文书
幼儿园教师师德表现自我评价
2015/03/05 职场文书
《多彩的民间艺术》教学反思
2016/02/16 职场文书
Win11怎么启动任务管理器?Win11启动任务管理器的几种方法
2021/11/23 数码科技
SQL Server实现分页方法介绍
2022/03/16 SQL Server