Scrapy — выбор и сканирование определенного типа узлов карты сайта

Этот — это карта сайта, которую я просматриваю. 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
узлы имеют детали элемента - таких деталей нет - они содержат детали в своем loc элементе. Вы хотите отфильтровать по этому слову?
RomanPerekhrest 08.07.2019 09:28

@RomanPerekhrest Я имел в виду, что у них есть URL-адрес, который ведет к деталям товара. Извините за неясность, я редактирую свой пост. Я пытаюсь очистить информацию об элементе из URL-адресов внутри этих узлов.

gunesevitan 08.07.2019 09:29

уточнить, что такое детали товара?

RomanPerekhrest 08.07.2019 09:31

@RomanPerekhrest Каждый URL-адрес внутри 3-го и 4-го узла является элементом. Если я могу выбрать только эти узлы, я буду отправлять запросы на URL-адреса и очищать детали элемента.

gunesevitan 08.07.2019 09:34
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
216
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

Ответ принят как подходящий

Вам не нужно использовать Карта сайтаПаук, просто используйте регулярное выражение и стандартный паук.

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)

Разве это не должно быть «sitemap_links[2:4]» для 3-го и 4-го узлов?

Gallaecio 09.07.2019 09:50

Другие вопросы по теме