LINUX.ORG.RU

urllib и 403 при открытии сайта в зоне .ru


0

2

Использую python 3.x и urllib.request

 
from bs4 import BeautifulSoup
import urllib.request

def forum(request):
    with urllib.request.urlopen("http://www.google.ru") as url:
        s = url.read().decode().encode('utf-8')
    soup = BeautifulSoup(s)
    return HttpResponse(str(soup))

HTTP Error 403: Forbidden

Если же заменить google.ru на google.com то всё ОК. Т.е. если доме в зоне .ru то ошибка. Почему?


Это санкции.

anonymous
()

Хотя похоже проблема не в домене, а в содержимом. Если кириллица присутствует в содержимом, то ошибка тогда. Ибо например http://forum.ru-board.com/ тоже не открывает.

mrXorg
() автор топика
Ответ на: комментарий от mrXorg

Не удивительно, питон даже в комментариях не умеет юникод без костылей

disarmer ★★★
()

Питон во всей красе.

xtraeft ★★☆☆
()

Хмм. А почему необходимо .decode().encode('utf-8') ? Для того чтобы результат точно был юникодным?

У меня если вот так:

import urllib.request

with urllib.request.urlopen("http://www.google.ru") as url:
    s = url.read().decode().encode('utf-8')
print(s)

то говорит: «UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcf in position 102: invalid continuation byte».

А без decode().encode('utf-8'), все нормально.

zinfandel ★★
()
Последнее исправление: zinfandel (всего исправлений: 1)

В общем проблема была не в кириллице. А в том что сервер не пускал другой сервер, т.к. думал что я - бот, хакер, враг, маньяк. Пришлось указать агента и всё стало ок.

opener = urllib.request.build_opener()
    opener.addheaders = [('User-agent', 'Mozilla/5.0')]
    f = opener.open('http://www.yandex.ru')
    f = f.read() 
mrXorg
() автор топика
Ответ на: комментарий от xtraeft

Да я их уже кучу переиспользовал. Например:

opener.addheaders=[
                    ('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)'),
                    ('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'),
                    ('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.3'),
                    ('Accept-Encoding', 'none'),
                    ('Accept-Language', 'en-US,en;q=0.8'),
                    ('Connection', 'keep-alive'),
                ]
Походу проблема в бесплатном хостинге, который попал в «черный список» из-за всяких доров и парсеров. Другие тоже так думают - https://www.pythonanywhere.com/forums/topic/855/ Значит заголовками не обойтись. Нужна прокся!?

mrXorg
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.