Чтобы дать обзор проблемы, у меня есть список пользователей 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
Если он иногда работает, а в других случаях он не связан с «urllib» и «запросами» *, вы можете быть уверены, что здесь находится не сервер, а ваш код. –
Вы можете увидеть, был ли запрос перенаправлен путем проверки 'url.history', и вы можете проверить, не является ли' url.url' тем же. –
Сервер Twitter перенаправляется только на * один раз *; это, вероятно, связано с вашим IP-адресом. После этого перенаправления Twitter учитывает ваш браузер с кэшированием перенаправления. –