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新手经常遇到的17个错误分析
Jul 30 Python
Python中输出ASCII大文字、艺术字、字符字小技巧
Apr 28 Python
python计算时间差的方法
May 20 Python
使用python遍历指定城市的一周气温
Mar 31 Python
python编程实现希尔排序
Apr 13 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
Nov 23 Python
python socket网络编程之粘包问题详解
Apr 28 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
python爬虫 基于requests模块的get请求实现详解
Aug 20 Python
Python3.7黑帽编程之病毒篇(基础篇)
Feb 04 Python
使用python批量修改XML文件中图像的depth值
Jul 22 Python
python实现文件+参数发送request的实例代码
Jan 05 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
PHP5常用函数列表(分享)
2013/06/07 PHP
Yii2增加验证码步骤详解
2016/04/25 PHP
JavaScript 给汉字排序实例代码
2008/06/28 Javascript
javascript判断用户浏览器插件安装情况的代码
2011/01/01 Javascript
js showModalDialog弹出窗口实例详解
2014/01/07 Javascript
js事件驱动机制 浏览器兼容处理方法
2016/07/23 Javascript
老生常谈js中0到底是 true 还是 false
2017/03/08 Javascript
用JavaScript和jQuery实现瀑布流
2017/03/19 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
vue脚手架及vue-router基本使用
2018/04/09 Javascript
一个基于react的图片裁剪组件示例
2018/04/18 Javascript
js实现下拉框二级联动
2018/12/04 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
2019/07/19 Javascript
JavaScript隐式类型转换代码实例
2020/05/29 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
[01:16:50]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第一场 3月7日
2021/03/11 DOTA
介绍Python的Django框架中的静态资源管理器django-pipeline
2015/04/25 Python
Python3中的2to3转换工具使用示例
2015/06/12 Python
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
对python中词典的values值的修改或新增KEY详解
2019/01/20 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
2019/06/18 Python
django数据库自动重连的方法实例
2019/07/21 Python
Python实现对adb命令封装
2020/03/06 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
Python 发送邮件方法总结
2020/08/10 Python
Python2及Python3如何实现兼容切换
2020/09/01 Python
Lookfantastic葡萄牙官方网站:欧洲第一大化妆品零售商
2018/03/17 全球购物
C#可否对内存进行直接的操作
2015/02/26 面试题
亲子活动总结
2014/04/26 职场文书
2015年国庆节活动总结
2015/03/23 职场文书
php远程请求CURL案例(爬虫、保存登录状态)
2021/04/01 PHP
redis配置文件中常用配置详解
2021/04/14 Redis
go语言中fallthrough的用法说明
2021/05/06 Golang