2009-02-26 361 views
12

我經常發現自己需要爲了內部目的而做一些簡單的屏幕抓取(即,我僅使用通過HTML發佈報告的第三方服務)。現在我至少有兩三個例子。我可以使用Apache httpclient並創建所有必要的屏幕抓取代碼,但需要一段時間。這是我平常的過程:超快速刮屏技巧?

  1. 在網站上打開Charles Proxy,看看發生了什麼。
  2. 開始使用Apache HttpClient編寫一些java代碼,處理cookie,多個請求
  3. 使用Jericho HTML來處理HTML的解析。

我希望我能夠快速記錄我的會話,然後參數化每個會話之間不同的事情。設想一下,使用Charles抓取所有請求HTTP,然後參數化相關查詢字符串或後參數。 Voila我有一個可重用的http腳本。

有什麼可以做到這一點嗎?我記得當我曾經在一家大公司工作時,曾經是我們使用的一個工具,我們稱之爲Mercury Interactive的Load Runner,它基本上有一個很好的方法來記錄http會話並使其可重用(用於測試目的)。不幸的是,這個工具非常昂貴。

+0

感謝您對所有的答案。我認爲他們都很有價值,並會幫助其他面臨同樣困境的人。我決定嘗試Twill,因爲它看起來像一種非常簡單的語言,因爲它在Python中是跨平臺的。建議的許多工具看起來都不錯 - 雖然有些看起來像Windows特有的,其他人似乎有更陡峭的學習曲線。 – Ish 2009-04-22 23:07:53

回答

5

我也想看看硒和/或BeautifulSoup如果您'願意使用Python。還有一個不錯的測試工具Twill用於自動網站測試,可以做你想做的事情。它也是用Python編寫的,它有一個Python API,但是也可以使用簡化的命令語言。這裏是一個來自Twill文檔的例子::

setlocal username <your username> 
setlocal password <your password> 

go http://www.slashdot.org/ 
formvalue 1 unickname $username 
formvalue 1 upasswd $password 
submit 

code 200  # make sure form submission is correct! 
+0

感謝您向我介紹Twill。我認爲它解決了我需要的一點。儘管沒有錄音功能,但我認爲其腳本語言的簡單性將使我能夠構建非常快速的屏幕抓取代碼。所以我選擇它作爲賞金的答案。 – Ish 2009-04-22 23:05:37

+0

我也選擇了你的答案,因爲它的快速代碼示例告訴我它是多麼容易使用。 – Ish 2009-04-22 23:06:20

4

你沒有提到你想用什麼;一種解決方案是,如果使用Web瀏覽器重複您的操作是一個可以接受的解決方案,則使用Selenium等工具簡單地「編寫」您的Web瀏覽器。您可以使用Selenium IDE來記錄您的操作,然後更改參數。

9

HtmlUnit是用Java編寫的腳本化的無頭瀏覽器。我們使用它來處理一些極端錯誤,複雜的網頁,並且通常做得非常好。

爲了簡化事情,您可以使用Jython運行它。由此產生的程序更像是一個人如何使用瀏覽器而不是努力工作的抄本。

3

我希望我能夠快速記錄我的會話,然後參數化每個會話之間不同的事情。

如果您有Visual Studio測試版,它的網絡測試功能確實如此。如果你不使用VS或者想要一個獨立的工具,我可以用OpenSpan獲得很大的成功。它不僅僅是web,它還包含windows應用程序和java!

3

Selenium將是我的第一個選擇,因爲IDE可以通過爲您錄製會話輕鬆地完成許多事情。但是,如果您對它提供的內容不滿意,也可以使用名爲Beautiful Soup的Python模塊以編程方式瀏覽網站。

3

Coscripter

http://coscripter.research.ibm.com/coscripter

簡化基於Web的過程。

CoScripter是記錄, 自動化系統和共享進程在Web瀏覽 R,進行諸如 打印照片在線 ,請求 假期擱置郵寄,或 檢查航班到達時間。 過程說明 記錄和存儲在CoScripter網站 的易於閱讀的 文本,因此任何人都可以使用它們。如果您的 在基於網絡的 過程中遇到問題,請檢查是否有人爲此編寫了CoScript! !

Wget的

要迅速拉下內容,使用wget:

wget -r -n -k -w 2 foo.com 

然後在本地解析HTML。

斜紋

除了硒,您可能還檢查出斜紋布,在命令行中的伴侶:

http://twill.idyll.org/

1

我用DomInspector手動檢查感興趣的站點來參數化它的結構。然後簡單的Apache HttpClient和使用這個參數化結構的手工解析器。基本上,我可以通過一些參數的調整來自動從任何站點提取任何信息。它與SAX解析器的工作方式類似,您需要告訴它的是您想要開始抓取數據的標籤序列。例如,谷歌有相當標準的搜索結果格式。所以,你只是運行到第三次出現的'標籤',並開始從第一個'div'的文本直到結束'/ div'

1

iMacro腳本化,但僅適用於Firefox我認爲它的性能並不好,但可以處理大多數複雜的情況,並且可以輕鬆地記錄內容。

+0

我已經使用iMacro。它可以很好地將頁面放下,它會記住用戶名,密碼等等,就好像你正在手動完成一樣。但是,它需要Firefox。所以如果你想在沒有窗口管理器的無頭(Gnome,KDE)服務器上運行你的scraper,那麼你運氣不好。 – un33k 2009-07-10 19:53:46

1

Internet Explorer支持瀏覽器助手對象(BHO)。他們可以訪問IE'HWND(窗口句柄),並且很容易從那裏刮取像素。該IWebBrowser2 COM接口還可以訪問到的HTTP請求,並且你可以通過IWebBrowser2::Document = IHTMLDocument/IHTMLDocument2 /IHTMLDocument3

1

使用Firefox找回解析HTML文檔,它應該是可以實現很多的它與它的插件,並增強了強有力的支持,但是這並不意味着運行「無頭」,但真的是一個真正的腳本瀏覽器。另外,我似乎還記得,讀過谷歌的Chrome瀏覽器使用類似的技術來進行自動迴歸測試。

1

我不能親自證明它,但有一個免費的Firefox插件:DejaClick 我有一天安裝了它,並做了一些補救性的錄製,回放和腳本編輯活動。它沒有太多學習曲線就把它們拉下來。如果您的最終目標是在Web瀏覽器中顯示某些內容,那麼它就足夠了。

他們提供網絡交易監控服務,這意味着您可以將腳本導出用於其他用途,但它們可能太專有,無法在您的網絡瀏覽器/其付費服務之外使用。

http://www.dejaclick.com/

1

我會找BADBOY。它運行一個IE瀏覽器,但你可以從字面上點擊記錄並記錄你的所有活動。

然後,您可以自動執行腳本的處理,並從一個數據源填充值(ODBC,Excel等...)

Badboy Software

2

嘗試iOpus iMacros的http://www.iopus.com/imacros/。我正在使用這個屏幕刮和它的工作非常好,速度也非常好。它也不那麼昂貴。

它會在您瀏覽時記錄腳本。然後,您可以參數化腳本並使用Java,.net等執行。

1

我會看看Fiddler根據您的請求判斷它會執行您所需的一切。

2

Python和Perl都有一個名爲Mechanize(WWW :: Mechanize for perl)的模塊,它使易於以編程方式(填寫表單,處理cookie等)執行瀏覽器行爲。

所以,巨蟒+ BeautifulSoup(偉大的HTML/XML解析器)+機械化(瀏覽器功能)=超級容易/快刮刀