2010-03-07 124 views
10

我目前正在嘗試抓取格式相當差的HTML網站(經常缺少結束標籤,不使用類或ID,因此很難直接訪問所需的元素等等)。 )。我一直在使用BeautifulSoup並取得了一些成功,但每過一段時間(雖然很少),我都遇到了BeautifulSoup創建HTML樹的頁面,與Firefox或Webkit有點不同。雖然這是可以理解的,因爲HTML的格式不明確,如果我能夠獲得與Firefox或Webkit產生的相同的分析樹,我將能夠更輕鬆地解析事情。 這些問題通常類似於網站打開<b>標記兩次,當BeautifulSoup看到第二個<b>標記時,它會立即關閉第一個標記,而Firefox和Webkit嵌套<b>標記。使用Python進行網頁抓取

是否有Python的網頁抓取庫(甚至任何其他語言(我越來越絕望)),可以重現由Firefox或WebKit生成的解析樹(或者至少在不明確的情況下比BeautifulSoup更接近) 。

+0

爲什麼不使用WebKit的本身? Webkit是開源的。是的,需要一點時間才能習慣。 – 2010-03-07 18:12:28

+1

你有沒有告訴beautifulsoup組?他們可能對像你這樣的角落很感興趣http://groups.google.com/group/beautifulsoup – 2010-03-07 21:31:27

+0

問了好多次...... – 2010-03-08 00:54:10

回答

10

使用BeautifulSoup爲一棵樹建設者html5lib

from html5lib import HTMLParser, treebuilders 

parser = HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup")) 

text = "a<b>b<b>c" 
soup = parser.parse(text) 
print soup.prettify() 

輸出:

<html> 
<head> 
</head> 
<body> 
    a 
    <b> 
    b 
    <b> 
    c 
    </b> 
    </b> 
</body> 
</html> 
1

那麼,WebKit是開源的,所以你可以使用它自己的解析器(在WebCore的成分),如果任何語言是可以接受的

3

你試過scrapy

Scrapy是一個快速的高級別屏幕 刮網頁抓取框架, 用來抓取網站,並從自己的網頁中提取 結構化數據。它可以用於從數據挖掘到 監控和自動化測試的廣泛的 目的。

0

從似乎ICantBelieveItsBeautifulSoup解析器是你想要的文件:

ICantBelieveItsBeautifulSoup也是BeautifulSoup的 子類。它有HTML 啓發式更符合HTML標準 ,但忽略如何在現實世界中使用HTML。對於 例如,它是有效的HTML窩<乙> 標籤,但在現實世界中的嵌套 <乙>標籤幾乎總是意味着該 作者忘了關第一<乙> 標籤。如果遇到某人 實際上嵌套<B>標籤,那麼您可以使用ICantBelieveItsBeautifulSoup 。

0

這個看起來對我好,我用它自己:鏈接[http://code.google.com/p/webscraping/]

1

可以使用lxml的解析器,在beautifulsoup,和您使用xpath在未格式化的html頁面中查找數據,您可以在使用螢火蟲檢查元素時複製xpath。

你可以看看這個教程: http://www.youtube.com/watch?v=PgWfF-Ut0zM