Web Scraper возвращает пустой HTML-файл во время работы браузера Chrome;уже попробовал UserAgent - PullRequest
0 голосов
/ 19 января 2019

Я новичок, только изучающий Python, однако для нашей дипломной работы нам нужны данные со следующего веб-сайта (это только муниципальные финансовые данные правительства Латвии):

https://e2.kase.gov.lv/pub5.5_pasv/code/pub.php?module=pub

Пока я сделал следующее:

  1. Разочаровался, что это не простая HTML-страница, и у нее есть этот «интерактивный» заголовок (извините, мои знания очень ограничены в том, как с ней взаимодействовать).
  2. Используя инструменты Chrome dev и вкладку «Сеть», я обнаружил, что могу запустить следующий URL-адрес, чтобы «запросить» нужный мне период, муниципалитет, финансовый отчет и т. Д .: https://e2.kase.gov.lv/pub5.5_pasv/code/ajax.php?module=pub&job=getDoc&period_id=1626&org_id=2542&blank_id=200079&currency_id=2&editable=0&type=HTML
  3. Создан базовый код Python для получения этого URL HTML (см. Ниже).
  4. Обнаружено, что он возвращает пустые данные. Я подумал, что это ошибка, однако код ответа - 200, что, как я понимаю, означает, что он был успешным.
  5. Протестировал этот URL в разных браузерах, и о чудо. Он работает в Chrome, однако в Microsoft Edge возвращает пустую пустую страницу.
  6. Где-то читал, что мне нужно «представиться» серверу и попытаться использовать заголовки и User-Agent как вручную, так и с помощью библиотеки fake_useragent с Chrome User Agent. И все же это не работает.
import requests
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
r = requests.get("https://e2.kase.gov.lv/pub5.5_pasv/code/ajax.php?module=pub&job=getDoc&period_id=1626&org_id=2542&blank_id=200079&currency_id=2&editable=1&type=HTML", headers=headers)
print(r.text)

Так что я застрял в пункте 6. URL-адрес хорошо работает в Chrome, не работает в Edge. И кажется, что мой код Python получает ту же пустую страницу, что и браузер Edge - без каких-либо данных.

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

РЕДАКТИРОВАТЬ: Извините, ребята, я обнаружил, что невозможно получить доступ к этому сайту из-за пределов Латвии, однако я нашел решение (см. Ниже).

1 Ответ

0 голосов
/ 24 января 2019

Решил проблему.

Ранее при имитации браузера я использовал только следующие заголовки:

headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Mobile Safari/537.36'
}

Оказалось, что мне нужно было включить все заголовки ответа, отправленные на сервер длязапрос (найден через Chrome dev tools), например:

headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'en-US,en;q=0.9',
    'Connection': 'keep-alive',
    'Cookie': 'Cookie; Cookie',
    'DNT': '1',
    'Host': 'e2.kase.gov.lv',
    'Referer': 'https://e2.kase.gov.lv/pub5.5_pasv/code/pub.php?module=pub',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Mobile Safari/537.36'
}
...