2013-09-01 154 views
2

我試圖從購物網站上刮取內容,然後將其保存在我的數據庫表中的產品中。刮這些內容需要了解每個站點的DOM結構。不僅DOM結構,而且菜單中的類別層次結構。特定內容的網頁搜索

有許多解決方案通過爲每個站點設置配置,然後使用regx,XPath或css選擇器查​​找包含(例如產品名稱,價格,型號...)的特定html元素來實現此目的。

是否有解決方案來避免每個站點的設置配置和自動刮取產品屬性?

有一個類似的解決方案,處理像Readability這樣的新聞,它尋找<p>標籤和圖像的序列。由於新聞網站和簡單結構之間的相似性,對於新聞來說更容易,

+0

你可以自動執行的過程:給定文本值,發現頁面上的文本,然後按[生成的含元素的CSS選擇器(HTTP: //stackoverflow.com/a/4588211/405017)。但是,不能保證生成的選擇器是穩定的。你可以花費幾天的時間收集多個頁面的腳本,並使用啓發式方法試圖找到一種常見的模式......或者你可以用你的大腦根據明顯的(對人類)模式生成一個好的選擇器。 – Phrogz

回答

1

沒有什麼靈丹妙藥,但是你可以做的就是使用XSLT作爲你的站點和你的抓取程序之間的主要「綁定」。 XSLT支持使用Html Agility Pack構建。

至少它會減少網站在進化或改變其結構時所需的工作量,而不是僅僅依靠純粹的程序代碼。改變XSLT(一旦你習慣了)文本將不需要編譯,更像是「配置」系統。但是,您仍然必須爲每個目標網站至少定義一個XSLT文件(除非這些網站是建立在相同的軟件上)。

您可以檢查此鏈接的XSLT例如:Use HtmlAgilityPack to divy up a document

1

如果您想要抓取的網站沒有其html結構的一般模式,則必須爲每個網站配置腳本。

只有當你幸運時,你不必重新配置你的腳本。

ps:通常web刮板從頭開始構建它們的代碼。