作为Scrapinghub的python开发人员,我花了大量时间在Scrapy shell中。这是Scrapy附带的命令行界面,可让您运行简单的,兼容Spider的代码。当然,它可以完成工作,但是在某些情况下命令行界面可能会变得有点怪异,我发现我经常会通过这一点。我在工具设计和任务自动化方面有一定的背景,因此我自然就开始想知道如何改善自己的经验并帮助将更多的时间集中在构建出色的蜘蛛上。在圣诞节期间,我花了一些空闲时间来改善这种体验,这是我的第一个python软件包Scrapy-GUI。
Scrapy-GUI提供了两种不同的UI工具来帮助构建Scrapy蜘蛛,但是今天我将集中讨论直接集成到Scrapy shell中的部分-load_selector方法。
安装和激活
首先,安装部分很简单,就像在Python Package Index上一样。您需要做的就是通过pip安装它。请注意,它需要python 3.6+。
安装后,要在外壳中使用它,只需从模块导入负载选择器功能。为此,请在您的Shell中使用以下代码。
from scrapy_gui import load_selector
然后,例如,如果您要将响应加载到编写的UI中:
load_selector(response)
加载选择器后,将打开Shell-UI窗口。
使用工具标签
使用“工具”选项卡可以测试解析器的三个元素-查询,解析器和处理器。这个小标签可以最大程度地改善我的抓取体验。在一个地方,我可以轻松地看到提取的所有三个步骤,这使我可以快速观察结果并进行更改,以最好地选择所需的信息类型。
查询输入是必填项,可以在左上角找到。尽管Scrapy可以处理XPath和CSS查询,但GUI当前仅允许您测试CSS查询。您在此处键入的任何内容都将返回与运行代码等效的结果。
selector.css(your_query).getall()
Regex输入允许您测试查询的正则表达式过滤。选中此框后,它将更新您的查询,以便它运行代码。
selector.css(your_query).re(your_regex)
最后,使用Function输入,您可以编写python代码来处理查询的输出。这段代码可能非常复杂,例如,在下图中,我导入了JSON包,并用它来解析内容并提取特定元素。
对于功能选项卡,有两个要求:
- 它必须定义一个名为user_fun的函数,该函数将结果和选择器作为参数。
- 该user_fun函数必须返回一个列表。
该代码通过python的exec函数传递您的函数,以定义一个名为user_fun的函数,然后将查询结果和初始选择器传递给该函数。
用户的想法
我在Scrapinghub的日常工作中一直依赖Scrapy-GUI。我在这里肯定有偏见,但是老实说,我觉得通过CLI使用简单UI带来的UX有了很大的改进。
作为最终用户,我会说功能部分可能是此选项卡中我最喜欢的部分之一。必须在CLI Shell上编写多行缩进代码会很快变得非常痛苦。例如,我通常会忘记在for循环之前写一个收集器变量,而只注意到其中的几行,这迫使我一直回到起点!复制/粘贴变得更糟-我经常会出现缩进错误,尤其是当我复制/粘贴其中包含空行的函数定义时。
非常接近的第二个是结果选项卡-能够轻松查看我的查询结果而不必淹没我的窗口真是天赐之物!不仅因为我可以轻松查看所有结果,还因为不需要向上滚动以再次检查我的查询或处理器是否需要更改。
结论
这样就结束了对Scrapy-GUI的简要介绍。我希望这足以让您在构建自己的Scrapy蜘蛛时开始使用它。如果您遇到任何错误或有任何反馈意见,请随时在其Github上打开问题,甚至创建一个fork并提交一个Pull请求!
如果您想大规模抓取网络,请查看我们的开发人员工具,该工具可轻松在云中运行Spider并处理JS渲染或代理旋转。
或者,如果您厌倦了编写自己的抓取工具和调试Spider的操作,则可能需要查看我们的Web抓取解决方案,并让我们的专家处理您的数据提取需求。
转载至:https://blog.scrapinghub.com/building-spiders-made-easy-gui-for-your-scrapy-shell?success=true 谷歌进行的