淺談抓取網頁數據(奉上Demo)


Demo源碼

背景

  曾經在公司做過一個比價系統,就是抓取其它網站上商品的價格並和自己公司的商品進行對應,然后展示出來,給pm提供一個定價的參考。后來,有同事的朋友在找工作的時候,獵頭讓其做一個抓取去哪網最低價機票的程序,然后,我就幫忙整了一下。本文的目的在於提供這個程序的源碼,然后和大家探討一下網頁信息抓取的相關點。Demo使用c#並在vs2012環境下運行。

項目結構一覽

  下面是Demo的項目結構圖:

運行結果

  下面是Demo的運行結果圖:

思路&問題分析

  • 個人以為,網頁信息的獲取分為兩個階段:1 知道目標網頁和相關參數,並獲取網頁的源碼 2 將獲取到的源碼抽取出我們需要的信息,並轉換成c#對象
  • 在Demo中的HttpHelper.cs文件下的類的職責就是設定目標網頁地址和相關參數,該類是在網上找到的,據說可以無視cookie、證書等驗證,很牛,推薦小伙伴們使用,所以,第一個目標是比較容易能夠完成的
  • 難點在於第二個目標,我們如何抓取html源碼(json數據)中的有效信息並轉換成我們需要的c#對象呢?Demo中獲取的是json數據,然后用正則抓出了其中的一部分,再轉換成一個實體類的列表。Demo中的AsyncRegexHelper是異步的正則匹配幫助類,在使用正則匹配的過程中,經常遇到無限回溯的問題,使用這個幫助類可以異步地執行匹配並且有一個超時時間。現在碰到的問題是正則匹配比較不靠譜,難度較大且不易擴展,目前打算想用Html Agility Pack來進行數據的匹配,希望伙伴們能指點下,謝謝大家。

總結

  本人文筆拙劣,感謝大家的支持。提供源碼,大家分享一下,希望能做一個通用點的系統,只需要輸入網址和一些簡單的規則,就能夠獲取我們所需要的信息。

Demo源碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM