2014-03-05 2 views
1

후에 내가 여기에 문제는 도메인이 나는, amazonaws.com을 허용 한 것입니다콜백 함수 재

from scrapy.selector import Selector 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.contrib.spiders import CrawlSpider, Rule 
from sandbox.items import SandboxItem 

class SandboxCrawlSpider(CrawlSpider): 
    name = 'sandbox_crawl' 
    allowed_domains = ['amazonaws.com'] 
    start_urls = ['http://www.amazonaws.com/'] 
    rules = (
     Rule(SgmlLinkExtractor(), callback=('parse_item'), follow=True), 
    ) 

    def parse_item(self, response): 
     sel = Selector(response) 
     i = SandboxItem() 
     print response.url 

     return i 

follows-로 내가 만든 최소한의 크롤러가이 aws.amazon.com로 리디렉션합니다.

리디렉션 후에 크롤러는 페이지를 크롤링하지만 콜백 기능을 호출하지 않습니다. 출력은 parse_item가 '.'print response.url 호출되지 아무런 영향을 결코 알 수 있듯이

2014-03-05 15:50:56+0530 [sandbox_crawl] DEBUG: Redirecting (301) to <GET http://aws.amazon.com> from <GET http://www.amazonaws.com/> 
2014-03-05 15:50:58+0530 [sandbox_crawl] DEBUG: Crawled (200) <GET http://aws.amazon.com> (referer: None) 
2014-03-05 15:50:58+0530 [sandbox_crawl] DEBUG: Filtered offsite request to 'aws.amazon.com': <GET http://aws.amazon.com/> 
2014-03-05 15:50:58+0530 [sandbox_crawl] DEBUG: Filtered offsite request to 'portal.aws.amazon.com': <GET https://portal.aws.amazon.com/gp/aws/developer/registration/index.html> 
2014-03-05 15:50:58+0530 [sandbox_crawl] DEBUG: Filtered offsite request to 'console.aws.amazon.com': <GET https://console.aws.amazon.com/> 
2014-03-05 15:50:58+0530 [sandbox_crawl] DEBUG: Filtered offsite request to 'www.youtube.com': <GET http://www.youtube.com/embed/mZ5H8sn_2ZI?autoplay=1&hd=1&rel=0> 
2014-03-05 15:50:58+0530 [sandbox_crawl] DEBUG: Filtered offsite request to 'youtube.com': <GET http://youtube.com/embed/jOhbTAU4OPI?autoplay=1&hd=1&rel=0> 
2014-03-05 15:50:58+0530 [sandbox_crawl] DEBUG: Filtered offsite request to 'www.powerof60.com': <GET http://www.powerof60.com/?00N500000026nJd=BA_AWSHP_IntelAWS_Generic&sc_icampaign=ha_en_intel_power_of_60_ed&sc_icampaigntype=partners&sc_ichannel=ha&sc_icountry=us&sc_ipage=homepage&sc_iplace=editorial_r3_right_banner&utm_campaign=BA_AWSHP_IntelAWS&utm_content=GenericAWS&utm_medium=banner&utm_source=AWSHP> 
2014-03-05 15:50:58+0530 [sandbox_crawl] DEBUG: Filtered offsite request to 'aws.typepad.com': <GET http://aws.typepad.com/> 
2014-03-05 15:50:58+0530 [sandbox_crawl] DEBUG: Filtered offsite request to 'phx.corporate-ir.net': <GET http://phx.corporate-ir.net/phoenix.zhtml?c=176060&p=irol-InfoReq> 
2014-03-05 15:50:58+0530 [sandbox_crawl] INFO: Closing spider (finished) 

같은 것입니다 아니하며 기능에 다른 문을 수행합니다. 스파이더에 오류가 있습니까?

답변

0

그냥 "aws.amazon.com"

allowed_domains = ['amazonaws.com', 'aws.amazon.com'] 
+0

예. 그것은 선택 사항입니다. 그러나 'gmail.com'및 'amazonaws.com'과 같은 도메인을 포함하는 URL 목록이 제공되는 경우 크롤러가 직접 개입하지 않고 리디렉션 된 URL도 자동으로 구문 분석하도록하고 싶습니다. 이것은 정적 인 경우입니다. 내 프로그램에서는 파일에서 허용 된 도메인 목록을 읽었습니다. – Airmine

+0

[OffsiteMiddleware] (http://doc.scrapy.org/en/latest/topics/spider-middleware.html#scrapy.contrib.spidermiddleware.offsite.OffsiteMiddleware)를 비활성화하십시오. – warvariuc

0

allowed_domains하려면 요청에 dont_filter = true를 추가, 그러나 이것은 결국 문제가 해결되지 않습니다. 이 같은

:

Request('http://example.org/', callback = self.func, dont_filter=True)