基於C#.NET+PhantomJS+Sellenium的高級網絡爬蟲程序。可執行Javascript代碼、觸發各類事件、操縱頁面Dom結構、甚至可以移除不喜歡的CSS樣式。
很多網站都用Ajax動態加載、翻頁,比如攜程網的評論數據。如果是用之前那個簡單的爬蟲,是很難直接抓取到所有評論數據的,我們需要去分析那漫天的Javascript代碼尋找API數據接口,還要時刻提防對方增加數據陷阱或修改API接口地。
如果通過高級爬蟲,就可以完全無視這些問題,無論他們如何加密Javascript代碼來隱藏API接口,最終的數據都必要呈現在網站頁面上的Dom結構中,不然普通用戶也就沒法看到了。所以我們可以完全不分析API數據接口,直接從Dom中提取數據,甚至都不需要寫那複雜的正則表達式。
主要特性
- 支持Ajax請求事件的觸發及捕獲;
- 支持異步並發抓取;
- 支持自動事件通知;
- 支持代理切換;
- 支持操作Cookies;
運行截圖
- 抓取酒店數據
- 抓取評論數據
示例代碼
/// <summary>
/// 抓取酒店評論
/// </summary>
static void Main(string[] args)
{
var hotelUrl = "http://hotels.ctrip.com/hotel/434938.html";
var hotelCrawler = new StrongCrawler();
hotelCrawler.OnStart += (s, e) =>
{
Console.WriteLine("爬蟲開始抓取地址:" + e.Uri.ToString());
};
hotelCrawler.OnError += (s, e) =>
{
Console.WriteLine("爬蟲抓取出現錯誤:" + e.Uri.ToString() + ",異常消息:" + e.Exception.ToString());
};
hotelCrawler.OnCompleted += (s, e) =>
{
HotelCrawler(e);
};
var operation = new Operation
{
Action = (x) => {
//通過Selenium驅動點擊頁面的「酒店評論」
x.FindElement(By.XPath("//*[@id='commentTab']")).Click();
},
Condition = (x) => {
//判斷Ajax評論內容是否已經加載成功
return x.FindElement(By.XPath("//*[@id='commentList']")).Displayed && x.FindElement(By.XPath("//*[@id='hotel_info_comment']/div[@id='commentList']")).Displayed && !x.FindElement(By.XPath("//*[@id='hotel_info_comment']/div[@id='commentList']")).Text.Contains("點評載入中");
},
Timeout = 5000
};
hotelCrawler.Start(new Uri(hotelUrl), null, operation);//不操作JS先將參數設置為NULL
Console.ReadKey();
}
github:https://github.com/microfisher/Strong-Web-Crawler原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/222587.html
微信掃一掃
支付寶掃一掃