2009-10-13 32 views
2

我目前有一些Ruby代碼用來刮一些網站。我使用的是Ruby,因爲那時我正在使用Ruby on Rails作爲網站,而且這很有意義。我應該用什麼純粹的Python庫來抓取一個網站?

現在我試圖將其移交給Google App Engine,並且一直卡住。

我已經將Python Mechanize移植到Google App Engine中,但它不支持使用XPATH進行DOM檢查。

我試過了內建的ElementTree,但它在我碰到'& mdash'時給它的第一個HTML blob上嗆了。

我一直試圖在那裏破解ElementTree,還是嘗試使用別的東西?

感謝, 馬克

+2

所有這些的重複:http://stackoverflow.com/search?q=%5Bpython%5D+html+parse – 2009-10-13 22:02:14

+0

我可能必須去scrapy,我可以使用XPath與美麗的湯? – MStodd 2009-10-15 05:53:58

+0

其實我可能不得不一起去,因爲我不確定美麗的湯是否適用於xpath,它看起來像scrapy有二元依賴。 – MStodd 2009-10-15 06:00:50

回答

11

美味的湯。

+0

出於某種原因,我認爲這是純粹的Python,但它看起來像它。我會檢查出來的。 – MStodd 2009-10-13 22:11:07

+2

其次。美麗的湯是不可思議的。 – 2009-10-13 22:21:37

+0

美麗的湯+1。刮是它的全部目的。 – steveha 2009-10-13 23:19:22

6

LXML - 100X優於ElementTree的

+3

lxml是C庫的包裝,因此它不能在appengine上運行。 – 2009-10-13 22:44:31

+0

它也會在嚴格形成的HTML上同樣困難。 – jcdyer 2009-10-13 23:38:39

+5

jcd - 不正確。 lxml包含幾個用於解析HTML的選項,包括使用BeautifulSoup作爲解析器後端 - http://codespeak.net/lxml/elementsoup.html – 2009-10-14 04:16:10

4

還有scrapy,可能更合你的胃口。

+0

+1 to scrapy。工作得很好。 – nosklo 2009-10-14 14:28:37

+0

它確實需要lxml或libxml2強硬 – sleeplessnerd 2011-08-16 03:47:30

0

有許多的使用pyparsing編寫網頁刮刀的例子,如this one(摘錄yahoo.com所有URL鏈接)和this one(用於提取NIST NTP服務器地址)。一定要使用pyparsing幫助器方法makeHTMLTags,而不是僅僅手工編碼"<" + Literal(tagname) + ">" - makeHTMLTags創建了一個非常健壯的解析器,可容納額外空間,大小寫不一致,意外屬性,具有各種引用樣式的屬性值等等。 Pyparsing還可以讓您更好地控制特殊的語法問題,例如自定義實體。它也是純粹的Python,免費許可,佔用空間小(單一源模塊),因此可以很容易地將其放入您的GAE應用程序中並與其他應用程序代碼一起使用。

0

BeautifulSoup很好,但它的API很尷尬。嘗試,它提供了BeautifulSoup的ElementTree接口。

相關問題