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 切片和range()用法说明
Mar 24 Python
Python中title()方法的使用简介
May 20 Python
python 对象和json互相转换方法
Mar 22 Python
Python中文编码知识点
Feb 18 Python
python3.6实现学生信息管理系统
Feb 21 Python
Python实现的微信支付方式总结【三种方式】
Apr 13 Python
pycharm创建scrapy项目教程及遇到的坑解析
Aug 15 Python
python3的url编码和解码,自定义gbk、utf-8的例子
Aug 22 Python
django 文件上传功能的相关实例代码(简单易懂)
Jan 22 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
Apr 24 Python
如何把python项目部署到linux服务器
Aug 26 Python
Python Spyder 调出缩进对齐线的操作
Feb 26 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
锁定年轻人的双倍活力 星巴克推出星倍醇即饮浓咖啡
2021/03/03 咖啡文化
第五节 克隆 [5]
2006/10/09 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
2016/09/22 PHP
yii2利用自带UploadedFile实现上传图片的示例
2017/02/16 PHP
javascript 字符串连接的性能问题(多浏览器)
2008/11/18 Javascript
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
原生js实现跨浏览器获取鼠标按键的值
2013/04/08 Javascript
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
Javascript实现跑马灯效果的简单实例
2016/05/31 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
Bootstrap源码解读导航(6)
2016/12/23 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
ionic 自定义弹框效果
2017/06/27 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
2018/01/22 jQuery
js中split()方法得到的数组长度问题
2018/07/19 Javascript
微信小程序云开发之使用云数据库
2019/05/17 Javascript
微信小程序前端自定义分享的实现方法
2019/06/13 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
2019/07/10 Javascript
vue实现axios图片上传功能
2019/08/20 Javascript
python的正则表达式re模块的常用方法
2013/03/09 Python
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
Python实现PS滤镜的旋转模糊功能示例
2018/01/20 Python
pytorch中图像的数据格式实例
2020/02/11 Python
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
如何减少垃圾回收让内存更加有效使用
2013/10/18 面试题
幼儿园六一儿童节主持节目串词
2014/03/21 职场文书
十佳护士先进事迹
2014/05/08 职场文书
英文演讲稿
2014/05/15 职场文书
旅游文化节策划方案
2014/06/06 职场文书
销售员试用期自我评价
2014/09/15 职场文书
刑事法律意见书
2015/06/04 职场文书
吃通javascript正则表达式
2021/04/21 Javascript
golang 实现并发求和
2021/05/08 Golang
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android