2016-07-27 62 views
-1

我想解析一個網頁以檢索一些關於它的信息(我的確切問題是檢索此列表中的所有項目:http://www.computerhope.com/vdef.htm)。在Python中解析網頁的問題

但是,我無法弄清楚如何去做。

很多在互聯網上開始這個教程(簡體): html5lib.parse(urlopen("http://www.computerhope.com/vdef.htm"))

但在那之後,沒有教程解釋我是如何可以瀏覽文件,去我尋找HTML部分。

其他一些教程解釋瞭如何使用CSSSelector來做到這一點,但所有教程不是以網頁開頭,而是以字符串代替(例如:http://lxml.de/cssselect.html)。

所以我試圖創建與使用本網頁中的樹: fromstring(urlopen("http://www.computerhope.com/vdef.htm").read()) 但我得到這個錯誤: lxml.etree.XMLSyntaxError: Specification mandate value for attribute itemscope, line 3, column 28。這個錯誤是由於有一個屬性沒有指定(例如<input attribute></input>),但由於我不控制網頁,我無法繞過它。

因此,這裏有可能解決我的問題,幾個問題:

  • 我如何可以瀏覽一棵樹?
  • 有沒有辦法讓解析器不那麼嚴格?

謝謝!

+0

尋找XPath。這是解析任何類似XML的結構的強大工具。 –

+0

你爲什麼使用etree來解析html? –

回答

1

嘗試使用美麗的湯,它有一些優秀的功能,並使得在Python中的解析非常容易。在

查看他們的文檔的https://www.crummy.com/software/BeautifulSoup/bs4/doc/

編輯:

由於@mzjn指出的那樣,我並沒有包括在回答代碼示例(這是向下票的原因),因爲我認爲OP必須自己弄明白。我想我可以幫助他,所以這是它打印出列表中的所有項目的代碼

from bs4 import BeautifulSoup 
import requests 

page = requests.get('http://www.computerhope.com/vdef.htm') 
soup = BeautifulSoup(page.text) 
tables = soup.findChildren('table') 
for i in (tables[0].findAll('a')): 
    print(i.text) 

,我希望OP將作出相應調整。

至少現在我希望我的答案能夠得到提高。

+0

我可以知道爲什麼倒票嗎?如果你不喜歡圖書館並不意味着我的回答是錯誤的,那僅僅意味着我們的觀點不同。 – Bharat

+2

我沒有downvote,但我想你得到downvote,因爲這是一個只有鏈接的答案,沒有任何細節實際上回答了問題。 – mzjn