当前位置: 首页 > news >正文

python基础23(2025.6.29)分布式爬虫(增量式爬虫去重)redis应用_(未完成!)

本次写一个爬取网易新闻的案例。因为redis能处理高并发,存储数据也可以,故不用mysql。而且新闻网站容易更新很多,而mysql只能持久化存储。

import scrapy
import re
import json
import redis  # 用它来去除重复, 记录访问过的urlclass WangyiSpider(scrapy.Spider):name = "wangyi"allowed_domains = ["163.com"]start_urls = ["https://news.163.com/special/cm_guoji/?callback=data_callback"]code_re_obj = re.compile(r"data_callback\((?P<code>.*)\)", re.S) # 1conn = redis.Redis(host="127.0.0.1", port=6379, password="123456", db=4, decode_responses=True)def parse(self, resp, **kwargs):# 执行后续操作之前. 一定要先确认好. 你收到的东西对不对.# print(resp.text)# scrapy获取json格式的数据. 可以直接resp.json(), 直接拿到字典# json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)# 典型的. 你拿到的数据不是json# print(resp.json())code = WangyiSpider.code_re_obj.search(resp.text).group("code")news = json.loads(code)for new in news:# print(new.get("tlink"))# print(new['tlink'])# print(new['title'])# 我要采集新闻的内容# 发请求. 获取到详情页中的内容# 需要判断该url是否已经被访问过了.# 必须得知道我访问过什么 需要把已经访问过的东西记录下来.tlink = new['tlink']if self.conn.sismember("news:wangyi", tlink):print("已经访问过了. ")else:yield scrapy.Request(url=new['tlink'], callback=self.parse_detail)# 用url进行控制是否访问过了   # 77777 9999# 如果是post请求呢?# http://www.baidu.com/a/b  formdata: id=10086  => 樵夫11爱你# http://www.baidu.com/a/b  formdata: id=10087  => 樵夫12爱你# http://www.baidu.com/a/b  formdata: id=10088  => 樵夫2123爱你# http://www.baidu.com/a/b  formdata: id=10089  => 樵夫12321爱你# 增量爬虫. 但是这个增量爬虫和樵夫讲的不一样了. 樵夫去重复用的是url. 每个详情页的url都是不一样的# 增量爬虫的核心逻辑是  去除重复.# data_callback([{title: "韩男子性侵)", ....}])# 这是典型的jsonp的逻辑#  xxxxxx(数据)# 可以用正则表达式来完成数据的提取def parse_detail(self, resp):print(resp.url)post_body = resp.xpath("//div[@class='post_body']/p/text()").extract()post_title = resp.xpath("//h1[@class='post_title']/text()").extract_first()post_body = "".join(post_body).strip()print(post_title, post_body)# 16个库.# news:#   wangyi#   tengxun#   xxxxself.conn.sadd("news:wangyi", resp.url) #2

运行的讲解一:开启redis
在这里插入图片描述

在这里插入图片描述
这里的意思是,我们为了“验证访问的url”每次访问都是不一样的,如果访问了,我们就不再访问

但是如果是post请求,我们就可以如上图那样记录“不一样的参数”

在这里插入图片描述

http://www.lqws.cn/news/563779.html

相关文章:

  • DOP数据开放平台(真实线上项目)
  • c++ 学习(二、结构体)
  • 非阻塞 IO
  • 卸载Modelsim/Qustasim方法
  • matplotlib 绘制水平柱状图
  • 买卖股票的最佳时机 II
  • 开源3D 动态银河系特效:Vue 与 THREE.JS 的奇幻之旅
  • 【面板数据】上市公司企业代理成本数据(四项代理成本) 2000-2024年
  • 设备树引入
  • kubectl exec 原理
  • Python 数据分析:numpy,抽提,整数数组索引。听故事学知识点怎么这么容易?
  • AD22以上的基础操作
  • 基于WOA鲸鱼优化算法的圆柱体容器最大体积优化设计matlab仿真
  • 星际争霸数据集指南
  • 数据结构与算法总概
  • Rust代码规范之蛇形命名法和驼峰命名法
  • AUTOSAR图解==>AUTOSAR_AP_EXP_SOVD
  • 关于ubuntu 20.04系统安装分区和重复登录无法加载桌面的问题解决
  • 力扣 刷题(第七十一天)
  • 可观测性的哲学
  • 学习使用dotnet-dump工具分析.net内存转储文件(2)
  • 求区间最大值
  • 软件项目管理期末考试大题
  • 逆向入门(22)程序逆向篇-TraceMe
  • 【纯干货】调整word目录中的行距以及右对齐页码
  • 高端电影色调人像风光大片摄影后期调色Lightroom预设,手机滤镜下载!
  • Linux软连接和硬连接
  • 从 “慢如蜗牛” 到 “风驰电掣”:中欧跨境网络专线加速方案
  • spring-ai-alibaba DashScopeCloudStore自动装配问题
  • 论文阅读 Align before Fuse (ALBEF)