是否可以创建一个继承/使用两个基本蜘蛛的功能的蜘蛛?
我正在尝试抓取各种网站,我注意到在许多情况下该网站提供了站点地图,但这仅指向类别/列表类型页面,而不是“真实”内容。因此,我不得不使用 CrawlSpider(指向网站根目录),但这非常低效,因为它会爬行所有页面,包括大量垃圾。
我想做的是这样的:
- 启动我的 Spider(SitemapSpider 的子类)并将每个响应传递给 parse_items 方法。
- 在 parse_items 中测试页面是否包含“真实”内容
- 如果存在则处理它,如果没有则将响应传递给 CrawlSpider(实际上是我的 CrawlSpider 子类)来处理
- CrawlSpider 然后在页面中查找链接,例如 2 层深度, 处理它们
这可能吗?我意识到我可以将 CrawlSpider 中的代码复制并粘贴到我的蜘蛛中,但这似乎是一个糟糕的设计
最佳答案
最后,我决定扩展站点地图蜘蛛并从爬行蜘蛛中提取一些代码,因为它比尝试处理多重继承问题更简单,所以基本上:
class MySpider(SitemapSpider):
def __init__(self, **kw):
super(MySpider, self).__init__(**kw)
self.link_extractor = LxmlLinkExtractor()
def parse(self, response):
# perform item extraction etc
...
links = self.link_extractor.extract_links(response)
for link in links:
yield Request(link.url, callback=self.parse)
关于scrapy - 在Scrapy中组合蜘蛛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26407631/