Получите содержимое общедоступного веб — сайта с помощью Python

#python #excel #vba #web #screen-scraping

Вопрос:

Я столкнулся с настоящей загадкой:

VBA

  .send "land_abk=shamp;ger_name=Norderstedtamp;order_by=2amp;ger_id=X1526"
 

Питон

 headers = {'User-Agent': 'python-requests/2.24.0', 'Accept-Encoding':'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive','Referer': 'https://url'}
 

Щелчок по ссылке ведет к последнему ребенку-ULR и к деталям. Я действительно все пытался получить данные с 3. сайта, с помощью POST, GET, VBA, PYTHON-реферера, без успеха. Я просто получаю ответ заголовка 200 и содержимое заголовка, но ни одной буквы из исходного кода, просто ошибка без какого-либо описания. Единственный способ открыть эту 3-ю страницу без ошибок и с содержимым-это перейти по ссылке на 2-й странице. Это полностью общедоступный веб-сайт, нет причин для создания реферера или какого-либо другого шифрования. Так в чем же проблема и как ее решить?

Ответ №1:

Ваши заголовки должны работать нормально, если вы включаете правильного реферера. Возможно, в вашем способе получения html-кода что-то не так. Это работает для меня:

Использование urllib3

 import urllib3
from bs4 import BeautifulSoup

URL = "https://www.zvg-portal.de/index.php?button=showZvgamp;zvg_id=755amp;land_abk=sh"
headers = {
    "Referer": "https://www.zvg-portal.de/index.php?button=Suchen",
}

http = urllib3.PoolManager()
response = http.request("GET", URL, headers=headers)
html = response.data.decode("ISO-8859-1")

soup = BeautifulSoup(html, "lxml")
print(soup.select_one("tr td b").text)
# >> 0061 K 0012/ 2019
 

Использование запросов

 import requests

URL = "https://www.zvg-portal.de/index.php?button=showZvgamp;zvg_id=755amp;land_abk=sh"

headers = {
    "Referer": "https://www.zvg-portal.de/index.php?button=Suchen",
}
html = requests.get(URL, headers=headers).text

print("Versteigerung im Wege der Zwangsvollstreckung" in html)
# >> True
 

Использование Python 2:

 import urllib2

URL = "https://www.zvg-portal.de/index.php?button=showZvgamp;zvg_id=755amp;land_abk=sh"

req = urllib2.Request(URL)
req.add_header("Referer", "https://www.zvg-portal.de/index.php?button=Suchen")
html = urllib2.urlopen(req).read()

print("Versteigerung im Wege der Zwangsvollstreckung" in html)
# >> True
 

Комментарии:

1. ‘суп = БС(Р.контент, ‘библиотека lxml’)’ ы.заголовки = заголовки печатать(суп.select_one(‘тр тд б’).текста)’ это происходит: (AttributeError: ‘NoneType’ объект не имеет атрибута «текст») доступ к данным заголовка можно с помощью VBA, но не содержание!

2. На самом деле вы не используете свои пользовательские заголовки r = s.post(...) . Должно быть: r = s.post( "https://www.zvg-portal.de/index.php?button=showZvgamp;zvg_id=755amp;land_abk=sh", headers=headers)

3. Я использую Python 3.9.4 с urllib3. (БЕЗДЕЙСТВИЕ: Ошибка атрибута: модуль «urllib3» не имеет атрибута «Запрос») » Невозможно установить urllib или urllib2.

4. Я добавил пример с использованием urllib3. В следующий раз, пожалуйста, ознакомьтесь с документацией: urllib3.readthedocs.io/en/latest/user-guide.html

5. Не за что! Большинство браузеров не предоставляют простого способа подделать заголовок ссылки. Но вы также можете попробовать загрузить PDF-файл с помощью Python: stackabuse.com/download-files-with-python