2014-03-24 35 views
0

我正在嘗試創建一個爬網程序,我需要能夠執行不同的查詢以從爬網頁中提取不同類型的數據。我一直在尋找到CsQuery爲extracing數據,似乎當我有一個簡單的CSS選擇器作爲執行存儲的CS查詢

H4完美運行:包含(「texstring」)

我的問題是,我需要能夠評估如下的複雜查詢:

[「h4:contains('textstring')」]。Parent()。Parent()。Find(「div」)。Find(「span」)。Text ();

我還沒有找到任何好的解決方案。 CsQuery可以輕鬆地完成上述操作,但只有在代碼中編寫它時,我才能夠執行保存在數據庫中的查詢,因此我需要能夠動態加載和執行查詢。 我目前最好的想法是讓遞歸函數一次遍歷一個點,但是這會導致對函數的6次調用能夠執行上述查詢。它也似乎最終會創建CsQuery中已經存在的功能,但我無法找到解決問題的更優雅的方法。

任何想法將不勝感激。

回答

0

有幾種方法可以做到這一點。首先,您可以使用反射和正則表達式將數據庫中的c#字符串轉換爲表達式。有很多小項目可以做到這一點。另一種選擇是託管一個腳本環境,如鐵python或jint,並使用其中的一種編寫表達式。第三種選擇是使用codedom並評估保存的字符串,然後轉換爲程序集。每個選項都有優點和缺點。

第一個選項使用的反射速度可能非常慢。但你可以原生使用c#。第二個選項使用其他語言,並且需要設置腳本環境。但非程序員可以更容易地開發表達式。第三個選項需要每次創建一個新的組件表達的變化,但不能被卸載。但是,此選項可能是在處理速度最快的整體。

個人而言,我將主持jint保持學習曲線下來的民間網站及其環境的設置將是相當容易,如果你需要的是正確的CLR和csquery圖書館。

+0

謝謝,我會看看你所描述的選項:) –

相關問題