Scrapy-选择和搜寻特定类型的站点地图节点

时间:2019-07-08 07:22:02

标签: python xml scrapy web-crawler sitemap

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

2 个答案:

答案 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)