Urllib2 Python не работает на некоторых сайтах - PullRequest
2 голосов
/ 03 апреля 2010

Я обнаружил, что вы не можете читать с некоторых сайтов, используя Python urllib2 (или urllib). Пример ...

urllib2.urlopen("http://www.dafont.com/").read()
# Returns ''

Эти сайты работают, когда вы заходите на сайт с помощью браузера. Я даже могу очистить их с помощью PHP (не пробовал другие языки). Я видел другие сайты с такой же проблемой - но не могу вспомнить URL в данный момент.

Мои вопросы ...

  1. В чем причина этой проблемы?
  2. Есть ли обходные пути?

Ответы [ 3 ]

6 голосов
/ 03 апреля 2010

Я полагаю, что он заблокирован User-Agent. Вы можете изменить User-Agent, используя следующий пример кода:

USERAGENT = 'something'
HEADERS = {'User-Agent': USERAGENT}

req = urllib2.Request(URL_HERE, headers=HEADERS)
f = urllib2.urlopen(req)
s = f.read()
f.close()
3 голосов
/ 03 апреля 2010

Попробуйте установить другой пользовательский агент. Проверьте ответы в по этой ссылке .

0 голосов
/ 03 апреля 2010

Я парень, который разместил вопрос.У меня есть некоторые подозрения - но я не уверен в них - поэтому я разместил вопрос здесь.

В чем причина этой проблемы?

Я думаю, это связано с тем, что хост блокирует библиотеку urllibиспользуя robot.txt или htaccess.Но не уверен в этом.Даже не уверен, что это возможно.

Есть ли обходной путь для этой проблемы?

Если вы работаете в Unix, это будет работать ...

contents = commands.getoutput("curl -s '"+url+"'")
...