如何用 Scrapy 爬取网站数据并在 Easysearch 中进行存储检索分析

news/2024/11/15 17:24:05/文章来源:https://www.cnblogs.com/infinilabs/p/18409364

做过数据分析和爬虫程序的小伙伴想必对 Scrapy 这个爬虫框架已经很熟悉了。今天给大家介绍下,如何基于 Scrapy 快速编写一个爬虫程序并利用 Easysearch 储存、检索、分析爬取的数据。我们以极限科技的官网 Blog 为数据源,做下实操演示。

安装 scrapy

使用 Scrapy 可以快速构建一个爬虫项目,从目标网站中获取所需的数据,并进行后续的处理和分析。

pip install scrapy# 新建项目 infini_spiders
scrapy startproject infini_spiders# 初始化爬虫
cd infini_spiders/spiders
scrapy genspider blog infinilabs.cn

爬虫编写

编写一个爬虫文件 blog.py ,它会首先访问 start_urls 指定的地址,将结果发给 parse 函数解析。通过这一步解析,我们得到了每一篇博客的地址。然后我们对每个博客的地址发送请求,将结果发给 parse_blog 函数进行解析,在这里才会真正提取每篇博客的 title、tag、url、date、content 内容。

from typing import Any, Iterable
import scrapy
from bs4 import BeautifulSoup
from scrapy.http import Responseclass BlogSpider(scrapy.Spider):name = "blog"allowed_domains = ["infinilabs.cn"]start_urls = ["https://infinilabs.cn/blog/"]def parse(self, response):links = response.css("div.blogs a")yield from response.follow_all(links, self.parse_blog)def parse_blog(self, response):title = response.xpath('//div[@class="title"]/text()').extract_first()tags = response.xpath('//div[@class="tags"]/div[@class="tag"]/text()').extract()url = response.urlauthor = response.xpath('//div[@class="logo"]/div[@class="name"]//text()').extract_first()date = response.xpath('//div[@class="date"]/text()').extract_first()all_text = response.xpath('//p//text() | //h3/text() | //h2/text() | //h4/text() | //ol/li//text()').extract()content = '\n'.join(all_text)yield {'title': title,'tags': tags,'url': url,'author': author,'date': date,'content': content}

提取完我们想要的内容后,接下来就要考虑存储了。考虑到要对内容进行检索、分析,接下来我们将内容直接存放到 Easysearch 当中。

安装插件

通过安装 ScrapyElasticsearch pipeline 可将 scrapy 爬取的内容存入到 Easysearch 中。

pip install ScrapyElasticSearch

修改 scrapy 自带的配置文件 settings.py ,添加以下内容。

ITEM_PIPELINES = {'scrapyelasticsearch.scrapyelasticsearch.ElasticSearchPipeline': 10
}ELASTICSEARCH_SERVERS = ['http://192.168.56.3:9210']
ELASTICSEARCH_INDEX = 'scrapy'
ELASTICSEARCH_INDEX_DATE_FORMAT = '%Y-%m-%d'
ELASTICSEARCH_TYPE = '_doc'
ELASTICSEARCH_USERNAME = 'admin'
ELASTICSEARCH_PASSWORD = '9423d1d5345ed6d0db19'

ScrapyElasticSearch 会以 bulk 方式写入 Easysearch,每次批量的大小由 scrapyelasticsearch.scrapyelasticsearch.ElasticSearchPipeline 参数控制,大家可自行修改。

在上述配置中,我们会将爬到的数据存放到 scrapy-yyyy-mm-dd 索引中。

启动爬虫

在 infini_spiders/spiders 目录下,使用命令启动爬虫。

scrapy crawl blog

blog 就是爬虫的名字,对应到 blog.py 里面的 name 变量。运行完成后,就可以去 Easysearch 里查看数据了,当然我们还是使用 Console 进行查看。

查看数据

先查看下索引情况,scrapy 索引已经生成,里面有 129 篇博客。

查看详细内容,确保博客正文已经保存。

到了这一步,我们就能使用 Console 对博客进行搜索、分析了。

这次的分享就到这里了。欢迎与我一起交流 ES 的各种问题和解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/795774.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

个人项目—论文查重

个人项目———论文查重这个作业属于哪个课程 计科12班这个作业的要求在哪里 作业要求这个作业的目标 实现论文查重,给定原文件和抄袭的文件,输出二者的相似度到答案文件中GitHub链接:github 1.题目要求 题目:论文查重 描述如下: 设计一个论文查重算法,给出一个原文文件和…

