웹 페이지의 sitemap.xml
을 기반으로 URL을 긁는 거미를 만들고 싶습니다. 따라서 나는 start_urls
이 없습니다. sitemap.xml
을 사용하여 긁히는 URL을 결정하고 싶습니다.URL의 sitemap을 거미 거미에 사용하는 방법?
_parse_sitemap
메서드를 추가하고 requests
및 lxml
을 사용하여 구문 분석하려고했지만 잔인 할 수 있습니다.
<loc>
태그 안에 모든 URL을 가져 오는 기본 제공 방법이 있습니까?
내가 지금까지했던 어떤 :
거미 하나 개의 URL 및 meta = {'sitemap':True}
때문에 분석 방법을 얻는다는 사이트 맵에서 URL을 기반으로 _parse_sitemap
하는 yield
의 Request
객체를 호출하는 것을 알고있다.
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
거미 내부에서 파싱하는 방법을 모르겠습니다.
SitemapSpider를 사용하지 않는 이유는 파일이 하나뿐이기 때문입니다. 스파이더는 문서의 첫 번째 예제와 같이 매우 간단 할 수 있습니다. https://doc.scrapy.org/en/latest/topics/spiders.html#sitemapspider-examples – elacuesta
간단히 SgmlLinkExtractor를 사용할 수 있습니다. 페이지에서 링크. CrawlSpider을 가져, 수업 시간에 라인 아래 추가하고 콜백 기능 지정 규칙 scrapy.contrib.spiders에서 scrapy.contrib.linkextractors.sgml 수입 SgmlLinkExtractor 에서 수입 아래 사용, 그것은 규칙 모든 URL을 responce됩니다 = (규칙 (SgmlLinkExtractor(), callback = 'parse_url', follow = False),) –