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进阶教程之函数对象(函数也是对象)
Aug 30 Python
Python解析nginx日志文件
May 11 Python
python删除指定类型(或非指定)的文件实例详解
Jul 06 Python
python实现文本去重且不打乱原本顺序
Jan 26 Python
详解Python函数可变参数定义及其参数传递方式
Aug 02 Python
django中的setting最佳配置小结
Nov 21 Python
Python中实现最小二乘法思路及实现代码
Jan 04 Python
Python中optparser库用法实例详解
Jan 26 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
Aug 20 Python
pytorch-RNN进行回归曲线预测方式
Jan 14 Python
Django Model中字段(field)的各种选项说明
May 19 Python
简述python四种分词工具,盘点哪个更好用?
Apr 13 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 随机生成10位字符代码
2009/03/26 PHP
php防攻击代码升级版
2010/12/29 PHP
php+ajax登录跳转登录实现思路
2016/07/31 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
Knockoutjs的环境搭建教程
2012/11/26 Javascript
JS实现根据出生年月计算年龄
2014/01/10 Javascript
js实现select跳转功能代码
2014/10/22 Javascript
jQuery中on()方法用法实例详解
2015/02/06 Javascript
jquery实现图片左右切换的方法
2015/05/07 Javascript
JS实现从网页顶部掉下弹出层效果的方法
2015/08/06 Javascript
jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
2016/05/25 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
浅谈js继承的实现及公有、私有、静态方法的书写
2016/10/28 Javascript
ES6入门教程之Iterator与for...of循环详解
2017/05/17 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
详解ES6 Fetch API HTTP请求实用指南
2018/11/14 Javascript
Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法
2020/09/04 Javascript
[01:15:44]首部DOTA2纪录片今日23时全网上映
2014/03/19 DOTA
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
利用Python为iOS10生成图标和截屏
2016/09/24 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
Python3.6使用tesseract-ocr的正确方法
2018/10/17 Python
Python实现分段线性插值
2018/12/17 Python
Python开发之pip安装及使用方法详解
2020/02/21 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
韩国CJ食品专卖网:CJonmart
2016/09/11 全球购物
企业厂长岗位职责
2013/12/17 职场文书
法院反腐倡廉心得体会
2014/09/09 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
css背景和边框标签实例详解
2021/05/21 HTML / CSS
vue-cli4.5.x快速搭建项目
2021/05/30 Vue.js
MySQL系列之十一 日志记录
2021/07/02 MySQL
宝塔更新Python及Flask项目的部署
2022/04/11 Python