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 相关文章推荐
socket + select 完成伪并发操作的实例
Aug 15 Python
Python实现读取json文件到excel表
Nov 18 Python
python opencv实现任意角度的透视变换实例代码
Jan 12 Python
Python爬虫之pandas基本安装与使用方法示例
Aug 08 Python
python tkinter窗口最大化的实现
Jul 15 Python
Python 使用元类type创建类对象常见应用详解
Oct 17 Python
基于python的docx模块处理word和WPS的docx格式文件方式
Feb 13 Python
Python decorator拦截器代码实例解析
Apr 04 Python
解决jupyter notebook 前面书写后面内容消失的问题
Apr 13 Python
关于python类SortedList详解
Sep 04 Python
浅谈Python中对象是如何被调用的
Apr 06 Python
PyCharm 配置SSH和SFTP连接远程服务器
May 11 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 判断常量,变量和函数是否存在
2009/04/26 PHP
php实现批量下载百度云盘文件例子分享
2014/04/10 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
2018/08/16 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
2019/04/17 PHP
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
JavaScript中“基本类型”之争小结
2013/01/03 Javascript
JS中 用户登录系统的解决办法
2013/04/15 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
jQuery插件简单实现方法
2015/07/18 Javascript
基于Bootstrap实现tab标签切换效果
2020/04/15 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
WEB 前端开发中防治重复提交的实现方法
2016/10/26 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
vue项目中使用ueditor的实例讲解
2018/03/05 Javascript
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
layui form表单提交后实现自动刷新
2019/10/25 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
[06:38]DOTA2怒掀电竞风暴 2013Chinajoy
2013/07/27 DOTA
c++生成dll使用python调用dll的方法
2014/01/20 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
2018/05/28 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
2020/03/08 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
中国双语服务优势的在线购票及活动平台:247tickets
2018/10/26 全球购物
2014年村党支部工作总结
2014/12/04 职场文书
销售工作决心书
2015/02/04 职场文书
使用这 6个Vue加载动画库来减少我们网站的跳出率
2021/05/18 Vue.js
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis
nginx 配置指令之location使用详解
2022/05/25 Servers