Почему я не могу очистить Ind iegogo, хотя я использую правильный xpath? - PullRequest
0 голосов
/ 27 апреля 2020

Вот код, который я использую для очистки проекта Ind iegogo, но я ничего не получаю:

url = 'https://www.indiegogo.com/projects/red-dot-watch'
page = requests.get(url=url)
tree = html.fromstring(page.content)
pledged = tree.xpath('//*[@id="main"]/div/div[2]/div/div/div[16]/div[1]/span[1]/span/span[2]/span[1]/text()')
if(len(pledged) > 0):
    print(pledged[0])
else:
    print("MISSING") 

Ответы [ 2 ]

2 голосов
/ 27 апреля 2020

Как сказал @Ron, Ind iegogo рендерит свое содержимое в основном через JavaScript, и простой запрос страницы с запросами этого не делает.

К счастью, однако, структура страниц Ind iegogo может упростить вам процесс очистки; есть оператор gon.campaign={...} JavaScript, который, кажется, содержит данные, которые вы ищете. Вы должны иметь возможность использовать регулярное выражение в ключе gon.campaign=(\{.+\});gon для извлечения данных, а затем проанализировать его как JSON.

РЕДАКТИРОВАТЬ: Вот пример - должен работать до Ind iegogo решает изменить свое расположение.

import re
import requests
import json

url = 'https://www.indiegogo.com/projects/red-dot-watch'
resp = requests.get(url)
resp.raise_for_status()
m = re.search(r'gon\.campaign=(\{.+?\});gon', resp.text)
if m:
    data = json.loads(m.group(1))
else:
    data = {}

print(data.get('balance'), '/', data.get('target_goal'))
2 голосов
/ 27 апреля 2020

Поскольку ваш скрипт не анализирует JS, то вы не видите ту же веб-страницу, которую создали в браузере.

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