This是我正在抓取的网站的站点地图。第3个和第<sitemap>
个节点具有指向项目详细信息的URL。有什么方法可以仅将爬行逻辑应用于那些
节点? (如按索引选择它们)
class MySpider(SitemapSpider):
name = 'myspider'
sitemap_urls = [
'https://www.dfimoveis.com.br/sitemap_index.xml',
]
sitemap_rules = [
('/somehow targeting the 3rd and 4th node', 'parse_item')
]
def parse_item(self, response):
# scraping the item
答案 0 :(得分:2)
Scrapy的Spider
子类,包括SitemapSpider
旨在使非常常见的情况变得非常简单。
您想要做的事情很少见,因此您应该阅读SitemapSpider
的源代码,尝试了解它的作用,然后子类SitemapSpider
覆盖您要更改的行为,或者直接根据SitemapSpider
的代码从头开始编写自己的蜘蛛。
答案 1 :(得分:2)
您无需使用 SitemapSpider ,只需使用 regex 和标准蜘蛛即可。
def start_requests(self):
sitemap = 'https://www.dfimoveis.com.br/sitemap_index.xml'
yield scrapy.Request(url=sitemap, callback=self.parse_sitemap)
def parse_sitemap(self, response):
sitemap_links = re.findall(r"<loc>(.*?)</loc>", response.text, re.DOTALL)
sitemap_links = sitemap_links[2:4] # Only 3rd and 4th nodes.
for sitemap_link in sitemap_links:
yield scrapy.Request(url=sitemap_link, callback=self.parse)