運行打開瀏覽器命令:c#打開瀏覽器並全屏

基於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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-09 14:11
下一篇 2024-12-09 14:11

相關推薦

發表回復

登錄後才能評論