2016-08-18 1 views
0

와 링크를 따라하는 I scrapy 거미에 다음 코드가 있습니다쉬운 방법은 Scrapy

class ContactSpider(Spider): 
    name = "contact" 
    # allowed_domains = ["http://www.domain.com/"] 
    start_urls = [ 

     "http://web.domain.com/DECORATION" 
    ] 
    BASE_URL = "http://web.domain.com" 

    def parse(self, response): 
     links = response.selector.xpath('//*[contains(@class,"MAIN")]/a/@href').extract() 
     for link in links: 
      absolute_url = self.BASE_URL + link 
      yield Request(absolute_url, headers= headers, callback=self.second) 

내가 링크를 따라하기보다는 각 absolute_url을 구축 할 scrapy에없는 간단한 방법이 놀랍군요입니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

답변

1

절대 URL의 경우 urlparse.urljoin을 사용할 수 있습니다. Response에는 이미 response.urljoin(link)을 통한 단축키가 있습니다. 당신은 또한 몇 가지 규칙에 따라 링크를 추출하고 모든 자동 가입의 관리 scrapy LinkExtractors을 사용할 수 있습니다

def parse(self, response): 
    links = response.selector.xpath('//*[contains(@class,"MAIN")]/a/@href').extract() 
    for link in links: 
     yield Request(response.urljoin(link), headers=headers, callback=self.second) 

: 그래서 당신의 코드를 쉽게 교체 할 수있다.

from scrapy.linkextractors import LinkExtractor 
def parse(self, response): 
    le = LinkExtractor(restrict_xpaths='//*[contains(@class,"MAIN")]/a/@href') 
    links = le.extract_links(response) 
    for link in links: 
     yield Request(link.url, headers= headers, callback=self.second) 

은 더 많은 경험을 크롤링 자동화에 대한 - scrapy 추출하고 각 페이지의 링크를 따라 규칙 세트 사용합니다 CrawlSpider 있습니다. 여기에 대한 자세한 내용은 다음을 참조하십시오. http://doc.scrapy.org/en/latest/topics/spiders.html#crawlspider
문서에는 몇 가지 예가 있습니다.

+0

'CrawlSpider'를 먼저 언급하는 것이 좋습니다 : 저는 이것이 이런 종류의 유스 케이스에 대한 out-of-the-box 거미 클래스라고 생각합니다. –

+0

대단히 감사합니다! – user61629