2015-11-24 60 views
1

我正在嘗試創建一個Python應用程序,該應用程序使用lxml從網站上刮取HTML並收集這些國家及其相應的首都。我從以下網址獲取HTML:http://www.manythings.org/vocabulary/lists/2/words.php?f=countries_and_capitals,我無法弄清楚如何獲得所有國家,以便我可以將它們放入列表中。這是我到目前爲止有:如何爲HTML元素找到所需的XPath?

from lxml import html 
import requests 

page = requests.get("http://www.manythings.org/vocabulary/lists/2/words.php?f=countries_and_capitals") 
tree = html.fromstring(page.content) 

countries = tree.xpath('//*[@id="yui-main"]/div/div[2]/div/div[1]/ul/li[1]/b') 
capitals = tree.xpath('//*[@id="yui-main"]/div/div[2]/div/div[1]/ul/li[1]/i') 

print 'Countries: ', countries 
print 'Capitals: ', capitals 

眼下輸出是兩個空列表,我相當肯定這是因爲XPath的是不正確的,但我不熟悉不夠使用XPath也不HTML糾正它。我非常樂意接受答案,而不是提供答案。

回答

3

這是一個有趣的問題。發現你的X-Path和HTML是正確的 - 使用Chrome調試工具選擇適當的元素運行它們。但是,當通過python交互式shell進行調試時,問題變得明顯--div實際上並不存在。

網頁使用JavaScript動態更新 - 內容在運行時加載到yui-main div。 xml解析器不會執行JavaScript,所以您的解析樹永遠不會有yui-main div。

我確認了這一點,只需關閉瀏覽器中的JavaScript並訪問該頁面即可。

是微不足道的拿出一個XPath選擇算賬:

countries = tree.xpath('//li/b/text()') 
capitals = tree.xpath('//li/i/text()')