2017-10-10 12 views
0

웹 페이지의 sitemap.xml을 기반으로 URL을 긁는 거미를 만들고 싶습니다. 따라서 나는 start_urls이 없습니다. sitemap.xml을 사용하여 긁히는 URL을 결정하고 싶습니다.URL의 sitemap을 거미 거미에 사용하는 방법?

_parse_sitemap 메서드를 추가하고 requestslxml을 사용하여 구문 분석하려고했지만 잔인 할 수 있습니다.

<loc> 태그 안에 모든 URL을 가져 오는 기본 제공 방법이 있습니까?

내가 지금까지했던 어떤 :

거미 하나 개의 URL 및 meta = {'sitemap':True} 때문에 분석 방법을 얻는다는 사이트 맵에서 URL을 기반으로 _parse_sitemap하는 yieldRequest 객체를 호출하는 것을 알고있다.

import scrapy 
from scrapy import Request 


class MainSpider(scrapy.Spider): 
    name = 'main_spider' 
    allowed_domains = ['www.example.com'] 
    sitemap = 'www.example.com/sitemap.xml' 
    start_urls = [sitemap] 

    def start_requests(self): 
     yield Request(url=self.sitemap,meta={'sitemap':True}) 

    def parse(self, response): 
     if response.meta.get('sitemap'): 
      self._parse_sitemap(response) 
     else: 
      # parse normal url 

    def _parse_sitemap(self, response): 
     # how to get urls? 
     urls = [] 
     for url in urls: 
      yield Request(url=url,callback=self.parse) 

그것은 그래서 내가 SitemapSpider를 사용하지한다고 생각 하나 xml입니다. 추천 메뉴가 무엇인가요? 아시다시피 나는 urls_parse_sitemap 거미 내부에서 파싱하는 방법을 모르겠습니다.

+1

SitemapSpider를 사용하지 않는 이유는 파일이 하나뿐이기 때문입니다. 스파이더는 문서의 첫 번째 예제와 같이 매우 간단 할 수 있습니다. https://doc.scrapy.org/en/latest/topics/spiders.html#sitemapspider-examples – elacuesta

+0

간단히 SgmlLinkExtractor를 사용할 수 있습니다. 페이지에서 링크. CrawlSpider을 가져, 수업 시간에 라인 아래 추가하고 콜백 기능 지정 규칙 scrapy.contrib.spiders에서 scrapy.contrib.linkextractors.sgml 수입 SgmlLinkExtractor 에서 수입 아래 사용, 그것은 규칙 모든 URL을 responce됩니다 = (규칙 (SgmlLinkExtractor(), callback = 'parse_url', follow = False),) –

답변

0

간단히 SgmlLinkExtractor를 사용할 수 있습니다. 그것은 페이지에서 모든 링크를 제공합니다. 수입

from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.contrib.spiders import CrawlSpider, Rule 

아래

를 사용하여 수업 시간에 라인 아래 추가하고 콜백 기능을 지정, 그것은 모든 URL LxmlLinkExtractor 사용해야 이제 사용되지 않습니다 SgmlLinkExtractor 이후

rules = (Rule(SgmlLinkExtractor(), callback='_parse_sitemap', follow=False),) 
0

을 responce 것입니다. 차이점에 대한 자세한 내용은 here입니다.