今天我正在使用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/
它只返回一个单词“Okay”而不是XML字符串..问题是什么?!
答案 0 :(得分:3)
这可能是您要寻找的
from bs4 import BeautifulSoup
import urllib.request
url='wikipedia.com'
rank_str =BeautifulSoup(urllib.request.urlopen("https://www.alexa.com/minisiteinfo/" +url),'html.parser').table.a.get_text()
rank_int=int(rank_str.replace(',',''))
print(rank_int)
答案 1 :(得分:0)
当我在Chrome和Postman中尝试时,这个链接似乎对我很好。你是说正则表达式正在回归&#34;好的&#34;?
该链接的响应也不是JSON,而是XML。我建议您使用XML module
,而不是使用正则表达式来解析XML编辑:我只是尝试了你的代码,它工作,虽然我需要将响应转换为字符串(它作为一个类似字节的对象),然后传递给正则表达式。
答案 2 :(得分:0)
那很好,意味着您运行脚本的IP已被Alexa列入黑名单。
如果从其他IP运行它,它将起作用。话虽如此,我不知道什么速率/限制会导致IP被列入黑名单
答案 3 :(得分:0)
Alexa排名已移至新位置,现在通过付费API-https://awis.alexa.com/developer-guide提供。说那不贵-https://aws.amazon.com/marketplace/pp/B07Q71HJ3H