Ошибка Scrapy Недопустимое выражение XPath при построении списка URL

#python #xpath #scrapy

#python #xpath #scrapy

Вопрос:

Я очищаю apartments.com со Скрэпи. Я хочу перейти на каждую страницу в форме apartments.com/boston-ma/X , где X — целое число, представляющее номер страницы.

Оказавшись там, я хочу извлечь все URL-адреса свойств, все из которых имеют класс property-link . И затем я собираюсь написать parse_item для каждого свойства.

Я получаю сообщение об ошибке

Ошибка значения: ошибка XPath: недопустимое выражение в //*[содержит(@class, ‘property-link»)]/@href

Я понятия не имею, что не так с моим XPath. Пожалуйста, сообщите.

Код:

 import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from apt.items import AptItem
from urllib.parse import urljoin

class AptSpider(CrawlSpider):
    name = "apt"
    allowed_domains = ["apartments.com"]
    start_urls = ["https://www.apartments.com/boston-ma/"]

    rules = (Rule(LinkExtractor(allow=r'[1-9] /*'), callback='parse_urls', follow=True),)

    def parse_urls(self, response):
        apts = response.xpath("//*[contains(@class, 'property-link'')]/@href").extract()
        for a in apts:
            url = urljoin(response.url, a)
            yield scrapy.Request(url, callback=parse_item)


    #def parse_item(self, response):
        #scrape data here
        #item = AptItem()
 

Спасибо!

Ответ №1:

Вы пишете apts = response.xpath("//*[contains(@class, 'property-link'')]/@href").extract() Вы должны написать apts = response.xpath("//*[contains(@class, 'property-link')]/@href").extract() Вы добавляете ‘property-link» две перевернутые запятые. После свойства-ссылка