Scrapy SGMLLinkedExtractor don';行不通
我想爬网整个网站,并提取有条件的链接 正如在这个链接中所建议的,我尝试了多种规则,但都不起作用 我试过使用这段代码,但它没有放弃任何细节Scrapy SGMLLinkedExtractor don';行不通,scrapy,Scrapy,我想爬网整个网站,并提取有条件的链接 正如在这个链接中所建议的,我尝试了多种规则,但都不起作用 我试过使用这段代码,但它没有放弃任何细节 class BusinesslistSpider(CrawlSpider): name = 'businesslist' allowed_domains = ['www.businesslist.ae'] start_urls = ['http://www.businesslist.ae/'] rules = (
class BusinesslistSpider(CrawlSpider):
name = 'businesslist'
allowed_domains = ['www.businesslist.ae']
start_urls = ['http://www.businesslist.ae/']
rules = (
Rule(SgmlLinkExtractor()),
Rule(SgmlLinkExtractor(allow=r'company/(\d)+/'), callback='parse_item'),
)
def parse_item(self, response):
self.log('Hi, this is an item page! %s' % response.url)
hxs = HtmlXPathSelector(response)
i = BusinesslistItem()
company = hxs.select('//div[@class="text companyname"]/strong/text()').extract()[0]
address = hxs.select('//div[@class="text location"]/text()').extract()[0]
location = hxs.select('//div[@class="text location"]/a/text()').extract()[0]
i['url'] = response.url
i['company'] = company
i['address'] = address
i['location'] = location
return i
在我的例子中,它不应用第二条规则,因此它不分析详细信息页面。第一条规则规则(SgmlLinkExtractor())
匹配每个链接,而scrapy只忽略第二条
尝试以下方法:
...
start_urls = ['http://www.businesslist.ae/sitemap.html']
...
# Rule(SgmlLinkExtractor()),
第一条规则规则(SgmlLinkExtractor())
匹配每个链接,而scrapy只忽略第二条
尝试以下方法:
...
start_urls = ['http://www.businesslist.ae/sitemap.html']
...
# Rule(SgmlLinkExtractor()),
你的第一条规则是空的。你怎么知道第二条规则是有效的呢?因为第一条规则是空的,它应该对整个站点进行爬网,并提取与第二条规则匹配的链接。根据Ref,您的第一条规则为空。你怎么知道第二条规则是有效的呢?因为第一条规则是空的,它应该对整个站点进行爬网,并提取与第二条规则匹配的链接。根据参考。我们不能使用多个规则,如在这个链接中建议?因为我只想为特定链接调用parse_项。仍然不明白您想要什么。我想使用多个规则,如规则(sgmlLinkedExtractor())、规则(sgmlLinkedExtractor(allow=r'company/(\d)+/)、回调='parse_项'),以便第一个规则抓取整个站点,第二个规则从特定URL抓取数据(即,在url中包含“company/”的详细页面url)。在您的情况下,规则#1将覆盖规则#2,因此#2不起作用。您应该将规则#1从“整个网站中的所有链接”更改为“所有链接,但不匹配规则#2”所以规则#2不会被忽略。我是scrapy的新手,你能给我确切的规则吗?我们不能使用此链接中建议的多个规则吗?因为我只想为特定链接调用parse_项。仍然不明白你想要什么。我想使用多个规则,如规则(SgmlLinkExtractor()),规则(sgmlLinkedExtractor(allow=r'company/(\d)+/),callback='parse_item'),这样第一条规则爬网整个网站,第二条规则从特定url(即url中包含“company/”的详细页面url)抓取数据。在您的情况下,规则1将覆盖规则2,因此规则2不起作用。您应该将规则1从“整个网站中的所有链接”更改为“所有链接”到“所有链接,但不符合规则2”,因此规则2不会被忽略。我是scrapy的新手,所以你能给我确切的规则,我应该尝试哪些?