Scrapy не может запросить текст ни с CSS, ни с xPath - PullRequest
0 голосов
/ 29 мая 2019

Я уже некоторое время пытаюсь извлечь какой-то текст, и хотя все работает нормально, есть кое-что, что я не могу получить.

Возьми этот сайт: https://duproprio.com/fr/montreal/pierrefonds-roxboro/condo-a-vendre/hab-305-5221-rue-riviera-854000

Я хочу получить тексты из узлов class = перечисление-main-характеристики__number (под картинкой, поле с надписью "2 chambres 1 salle de bain Aire пригодный для проживания (без s-sol) 1 030 pi2 (95,69m2)")На этой странице есть 3 элемента с этим классом («2», «1» и «1030 pi² (95,69 м²)»). ​​Я пробовал несколько вариантов в XPath и CSS, но ни один из них не сработал,некоторые давали странные ответы.

Например, с:

response.xpath('//span[@class="listing-main-characteristics__number"]').getall()

Я получаю:

['<span class="listing-main-characteristics\_\_number">\n 2\n </span>', '<span class="listing-main-characteristics\_\_number">\n 1\n </span>']

Например, что-то еще, что отлично работает на том жевеб-страница:

response.xpath('//div[@property="description"]/p/text()').getall()

Если я получу все промежутки по этому запросу:

response.css('span::text').getall()

Я найду свои тексты, упомянутые в начале в. Но из этого:

response.css('span[class=listing-main-characteristics__number]::text').getall()

Я только получаю это

['\n                        2\n                    ', '\n                        1\n                    ']

Может кто-нибудь подсказать мне, какой выбор мне понадобится? СпасибоВы так много!

1 Ответ

1 голос
/ 29 мая 2019

Вот xpath, который вы должны использовать.

//div[@data-label='#description']//div[@class='listing-main-characteristics__label']|//div[@data-label='#description']//div[@class='listing-main-characteristics__item-dimensions']/span[2]

вам, возможно, придется использовать вышеупомянутый xpath.(Добавьте / text (), если вам нужен соответствующий текст.)

response.xpath("//div[@data-label='#description']//div[@class='listing-main-characteristics__label']|//div[@data-label='#description']//div[@class='listing-main-characteristics__item-dimensions']/span[2]").getall()

Ниже приведен пример кода Python

url = "https://duproprio.com/fr/montreal/pierrefonds-roxboro/condo-a-vendre/hab-305-5221-rue-riviera-854000#description"
driver.get(url)
# get the output elements then we will get the text from them
outputs = driver.find_elements_by_xpath("//div[@data-label='#description']//div[@class='listing-main-characteristics__label']|//div[@data-label='#description']//div[@class='listing-main-characteristics__item-dimensions']/span[2]")
for output in outputs:  
    # replace the new line character with space and trim the text
    print(output.text.replace("\n", ' ').strip())

Вывод:

2 камеры

1 salle de bain

1030 pi² (95,69 м²)

Снимок экрана: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...