Data Scraping XPath span не возвращает значения - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь получить показатели полезности с веб-сайта онлайн-обзора. Используя Python и lxml, я пытаюсь получить это значение, однако вывод остается пустым. Я использовал следующий код и соответствующий XPath:

span class="brand-find-useful__count">1</span>

tree = html.fromstring(page) helpfulness = tree.xpath('//span[@class="brand-find-useful__count"]/text()')

Однако, это просто не дает мне вывод, просто пустое значение. Важно отметить, что когда не было дано больших пальцев (полезно), этот промежуток не отображается. Я пытался несколько раз узнать на странице, которая определенно имеет полезное количество, но, к сожалению, я не могу получить егоЯ все еще новичок, но я понятия не имею, где ошибка.

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Вы также можете использовать select, а затем извлечь соответствующий атрибут.

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://www.trustpilot.com/review/www.trivago.co.uk?page=4')
soup = bs(r.content, 'lxml')

for review in soup.select('.review'):
    useful = review.select_one('brand-find-useful-button')
    print(useful[':initial-find-useful-count'])
1 голос
/ 10 октября 2019

Вы используете неправильный xpath , //span[@class="brand-find-useful__count"]/text() не является допустимым xpath, так как он появляется только в том случае, если у вас есть вывод, отображаемый с помощью JavaScript. Вы можете убедиться в этом, просто посмотрев источник страницы в своем браузере (не используя devtools)

view-source:https://www.trustpilot.com/review/www.trivago.co.uk?page=4

Вы также найдете теги сценария с данными json отзывов в view-source Вы можете взять эту строку JSON вместо того, чтобы брать данные из элементов. Я бы оставил это вам проверить.

В приведенном ниже коде показано, как взять подсчет полезности со страницы.

Решение

import requests
from lxml import html

response = requests.get('https://www.trustpilot.com/review/www.trivago.co.uk?page=4')

tree = html.fromstring(response.text)

# fetches all useful elements 
useful = tree.xpath('//brand-find-useful-button')

# loop through each element
for e in useful:
  print(e.get(':initial-find-useful-count'))

Выход

1
1
0
1
0
2
2
1
2
0
1
0
0
1
1
1
1
1
1

Смотрите это в действии здесь .

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