Scrapy - 选择并爬取特定类型的站点地图节点
Scrapy - Selecting and crawling a specific type of sitemap nodes
This 是我正在抓取的网站的站点地图。第 3 和第 4 <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
Scrapy 的 Spider
子类,包括 SitemapSpider
旨在使非常常见的场景变得非常简单。
您想做一些不常见的事情,因此您应该阅读 SitemapSpider
的源代码,尝试理解它的作用,然后子类 SitemapSpider
覆盖您想要的行为根据SitemapSpider
.
的代码改或者直接自己写spider
您不需要使用 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)
This 是我正在抓取的网站的站点地图。第 3 和第 4 <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
Scrapy 的 Spider
子类,包括 SitemapSpider
旨在使非常常见的场景变得非常简单。
您想做一些不常见的事情,因此您应该阅读 SitemapSpider
的源代码,尝试理解它的作用,然后子类 SitemapSpider
覆盖您想要的行为根据SitemapSpider
.
您不需要使用 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)