Scrapy 使用相同的spider来解析详细信息页面和分页页面
我有一个刮板,使用链接提取器通过分页和解析详细页面,一切正常。示例代码如下:Scrapy 使用相同的spider来解析详细信息页面和分页页面,scrapy,scrapy-spider,Scrapy,Scrapy Spider,我有一个刮板,使用链接提取器通过分页和解析详细页面,一切正常。示例代码如下: class SampleSpider(CrawlSpider): name = 'sample' start_urls = ['https://www.some-pagination-page.com'] rules = ( Rule(LinkExtractor(restrict_xpaths='//*[contains(@class, "paging-next")]')),
class SampleSpider(CrawlSpider):
name = 'sample'
start_urls = ['https://www.some-pagination-page.com']
rules = (
Rule(LinkExtractor(restrict_xpaths='//*[contains(@class, "paging-next")]')),
Rule(LinkExtractor(restrict_xpaths='//*[contains(@class, "b-button_primary")]'), callback='parse_item'),
)
def parse_item(self, response):
#Code block related to the parsing of item ...
return item
现在,我想使用同一个爬行器直接解析细节页面,而无需分页。。。
基本上,我想将这个spider与scrapyrt一起使用,我想发送一个参数,指示这是一个详细页面,详细页面作为start_url,
这样我就可以直接解析该页面并快速返回结果。
目前,我已经解决了复制此爬虫并仅删除规则提取器的问题,方法如下:
class SampleSpider(scrapy.Spider):
name = 'sample'
start_urls = ['https://www.some-details-page.com']
def parse(self, response):
#Code block related to the parsing of item ...
return item
为了避免代码重复,我如何修改spider,使其既可以与分页开始url一起使用,也可以将单个详细信息页面作为开始url一起使用
是否可以只禁用规则?
最好的方法是什么 我不知道这是否是最好的主意,但我通过重写
start\u请求
并根据spider参数指定要使用的回调:
class MySpider(CrawlSpider):
...
def start_requests(self):
if getattr(self, 'url'):
yield Request(
url=self.url,
callback=getattr(self, getattr('callback', 'parse_item'))
)
else:
for url in self.start_urls:
yield Request(url)
这样,您可以在调用spider时指定url
参数(以及callback
方法,默认为parse_item
):
如果不是,它将作为一个普通的爬行爬行器
,因为解析
方法是请求
的默认回调,解析
方法是负责编译规则
的方法
scrapy crawl myspider url="http://myurl" callback="parse_item"