Scrapy - выбор и сканирование определенного типа узлов карты сайта - PullRequest
0 голосов
/ 08 июля 2019

Это карта сайта, который я сканирую. 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

Ответы [ 2 ]

2 голосов
/ 08 июля 2019

Вам не нужно использовать 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)
2 голосов
/ 08 июля 2019

Подклассы Scrapy Spider, включая SitemapSpider, предназначены для упрощения очень распространенных сценариев.

Вы хотите сделать что-то необычное, поэтому вам следует прочитать исходный код SitemapSpiderпопробуйте понять, что он делает, и либо подкласс SitemapSpider переопределяет поведение, которое вы хотите изменить, либо напрямую напишите свой собственный паук с нуля, основываясь на коде SitemapSpider.

...