Суп не загружает все в HTML Python - PullRequest
0 голосов
/ 11 апреля 2020

Я использую BeautifulSoup (bs4) для извлечения данных из бумажного URL SSRN, вот URL для ссылки https://papers.ssrn.com/sol3/papers.cfm?abstract_id=962461. Я хочу получить данные в виджете метрик PlumX в правой части страницы. Если вы наведите указатель мыши на «Цитаты: 95», я хотел бы извлечь 95. Это в HTML as:

`<li class="plx-citation">
       <span class="ppp-label">Citation Indexes: </span>
       <span class="ppp-count">95</span>
</li>`

Я пробовал много подходов в Python, но ни один из кажется, что они работают:

1) Извлечение информации по классу

soup.find("li", {"class": "ppp-count"})

Вывод None

2) Извлечение информации по xpath, используя lxml вместо супа:

`tree = html.fromstring(paper_url.content)
 r = tree.xpath('//*[@id="maincontent"]/div[2]/div[2]/div/div[2]/div/div[2]/div/div/div/ul/li[1]/ul/li/span[2]')`

Вывод []

3) Я распечатал весь суп и l xml и данные plumX просто исчезает (этих ветвей HTML там нет, на самом деле в цитатах тоже нет HTML).

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

1 Ответ

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

На самом деле основная причина, по которой вы не можете извлечь нужное значение, потому что widget загружается через JavaScript, который выбирает данные из API.

import requests
import json


params = {
    'type': 'ssrn_id',
    'id': '962461',
    'site': 'ssrn',
    'href': 'https://plu.mx/ssrn/a/?ssrn_id=962461',
    'ref': '',
    'pageToken': 'f0399e1a-c031-0c64-6619-423f-7ebf45fa0416',
    'isElsWidget': 'false'
}


def main(url):
    r = requests.get(url, params=params).json()
    print(r['statistics']['Citations'][0]['count'])
    # print(json.dumps(r, indent=4)) for nice view :)


main("https://api.plu.mx/widget/other/artifact")

Выход:

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