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实现DNS正向查询、反向查询的例子
Apr 25 Python
Python中使用copy模块实现列表(list)拷贝
Apr 14 Python
Python在for循环中更改list值的方法【推荐】
Aug 17 Python
Tesserocr库的正确安装方式
Oct 19 Python
详解Python的数据库操作(pymysql)
Apr 04 Python
如何使用Python发送HTML格式的邮件
Feb 11 Python
Python读取VOC中的xml目标框实例
Mar 10 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
Apr 22 Python
DataFrame 数据合并实现(merge,join,concat)
Jun 14 Python
如何在python中实现线性回归
Aug 10 Python
解决python3中os.popen()出错的问题
Nov 19 Python
如何Python使用re模块实现okenizer
Apr 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
第三章 php操作符与控制结构代码
2011/12/30 PHP
php cookie使用方法学习笔记分享
2013/11/07 PHP
跟我学Laravel之配置Laravel
2014/10/15 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
详解WordPress中给链接添加查询字符串的方法
2015/12/18 PHP
PHP abstract 抽象类定义与用法示例
2018/05/29 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
THREE.JS入门教程(5)你应当知道的十件事
2013/01/24 Javascript
今天是星期几的4种JS代码写法
2013/09/17 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
2013/12/05 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
AngularJS实现根据不同条件显示不同控件
2017/04/20 Javascript
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
详解Vue2.0组件的继承与扩展
2018/11/23 Javascript
JS对象和字符串之间互换操作实例分析
2019/02/02 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
[19:15]DK战队纪录片
2014/09/02 DOTA
python实现DNS正向查询、反向查询的例子
2014/04/25 Python
Python实现删除列表中满足一定条件的元素示例
2017/06/12 Python
Python2随机数列生成器简单实例
2017/09/04 Python
python利用标准库如何获取本地IP示例详解
2017/11/01 Python
如何理解transaction事务的概念
2015/05/27 面试题
岗位职责的含义
2013/11/17 职场文书
办公室文书岗位职责
2013/12/16 职场文书
旅游网创业计划书
2014/01/31 职场文书
担保书格式及范文
2014/04/01 职场文书
公司户外活动总结
2014/07/04 职场文书
2015年大学班主任工作总结
2015/04/30 职场文书
2015年女职工工作总结
2015/05/15 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书