API рейтинга сайта Alexa - PullRequest
0 голосов
/ 10 мая 2018

Сегодня я работал над Alexa API, чтобы получить рейтинг популярности сайтов с помощью этого кода:

import urllib.request, sys, re

site = 'https://stackoverflow.com/questions/'
xml = urllib.request.urlopen('http://data.alexa.com/data?cli=10&dat=s&url=%s'%site).read()
try: rank = int(re.search(r'<POPULARITY[^>]*TEXT="(\d+)"', xml).groups()[0])
except: rank = -1
print('Your rank for %s is %d!\n' % (site, rank))

Он работал отлично, но внезапно остановился! Я проверил ссылку API вручную:

http://data.alexa.com/data?cli=10&dat=s&url=https://stackoverflow.com/questions/

и он просто возвращает слово «Хорошо», а не строку XML. В чем проблема?!

Ответы [ 2 ]

0 голосов
/ 26 июля 2018

Этот okey означает, что IP, с которого вы запускаете скрипт, был занесен в черный список alexa.

Если вы запустите его с другого IP, он будет работать. Сказав, что я понятия не имею, какая скорость / лимит приведет к тому, что IP-адреса будут внесены в черный список

0 голосов
/ 10 мая 2018

Мне кажется, что эта ссылка работает нормально, когда я пробовал ее в Chrome и в Postman. Вы говорите, что регулярное выражение возвращает "Хорошо"?

Также ответ по этой ссылке не в формате JSON, это XML. Вместо использования регулярного выражения для разбора XML, я бы предложил использовать модуль XML

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

...