#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» две перевернутые запятые. После свойства-ссылка