一款用于Redis漏洞的利用工具

Hack分享吧声明 该公众号分享的安全工具和项目均来源于网络,仅供安全研究与学习之用,如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。工具介绍 @yuyan-sec使用golang写的一款Redis漏洞利用工具。 注意:主从复制会清空数据,主从复制会清空数据…

AGC007F Shik and Copying String

涉及知识点:Ad-hoc,贪心 题意 Link 给出两个长度相同的字符串 \(S,T\),定义一次操作为: 从头至尾处理每一位,每位可以变成上一位,或者不变。 求最少对 \(S\) 进行多少次操作使得 \(S=T\)。 思路 引理 可以发现,一次操作其实类似于选择一些点 \(l\),从左到右覆盖它后面的…

全网最适合入门的面向对象编程教程:47 Python函数方法与接口-回调函数Callback

回调函数是编程中一种非常常见的模式,用于将函数作为参数传递给其他函数或方法。这种模式在 Python 中广泛应用于事件处理、异步编程、函数式编程等场景。全网最适合入门的面向对象编程教程:47 Python 函数方法与接口-回调函数 Callback摘要: 回调函数是编程中一种非常常见的…

如何把一个吃灰的 Kindle 设置成一个墨水屏幕的时钟 All In One

如何把一个吃灰的 Kindle 设置成一个墨水屏幕的时钟 All In One Kindle 电子书如何把一个吃灰的 Kindle 设置成一个墨水屏幕的时钟 All In OneKindle 电子书https://www.bilibili.com/video/BV1nY4y1e7gC/?t=375 demosKindle Paperwhite 7 电子书阅读器(4GB)Kindle Paperwhi…

基于小波神经网络的数据分类算法matlab仿真

1.程序功能描述 基于小波神经网络的数据分类算法。输入为5个特征值,输出为判断(是,否)。拿50组数据对本算法作为训练组,后30组数据作为验证组。这里,我们首先调用数据,然后对50组数据进行训练,然后对30组数据进行识别测试。 2.测试软件版本以及运行结果展示MATL…

基于GWO灰狼优化的CNN-LSTM的时间序列回归预测matlab仿真

1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)LR = Alpx(1); numHiddenUnits1 = floor(Alpx(2))+1;% 定义隐藏层中LSTM单元的数量 numHiddenUnits2 = floor(Alpx(3)…

代码整洁之道--读书笔记(8)

代码整洁之道简介: 本书是编程大师“Bob 大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更…

java学习9.11

IDEA里导入mybatis,lombok等依赖成功连接好数据库。 并将MYSQL数据库同时用navicat连接便利创建表等操作。设计实体类student并在数据库设计好表接下来就是如何实现在数据库里的增删改查 设计接口类mapper,将操作简化最后能正常运行实现功能。 总的来说这一块内容,刚开始学,…

LOJ4222 「IOI2024」马赛克上色 题解

题目描述 给定长为 \(n\) 、下标从零开始的 \(01\) 序列 \(x,y\) ,保证 \(x_0=y_0\) 。 令 \(col_{0,j}=x_j,col_{i,0}=y_i\) ,对 \(\forall 1\le i\lt n,1\le j\lt n\) , \(col_{i,j}=[col_{i-1,j}=0\and col_{i,j-1}=0]\) 。 \(q\) 次询问,给定 \(u,d,l,r\) ,求 \(\sum_…

2024 必收藏✨免费手机铃声下载网站大公开

最推荐的方式,当然是在线网站了。1.北岛铃声网 https://www.beidaols.cn/优点:免费下载:用户可以免费获取各种手机铃声,无需支付费用。 铃声多样:提供了丰富的铃声选择,满足不同用户的个性化需求。 教程详细:提供了详细的设置苹果铃声的教程,对于不熟悉苹果手机设置的…

原神蒙德-Typora模板

基于Newsprint主题开发的一种Typora模板新建模板 打开Typora - 文件 - 偏好设置 - 外观 - 打开主题文件夹 找到其中的 Newsprint (应该有一个文件夹+一个css,都要) ,拷贝副本,重命名(我命名的是“custom”),一定要这一步,不然后期更新的时候会覆盖 修改 打开其中的 cu…