Python Запросы: Нет прав доступа к URL и ошибка Юникода - PullRequest
0 голосов
/ 23 апреля 2020

Моя цель - поковыряться на сайте macys.com, и я не могу получить доступ. Следующий код является моей первоначальной попыткой.

Попытка 1

from bs4 import BeautifulSoup
import requests

source = requests.get('https://www.macys.com').text
soup = BeautifulSoup(source, 'lxml')

print(soup)

Это привело к следующей ошибке.

<html><head>
<title>Access Denied</title>
</head><body>
<h1>Access Denied</h1>
You don't have permission to access the requested URL on this server.
<p>Reference: 18.c503d417.1587673952.4f27a98</p>
</body>
</html>

После нахождения аналога проблемы на stackoverflow, я вижу, наиболее распространенным решением является добавление заголовка. Вот основной код этой попытки.

Попытка 2

url = 'https://www.macys.com'
headers = {'User-agent': 'Mozilla/5.0'}

res = requests.get(url, headers=headers)

soup = BeautifulSoup(res.content, 'lxml')

print(soup)

Вот последнее сообщение об ошибке, которое я получил. Изучив сайт, я все еще не уверен, как поступить.

UnicodeEncodeError: 'charmap' codec can't encode character '\x92' in position 586833: character maps to <undefined>

Я очень интро, поэтому я ценю любые идеи. Мне также очень любопытно, почему у меня нет разрешений для сайта Macys, так как тестирование других сайтов работает нормально.

1 Ответ

0 голосов
/ 28 апреля 2020

Я попробовал ваш код Попытка 2 , и он прекрасно работает для меня.

Попробуйте установить аргумент from_encoding BeautifulSoup в utf-8, например:

url = 'https://www.macys.com'
headers = {'User-agent': 'Mozilla/5.0'}

res = requests.get(url, headers=headers)

soup = BeautifulSoup(res.content, 'lxml', from_encoding='utf-8')

print(soup)

Мне также просто любопытно, почему у меня нет разрешений для сайта Macys, так как тестирование других сайтов работает нормально.

Это то, что администраторы Macy сделали для предотвращения боты от доступа к их сайту. Однако это чрезвычайно тривиальная форма защиты, поскольку вам нужно всего лишь изменить заголовок user-agent на что-то типичное.

...