由于项目需求须要查询一些网站的ALEXA排名,百度后获得的方法是,访问http://data.alexa.com/data?cli=10&dat=snbamz&url=%YOURURL%,能够获得以下的XML格式的数据:python
<!-- Need more Alexa data? Find our APIs here: https://aws.amazon.com/alexa/ --> <ALEXA VER="0.9" URL="sina.com/" HOME="0" AID="=" IDN="sina.com/"> <RLS PREFIX="http://" more="0"> <RL HREF="www.china.com/" TITLE="中华网科技公司"/> <RL HREF="www.alibaba.com/" TITLE="Alibaba.com"/> <RL HREF="www.yahoo.com/" TITLE="Yahoo!"/> <RL HREF="www.yahoo.com.cn/" TITLE="雅虎中国 (yahoo.com.cn)"/> <RL HREF="www.tyfo.com/" TITLE="天虎网"/> <RL HREF="www.tom.com/" TITLE="Tom"/> <RL HREF="www.sohu.com/" TITLE="搜狐首页"/> <RL HREF="www.singtao.com/" TITLE="星島日報"/> <RL HREF="www.sina.com.tw/" TITLE="台灣新浪網"/> <RL HREF="www.sina.com.cn/" TITLE="新浪首页"/> </RLS> <SD TITLE="A" FLAGS="" HOST="sina.com"> <TITLE TEXT="sina1.com"/> <OWNER NAME="Sina.Com Technology(china)co., Ltd"/> </SD> <SD> <POPULARITY URL="sina.com/" TEXT="19624" SOURCE="panel"/> <REACH RANK="16868"/> <RANK DELTA="+6598"/> <COUNTRY CODE="US" NAME="United States" RANK="5005"/> </SD> </ALEXA>
其中,<POPULARITY >标签的TEXT属性值正是网站的ALEXA排名。因而就须要在项目中利用xml解析工具提取TEXT属性值。函数
方法以下:工具
Python 标准库包含 SAX 解析器,SAX 用事件驱动模型,经过在解析XML的过程当中触发一个个的事件并调用用户定义的回调函数来处理XML文件。性能
将 XML 数据在内存中解析成一个树,经过对树的操做来操做XML。网站
ElementTree就像一个轻量级的DOM,具备方便友好的API。代码可用性好,速度快,消耗内存少。url
注:因DOM须要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但须要用户实现回调函数(handler)。spa
由于性能缘由选用第三种方法,操做流程以下:code
1.导入ElementTreexml
try: import xml.etree.cElementTree as ET except ImportError: import xml.etree.ElementTree as ET
2.请求网址获取数据对象
try: data = requests.get(url) if data.status_code == 200: # Response格式中提取xml內容 xml_data = data.content else: raise Exception('request alexa rank failed!')
3.从xml数据变量构造ElementTree对象
root = ET.fromstring(xml_data)
4.利用xpath找到元素并提取属性
pop = root.findall('.SD/POPULARITY') if pop: print(pop[0].get('TEXT', None))
5.打完收工。