Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scrapy SGMLLinkedExtractor don';行不通_Scrapy - Fatal编程技术网

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的新手,所以你能给我确切的规则,我应该尝试哪些?