背景
曾經在公司做過一個比價系統,就是抓取其它網站上商品的價格並和自己公司的商品進行對應,然後展示出來,給pm提供一個定價的參考。後來,有同事的朋友在找工作的時候,獵頭讓其做一個抓取去哪網最低價機票的程序,然後,我就幫忙整了一下。本文的目的在於提供這個程序的源碼,然後和大家探討一下網頁信息抓取的相關點。Demo使用c#並在vs2012環境下運行。
項目結構一覽
下面是Demo的項目結構圖:
運行結果
下面是Demo的運行結果圖:
思路&問題分析
- 個人以為,網頁信息的獲取分為兩個階段:1 知道目標網頁和相關參數,並獲取網頁的源碼 2 將獲取到的源碼抽取出我們需要的信息,並轉換成c#對象
- 在Demo中的HttpHelper.cs文件下的類的職責就是設定目標網頁地址和相關參數,該類是在網上找到的,據說可以無視cookie、證書等驗證,很牛,推薦小伙伴們使用,所以,第一個目標是比較容易能夠完成的
- 難點在於第二個目標,我們如何抓取html源碼(json數據)中的有效信息並轉換成我們需要的c#對象呢?Demo中獲取的是json數據,然後用正則抓出了其中的一部分,再轉換成一個實體類的列表。Demo中的AsyncRegexHelper是異步的正則匹配幫助類,在使用正則匹配的過程中,經常遇到無限回溯的問題,使用這個幫助類可以異步地執行匹配並且有一個超時時間。現在碰到的問題是正則匹配比較不靠譜,難度較大且不易擴展,目前打算想用Html Agility Pack來進行數據的匹配,希望伙伴們能指點下,謝謝大家。
總結
本人文筆拙劣,感謝大家的支持。提供源碼,大家分享一下,希望能做一個通用點的系統,只需要輸入網址和一些簡單的規則,就能夠獲取我們所需要的信息。