2017-04-07 44 views
0

I've tried to upload what I can see in the console我已经在scrapy中编写了一个脚本来递归爬取网站。但由于某种原因,它无法做到。我已经在崇高中测试了xpaths,并且它工作得很完美。所以,在这一点上,我无法解决我做错了什么。当两个规则设置为递归时,Scrapy无法抓取

“items.py” 包括:

import scrapy 
class CraigpItem(scrapy.Item): 
    Name = scrapy.Field() 
    Grading = scrapy.Field() 
    Address = scrapy.Field() 
    Phone = scrapy.Field() 
    Website = scrapy.Field() 

名为 “craigsp.py” 蜘蛛包括:

from scrapy.spiders import CrawlSpider, Rule 
from scrapy.linkextractors import LinkExtractor 

class CraigspSpider(CrawlSpider): 
    name = "craigsp" 
    allowed_domains = ["craigperler.com"] 
    start_urls = ['https://www.americangemsociety.org/en/find-a-jeweler'] 
    rules=[Rule(LinkExtractor(restrict_xpaths='//area')), 
       Rule(LinkExtractor(restrict_xpaths='//a[@class="jeweler__link"]'),callback='parse_items')]  

    def parse_items(self, response): 
     page = response.xpath('//div[@class="page__content"]') 
     for titles in page: 
      AA= titles.xpath('.//h1[@class="page__heading"]/text()').extract() 
      BB= titles.xpath('.//p[@class="appraiser__grading"]/strong/text()').extract() 
      CC = titles.xpath('.//p[@class="appraiser__hours"]/text()').extract() 
      DD = titles.xpath('.//p[@class="appraiser__phone"]/text()').extract() 
      EE = titles.xpath('.//p[@class="appraiser__website"]/a[@class="appraiser__link"]/@href').extract() 
      yield {'Name':AA,'Grading':BB,'Address':CC,'Phone':DD,'Website':EE} 

我与运行的命令是:

scrapy crawl craigsp -o items.csv 

希望有人能带领我走向正确的方向。

回答

2

过滤异地请求

此错误意味着,排队到scrapy一个URL不通过allowed_domains设置。

您有:

allowed_domains = ["craigperler.com"] 

而且你的蜘蛛试图抓取http://ww.americangemsociety.org。您可能需要将其添加到allowed_domains列表中,或完全摆脱此设置。

+0

哦,我的天啊!它现在工作完美。感谢zillion先生的Granitosaurus。你能告诉我为什么它不能与我之前在允许的域部分写的东西导致许多其他网站,当我尝试使用相同的爬网成功。顺便说一句,这一次 我运行保持空白。如果我想填写允许的域部分,除了留空之外,我可以写些什么。再次感谢先生。 – SIM

+1

@ SMth80 unforutantely此设置不支持通配符,因此默认情况下,所以您需要输入您手动预期的所有域。但是,通过扩展一个允许使用正则表达式模式的中间件(例如,'。+ \ .com'允许所有的.com域),您可以非常容易地扩展此功能。在这里看到我对这个问题的答案:http://stackoverflow.com/questions/39093211/scrapy-offsite-request-to-be-processed-based-on-a-regex/39098601#39098601 – Granitosaurus

+0

再次感谢先生,为您的善意的回复。要遵循你提供的链接。 – SIM