2013-12-21 4 views
0

다음은 코드입니다. 기본적으로 영화 정보를 긁어 모으고 있습니다. IMDB.com에서. 그러나 어쨌든 요청은 객체 "addr"에있는 url을 스크랩하지 않습니다. parse_item2에 넣은 "print"는 단순히 나타나지 않습니다.치료 요청 URL을 따르지 않습니다

이것은 나를 미치게합니다. 나는 그것에 몇 시간을 보냈다. 어떤 경험을 가진 사람이라면 도움이 될 수 있습니까? 정말 고맙습니다.

# code for the spider 

    from scrapy.contrib.spiders import CrawlSpider, Rule 
    from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
    from scrapy.selector import Selector 
    from scrapy.http import Request, Response 
    from beta.items import BetaItem 
    import urllib2 

    class AlphaSpider(CrawlSpider): 

    name = 'alpha' 
    allowed_domains = ['amazon.com','imdb.com'] 
    start_urls = ['http://www.imdb.com/search/title?at=0&sort=boxoffice_gross_us&title_type=feature&year=2005,2005'] 
    rules = (Rule(SgmlLinkExtractor(restrict_xpaths=('//td/a',), allow=('/title/')), callback='parse_item1'), 
    ) 

    def parse_item1(self, response): 
     sel = Selector(response) 
     item = BetaItem() 

     idb = sel.xpath('//link[@rel="canonical"]/@href').extract() 
     idb = idb[0].split('/')[-2] 
     item['idb'] = idb 

     title = sel.xpath('//h1[@class="header"]/span[@class="itemprop"]/text()').extract() 
     item['title'] = title 

     addr = 'http://www.imdb.com/title/' + idb + '/business' 
     request = Request(addr, callback=self.parse_item2) 
     request.meta['item'] = item 
     return request 

    def parse_item2(self, response): 
     print 'I am here' 
     item = response.meta['item'] 
     sel = Selector(response) 
     # BLA BLA BLA 
     return item 
+0

'parse_item1'이 작동합니까? 'addr'가 가리키는 페이지가 존재합니까? – Blender

+0

안녕하세요 블렌더입니다. 예, "idb"및 "title"을 크롤링 할 수 있습니다. – maxwell

+0

Scrapy의 크롤링 대기열이 LIFO이므로 추출 된 링크에 도달하는 데 시간이 좀 걸릴 수 있습니다. 특정 페이지에서 테스트해볼 수 있습니까? – Blender

답변

2

블렌더가 위의 그의 의견에서 말했듯이 문제의 원인은 실제로 그렇습니다. 특정 요청에 따라 물건을 크롤링하는 데 꽤 많은 시간이 걸립니다.

관련 문제