Очистка данных с использованием Xpath не возвращает значения - PullRequest
0 голосов
/ 14 апреля 2020

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

Выходные данные этого кода - пустой массив :

import urllib
import requests
from lxml import html
url = 'https://www.kickstarter.com/projects/scratchideas/loki-the-ultra-portable-modular-and-robust-camera?ref=category'
page = requests.get(url=url)
tree = html.fromstring(page.content)
pledged = tree.xpath('//*[@id="react-project-header"]/div/div/div[3]/div/div[2]/div[1]/div[2]/span[1]/span/text()')
print("pledged: {}".format(pledged))

Но следующий код возвращает истинную стоимость денег, заложенных в проект:

url = 'https://www.kickstarter.com/projects/254683764/avoseedo-grow-your-own-avocodo-tree-with-ease'
page = requests.get(url=url)
tree = html.fromstring(page.content)
pledged = tree.xpath('//*[@id="content-wrap"]/div[2]/section[1]/div/div/div/div[1]/div/div[2]/div[2]/div[1]/h3/span/text()')
print("pledged: {}".format(pledged))

Итак, мне интересно, в чем разница и почему это так?

1 Ответ

1 голос
/ 14 апреля 2020

Проект AvoSeedo завершен. Кажется, что при загрузке веб-страницы финансируемого проекта залоговая сумма записывается в теле документа.

Для не финансируемого проекта или когда сбор продолжается, сумма денег не может быть найдена в тело. Для динамического рендеринга Javascript используется *1011*.

Чтобы получить сумму денег, обещанную в проекте LOKI, потребуется Selenium. Или мы можем использовать обходной путь. Этот XPath должен получить сумму денег, обещанную для проекта LOKI:

normalize-space(substring-before(substring-after(//script[contains(.,"pledged_amount")],"pledged_amount":"),",&quot"))

Выход: 15177

РЕДАКТИРОВАТЬ: 15177 € или 20073 $ (в зависимости от вашего региона)

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