Есть другие HTTP-запросы, которые заполняют веб-страницу.Хороший способ увидеть это с помощью инспектора, предоставленного в веб-браузере.В Chrome эти запросы отображаются на вкладке «Сеть» в инспекторе.
Запросы следующие:
Похоже, что каждый возвращает текст JSON с информацией, которую вы ищете (публикации и гиперссылки на документы), так что вы можетепросто создайте индивидуальный запрос для каждого из этих URL-адресов и получите доступ к возвращенному JSON следующим образом:
import json
source = requests.get(new_url).text
# json.loads returns a Python dictionary
data = json.loads(source)
for publication in data['notes']:
publication_info = publication['_bibtex']
url = publication_info.split('\nurl={')[1].split('}')[0]
Элемент, содержащий URL-адрес для каждой публикации, довольно сложно проанализировать, поскольку в нем есть символы, которые не допускаются в словаре.имена (то есть '@'), но это решение должно работать.
Обратите внимание, что я не проверял это решение, поэтому могут быть некоторые ошибки, но основная логика решения должна быть правильной.
В качестве альтернативы:
Вы можете использовать Splash , который используется для отображения страниц на основе Javascript.Вы можете довольно легко запустить Splash в Docker и просто отправлять HTTP-запросы в контейнер Splash, который будет возвращать HTML, который выглядит как веб-страница, отображаемая в веб-браузере.
Хотя это звучит слишком сложно, на самом деле это довольно сложно.довольно прост в настройке, так как вам вообще не нужно изменять образ Docker, поэтому вам не нужно предварительное знание Docker для работы.Для запуска локального сервера Splash требуется всего одна строка: docker run -p 8050:8050 -p 5023:5023 scrapinghub/splash
Затем вы просто изменяете любые существующие запросы, которые есть в вашем коде Python, вместо маршрутизации на заставку:
т.е. http://example.com/
становится
http://localhost:8050/render.html?url=http://example.com/