Как дождаться загрузки страницы, прежде чем получать данные с request.get в python и без использования API - PullRequest
0 голосов
/ 25 апреля 2019

Я использую Python и запрашиваю библиотеку для проверки веб-страниц.У меня проблема с загрузкой страницы, я хотел бы подождать request.get (), чтобы получить результат.

Я видел некоторых людей с той же «проблемой», которую они решили с помощью Selenium, но я не хочу использовать другой API.Мне интересно, если это возможно, используя только urllib, urllib2 или запросы.

Я пытался поместить time.sleep () в метод get, это не сработало.Кажется, мне нужно найти, где веб-сайт получает данные, прежде чем показывать их, но я не могу их найти.

import requests

def search():
        url= 'https://academic.microsoft.com/search?q=machine%20learning'
        mySession = requests.Session()
        response = mySession.get(url)
        myResponse = response.text

Ответом является html-код страницы загрузки (вы можете увидеть ее, перейдя по ссылке в коде) с блоками загрузки, но мне нужно получить результаты исследования.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Этот сайт делает другие запросы и использует JavaScript для его отображения.Вы не можете выполнить JavaScript с requests.Вот почему некоторые люди используют Selenium.

https://academic.microsoft.com/search?q=machine%20learning не предназначен для использования без браузера.

Если вам нужны данные конкретно от academic.microsoft.com, используйте их API.

import requests

url = 'https://academic.microsoft.com/api/search'

data = {"query": "machine learning",
        "queryExpression": "",
        "filters": [],
        "orderBy": None,
        "skip": 0,
        "sortAscending": True,
        "take": 10}

r = requests.post(url=url, json=data)

result = r.json()

Вы получите данные в хорошем формате и просты в использовании.

0 голосов
/ 25 апреля 2019

requests не может получить загруженные элементы из ajax.См. это объяснение от w3schools.com .

Чтение данных с веб-сервера - после загрузки веб-страницы

Единственное requests do - загрузить html, но он не интерпретирует код javascript и поэтому не может загружать элементы, которые обычно загружаются через ajax в веб-браузер (или с помощью Selenium).

...