2013-04-05 2 views
0

Чтобы дать обзор проблемы, у меня есть список пользователей Twitter «screen_names», и я хочу проверить, являются ли они заблокированными пользователями или нет. Я не хочу использовать API поиска twitter, чтобы избежать проблемы с ограничениями скорости (список довольно большой). Поэтому я пытаюсь использовать кластер компьютеров для маркировки моего набора данных (если учетная запись в моей базе данных приостановлена ​​или нет).urlib & requests не удается «иногда» получить окончательный URL-адрес

Если учетная запись приостановлена ​​Twitter и вы пытаетесь получить доступ к ним через ссылку http://www.twitter/screen_name вы получите перенаправлены https://twitter.com/account/suspended

Я попытался захватить это поведение, используя Python 2.7 с urlib использованием методы geturl(). Он работает, но не является надежным (я не получаю одинаковых результатов по одной и той же ссылке). Я тестировал его на той же учетной записи, но иногда он возвращает https://twitter.com/account/suspended, а иногда и возвращает его http://www.twitter/screen_name

Та же проблема возникает с запросами.

Мой код:

import requests 
from lxml import html 
screen_name = 'IaMaGuyGetIt' 
account_url = "https://twitter.com/"+screen_name 
url = requests.get(account_url) 
print url.url 
req = urllib.urlopen(url.url).read() 
page = html.fromstring(req) 
for heading in page.xpath("//h1"): 
    if heading.text == 'Account suspended': 
     print True 
+0

Если он иногда работает, а в других случаях он не связан с «urllib» и «запросами» *, вы можете быть уверены, что здесь находится не сервер, а ваш код. –

+0

Вы можете увидеть, был ли запрос перенаправлен путем проверки 'url.history', и вы можете проверить, не является ли' url.url' тем же. –

+0

Сервер Twitter перенаправляется только на * один раз *; это, вероятно, связано с вашим IP-адресом. После этого перенаправления Twitter учитывает ваш браузер с кэшированием перенаправления. –

ответ

1

Сервер твиттер только служит вам 302 редиректа один раз; после этого он предположит, что ваш браузер кэшировал перенаправление.

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

r = requests.get(account_url) 
>>> r.url 
u'https://twitter.com/IaMaGuyGetIt' 
>>> r.text 
u'<html><body>You are being <a href="https://twitter.com/account/suspended">redirected</a>.</body></html>' 

Посмотрите на этот точный текст.

Смежные вопросы