Этот — это карта сайта, которую я просматриваю. 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
@RomanPerekhrest Я имел в виду, что у них есть URL-адрес, который ведет к деталям товара. Извините за неясность, я редактирую свой пост. Я пытаюсь очистить информацию об элементе из URL-адресов внутри этих узлов.
уточнить, что такое детали товара?
@RomanPerekhrest Каждый URL-адрес внутри 3-го и 4-го узла является элементом. Если я могу выбрать только эти узлы, я буду отправлять запросы на URL-адреса и очищать детали элемента.






Подклассы 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-го узлов?
locэлементе. Вы хотите отфильтровать по этому слову?