Ошибка HTTP 403. Запрещено при получении HTML-источника на сервере. - PullRequest
0 голосов
/ 21 мая 2018

Когда я запускаю код локально и пытаюсь извлечь данные из URL, а затем проанализировать его, чтобы текст работал все правильно.

Когда я запускаю точно такой же код на удаленном сервере и пытаюсь извлечь данные из URL-адреса ошибки HTTP Error 403: Forbidden происходит

Ответы на вопросы: Ошибка HTTP 403 в Python 3 Web Scraping, urllib2.HTTPError: Ошибка HTTP 403: запрещено помогло мне, когда я попытался запустить его локально, и все работает нормально.

Знаете ли вы, что может отличаться при извлечении данных изудаленный сервер, в то время как код одинаков (локально и на сервере) и способ выполнения кода одинаков, но результат абсолютно другой?

URL-адрес, который я хочу получить: url=https://bithumb.cafe/notice

Код, который я пытался использовать для извлечения данных (если он работает, второй нет)

try:
    request = urllib.request.Request(url)

    request.add_header('User-Agent', 'cheese')
    logger.info("request: {}".format(request))

    content = urllib.request.urlopen(request).read()
    logger.info('content: {}'.format(content))

    decoded = content.decode('utf-8')
    logger.info('content_decoded: {}'.format(decoded))

    return decoded
except Exception as e:
    logger.error('failed with error message: {}'.format(e))
    return ''`

секундаспособ извлечения данных (также работает локально, но на удаленном сервере нет):

class AppURLopener(urllib.request.FancyURLopener):
    version = "Mozilla/5.0"

метод:

try:
    opener = AppURLopener()
    response = opener.open(url)
    logger.info("request response: {}. response type: {}. response_dict: {}"
                .format(response, type(response), response.__dict__))
    html_response = response.read()
    logger.info("html_Response".format(html_response))
    encoding = response.headers.get_content_charset('utf-8')
    decoded_html = html_response.decode(encoding)
    logger.info('content_decoded: {}'.format(decoded_html))
    return decoded_html
except Exception as e:
    logger.error('failed with error message: {}'.format(e))
    return ''
...