我想根據網頁的sitemap.xml
創建一個抓取網址的蜘蛛。所以我沒有start_urls
。我想確定使用sitemap.xml
刮掉哪些網址。如何在scrapy蜘蛛中使用url的站點地圖?
我曾考慮添加方法_parse_sitemap
並使用requests
和lxml
解析它,但它可能是一種矯枉過正。
是否有一些內置方法可以獲得<loc>
標籤中的所有url?
我迄今所做的:
蜘蛛得到一個URL和meta = {'sitemap':True}
如此分析方法知道它必須調用基於從地圖網址有哪些_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)
這只是一個xml
所以我覺得我不應該使用SitemapSpider
。你有什麼建議?正如你可以看到我不知道如何解析urls
裏面的_parse_sitemap
蜘蛛。
爲什麼你認爲你不應該使用SitemapSpider,因爲你只有一個文件?您的蜘蛛可能非常簡單,就像來自文檔的第一個示例:https://doc.scrapy.org/en/latest/topics/spiders.html#sitemapspider-examples – elacuesta
您可以簡單地使用SgmlLinkExtractor.It將給所有來自頁面的鏈接。 使用下面從scrapy.contrib.spiders從scrapy.contrib.linkextractors.sgml進口SgmlLinkExtractor 進口 導入CrawlSpider,規則 添加以下行類,並指定你的回調函數,它將性反應的所有URL 規則= (Rule(SgmlLinkExtractor(),callback ='parse_url',follow = False)) –