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 相关文章推荐
Linux上安装Python的PIL和Pillow库处理图片的实例教程
Jun 23 Python
python实现学生信息管理系统
Apr 05 Python
python模块smtplib实现纯文本邮件发送功能
May 22 Python
不知道这5种下划线的含义,你就不算真的会Python!
Oct 09 Python
python模糊图片过滤的方法
Dec 14 Python
python面试题小结附答案实例代码
Apr 11 Python
20行python代码实现人脸识别
May 05 Python
利用Django模版生成树状结构实例代码
May 19 Python
Python实现链表反转的方法分析【迭代法与递归法】
Feb 22 Python
如何在python中处理配置文件代码实例
Sep 27 Python
Python 找出英文单词列表(list)中最长单词链
Dec 14 Python
Python实现仓库管理系统
May 30 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
MYSQL数据库初学者使用指南
2006/11/16 PHP
php Xdebug 调试扩展的安装与使用.
2010/03/13 PHP
PHP中SESSION使用中的一点经验总结
2012/03/30 PHP
php面向对象中static静态属性和静态方法的调用
2015/02/08 PHP
PHP中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
PHP实现重载的常用方法实例详解
2017/10/18 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
初窥JQuery(二)事件机制(2)
2010/12/06 Javascript
深入分析js中的constructor和prototype
2012/04/07 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
2015/08/26 Javascript
Javascript模仿淘宝信用评价实例(附源码)
2015/11/26 Javascript
Vue resource中的GET与POST请求的实例代码
2017/07/21 Javascript
vue 权限认证token的实现方法
2018/07/17 Javascript
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
Vue 电商后台管理项目阶段性总结(推荐)
2020/08/22 Javascript
Python自动发送邮件的方法实例总结
2018/12/08 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
Python使用Paramiko控制liunx第三方库
2020/05/20 Python
CSS3线性渐变简单实现以及该属性在浏览器中的不同
2012/12/12 HTML / CSS
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
办公室文书岗位职责
2013/12/16 职场文书
怎样客观的做好自我评价
2013/12/28 职场文书
教育课题研究自我鉴定范文
2013/12/28 职场文书
农村党支部先进事迹
2014/01/14 职场文书
CAD制图人员的自荐信
2014/02/07 职场文书
商场周年庆活动方案
2014/08/19 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
导游词之沈阳植物园
2019/11/30 职场文书
使用Pytorch训练two-head网络的操作
2021/05/28 Python