由於項目需求須要查詢一些網站的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.打完收工。