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简单商城购物车实例代码
Mar 15 Python
使用sklearn之LabelEncoder将Label标准化的方法
Jul 11 Python
Python 打印中文字符的三种方法
Aug 14 Python
Python实现的简单计算器功能详解
Aug 25 Python
python/sympy求解矩阵方程的方法
Nov 08 Python
python爬虫神器Pyppeteer入门及使用
Jul 13 Python
Django基础三之视图函数的使用方法
Jul 18 Python
Python3的高阶函数map,reduce,filter的示例详解
Jul 23 Python
Python 使用元类type创建类对象常见应用详解
Oct 17 Python
python plt可视化——打印特殊符号和制作图例代码
Apr 17 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
Nov 06 Python
Python学习之时间包使用教程详解
Mar 21 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常用图片处理类
2016/03/16 PHP
PHP实现对xml的增删改查操作案例分析
2017/05/19 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
给Javascript数组插入一条记录的代码
2007/08/30 Javascript
js对象的比较
2011/02/26 Javascript
JS实现5秒钟自动封锁div层的方法
2015/02/20 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
nodejs微信公众号支付开发
2016/09/19 NodeJs
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
js如何编写简单的ajax方法库
2017/08/02 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
JS库之wow.js使用方法
2017/09/14 Javascript
vue使用axios实现文件上传进度的实时更新详解
2017/12/20 Javascript
vue-router中scrollBehavior的巧妙用法
2018/07/09 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
js实现继承的方法及优缺点总结
2019/05/08 Javascript
jquery实现动态创建form并提交的方法示例
2019/05/27 jQuery
微信小程序页面间跳转传参方式总结
2019/06/13 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
如何使用Javascript中的this关键字
2020/05/28 Javascript
vue 子组件修改data或调用操作
2020/08/07 Javascript
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
对Python中range()函数和list的比较
2018/04/19 Python
Python/Django后端使用PIL Image生成头像缩略图
2019/04/30 Python
python之生成多层json结构的实现
2020/02/27 Python
HTML5+CSS3实现拖放(Drag and Drop)示例
2014/07/07 HTML / CSS
Android面试题附答案
2014/12/08 面试题
应届生妇产科护士求职信
2013/10/27 职场文书
初中政治教学反思
2014/01/17 职场文书
人力资源专员岗位职责
2014/01/30 职场文书
成语的广告词
2014/03/19 职场文书
老干部工作先进集体事迹材料
2014/05/21 职场文书
《中国梦我的梦》中学生演讲稿
2014/08/20 职场文书
法定代表人身份证明书(含说明)
2014/10/02 职场文书
爱国教育主题班会
2015/08/14 职场文书