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 相关文章推荐
kNN算法python实现和简单数字识别的方法
Nov 18 Python
django实现分页的方法
May 26 Python
Python通过Django实现用户注册和邮箱验证功能代码
Dec 11 Python
Python生成器定义与简单用法实例分析
Apr 30 Python
详解Python3.6的py文件打包生成exe
Jul 13 Python
Python 多线程不加锁分块读取文件的方法
Dec 11 Python
python3对拉勾数据进行可视化分析的方法详解
Apr 03 Python
pytorch 归一化与反归一化实例
Dec 31 Python
python实现低通滤波器代码
Feb 26 Python
Python发送邮件封装实现过程详解
May 09 Python
Django实现文章详情页面跳转代码实例
Sep 16 Python
5款实用的python 工具推荐
Oct 13 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
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
2007/03/15 PHP
PHP统计二维数组元素个数的方法
2013/11/12 PHP
由JavaScript技术实现的web小游戏(不含网游)
2010/06/12 Javascript
Extjs EditorGridPanel中ComboBox列的显示问题
2011/07/04 Javascript
IE8下String的Trim()方法失效的解决方法
2013/11/08 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
JavaScript代码实现左右上下自动晃动自动移动
2016/04/08 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
React diff算法的实现示例
2018/04/20 Javascript
vue-cli项目修改文件热重载失效的解决方法
2018/09/19 Javascript
JS如何把字符串转换成json
2020/02/21 Javascript
微信小程序手动添加收货地址省市区联动
2020/05/18 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
JavaScript 监听组合按键思路及代码实现
2020/07/28 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
python将xml xsl文件生成html文件存储示例讲解
2013/12/03 Python
使用Python脚本操作MongoDB的教程
2015/04/16 Python
python中set常用操作汇总
2016/06/30 Python
Python自动发邮件脚本
2017/03/31 Python
python 类对象和实例对象动态添加方法(分享)
2017/12/31 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
2018/12/11 Python
python取余运算符知识点详解
2019/06/27 Python
Python3基本输入与输出操作实例分析
2020/02/14 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
详解Html5页面实现下载文件(apk、txt等)的三种方式
2018/10/22 HTML / CSS
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
2012/09/08 面试题
党校培训思想汇报
2013/12/30 职场文书
旅游节目策划方案
2014/05/26 职场文书
公司周年庆寄语
2019/06/21 职场文书
《最终幻想14》6.01版本4月5日推出 追加新任务新道具
2022/04/03 其他游戏