Python 了解scrapy框架体系结构
最近,我一直在努力和scrapy打交道。我觉得如果我对架构有更好的理解,我会走得更快。当前的具体问题是:我想将scrapy提取的所有链接存储在数据库中,而不是响应和链接。这是为了检查是否正常 我最初的想法是在Python 了解scrapy框架体系结构,python,scrapy,scrapy-spider,scrapy-pipeline,Python,Scrapy,Scrapy Spider,Scrapy Pipeline,最近,我一直在努力和scrapy打交道。我觉得如果我对架构有更好的理解,我会走得更快。当前的具体问题是:我想将scrapy提取的所有链接存储在数据库中,而不是响应和链接。这是为了检查是否正常 我最初的想法是在规则上使用过程链接参数,并在它所指向的函数中生成项。然而,回调参数指向一个作为项生成器的函数,而进程链接参数更像一个过滤器。在回调函数中,您可以生成项目,这些项目将自动收集并放入管道中。在process\u links函数中,返回链接列表。您不生成项目 我可以在process\u links
规则
上使用过程链接
参数,并在它所指向的函数中生成项
。然而,回调
参数指向一个作为项生成器的函数,而进程链接
参数更像一个过滤器。在回调
函数中,您可以生成项目,这些项目将自动收集并放入管道中。在process\u links
函数中,返回链接列表。您不生成项目
我可以在process\u links
函数中建立一个数据库连接,然后直接写入datatabase,但当scrapy通过Twisted进行内置异步数据库事务处理时,这并不是正确的方法
我可以尝试将项目从进程链接
函数传递到回调
函数,但我不确定这两个函数之间的关系。一个用于生成项目,一个接收列表并返回列表
在试图想清楚这一点时,我不断遇到这样一个事实:我不理解scapy中的控制循环。读取回调
函数生成的项的过程是什么?向process\u links
功能提供链接并从中接收链接的流程是什么?接受请求
并返回响应
在我看来,我在一个spider中编写代码,它生成项
。项
将通过管道自动读取和移动。我可以在管道中创建代码,项将自动传入和移出该代码。缺少的是我对这些项目如何在管道中移动的确切理解
通过查看代码,我可以看到爬行器的基本代码隐藏在角落里,所有优秀的爬行器都应该这样做,并以\uuuu init\uuuuuuuuuy.py
的名义运行。它包含启动请求(
)和从
发出请求的函数,根据文档,这些函数是起点。但这不是一个控制回路。它被别的东西调用了
从相反的方向看,我可以看到,当我执行命令scrapy crawl…
时,我正在调用crawl.py
,它依次调用self.crawler\u process.start()
incrawler.py
。它启动了一个扭曲的反应堆。还有另一个core/engine.py
,它是另一个函数集合,看起来好像是为了控制爬行器的操作而设计的
尽管我仔细阅读了代码,但我对整个过程并没有清晰的印象。我意识到框架的概念是它隐藏了很多复杂性,但我觉得如果能更好地理解正在发生的事情,我就能更好地利用框架
抱歉发了这么长的邮件。如果有人能给我一个关于保存数据库链接的具体问题的答案,那就太好了。如果您能够简要介绍一下该体系结构,那将非常有帮助。简而言之,Scrapy就是这样工作的:
- 你有蜘蛛负责抓取网站。您可以为单独的站点/任务使用单独的spider
- 您可以向爬行器提供一个或多个起始URL。您可以将它们作为列表提供,也可以使用
start\u请求
方法
- 当我们使用Scrapy运行爬行器时,它获取这些URL并获取HTML响应。响应被传递给spider类上的回调。使用
start\u requests
方法时,可以显式定义回调。如果没有,Scrapy将使用parse
方法作为回调李>
- 您可以从HTML中提取所需的任何数据。在
parse
回调中得到的response
对象允许您使用css选择器或xpath提取数据李>
- 如果您从响应中找到数据,您可以构建
项
s并生成它们。如果需要转到另一页,可以生成scrapy.Request
- 如果您生成一个dictionary或
Item
对象,Scrapy将通过注册的管道发送它们。如果您产生scrapy.Request
,请求将被进一步解析,响应将反馈给回调。同样,您可以定义单独的回调或使用默认回调李>
- 在管道中,数据(字典或
项
)通过管道处理器。在管道中,您可以将它们存储在数据库或任何您想做的事情中李>
简言之:
- 在
parse
方法或spider中的任何方法中,我们将提取并生成数据,以便通过管道发送数据李>
- 在管道中,您执行实际的处理
下面是一个简单的spider和管道示例:
不久前我开始使用Scrapy,我自己也有一些疑问(也考虑到我从Python开始时的总体情况),但现在它对我有效,所以不要气馁——它是一个很好的框架
首先,在这个阶段,我不会太担心框架背后的细节,而是自己开始编写一些基本的spider
一些真正关键的概念是:
- Start_URL–它们定义了一个或多个初始URL,您可以在其中进一步查找文本或其他要爬网的链接。假设你想要