我是Python的新手,也是Scrapy的新手。我正在尝试构建一个蜘蛛,它将转到给定的URL并在该站点内运行多个嵌套搜索。例如,如果我正在搜索在线商店,我会先向http://www.mystore.com发送请求,然后在网站中搜索3个级别的子菜单,查找在运行时通过CSV输入文件指定的各种产品。在子菜单的每个级别,我正在寻找目标类别并启动获取该子类别的请求,直到我在解析查找特定项目的结果时达到第3级。
我可以将搜索数据加载到我的CrawlSpider中并告诉Scrapy运行所有这些搜索,但是Scrapy看到起始URL是相同的,因此它只运行第一个请求并将所有其他请求视为重复。
我正在抓取的网站没有RESTful接口,因此我无法指定请求网址直接转到相关的子类别。相反,我必须查看每个级别的导航链接,以找到我想要抓取的下一个子类别。
我不想在蜘蛛周围传递整个搜索树,并继续检查我在树中的位置。搜索适用于单个搜索,例如对于上面的“搅拌机”,但我无法弄清楚如何说服Scrapy分别运行所有搜索。
有人可以指点我做一些这样的例子或其他文件吗?
答案 0 :(得分:1)
告诉linkextractor不要过滤相同的网址:
但是,从您的问题来看,您想要抓取的每个网站都需要一个单独的蜘蛛,而所有网站共享相同的管道等(经典的scrapy项目结构),您还应该考虑使用简单的Spider而不是CrawlSpider,请注意没有必要记住“整个搜索树”,根据需要简单地点击多个请求并让scrapy将它们排队并逐个调用它们的回调。unique(boolean) - 是一个布尔值,指定是否应对提取的链接应用重复过滤。
答案 1 :(得分:0)
@Guy:
搜索参数来自CSV文件中的行,但逻辑上它们将是这样的:
所以搜索在逻辑上是一组嵌套查询,但我宁愿对上面的每一行进行单独的搜索,如果我能说服Scrapy忽略从www.mystore.com开始有几个搜索的事实。数据被存储为一组简单的CSV记录,即每个提取的项目一个。因此,除了我不知道如何通过Scrapy对相同的基本URL运行多个不同的搜索之外,没有必要构建一个树。
这有帮助吗?
答案 2 :(得分:0)
好的,我明白了。
效率不高,如果数据量增加,我需要重新工作,但现在它似乎有效。
感谢您的建议。