Re: [討論] 資料擷取程式發想

看板Soft_Job (軟體人)作者 (笨嘎嘎)時間12年前 (2014/05/13 16:40), 12年前編輯推噓2(2010)
留言12則, 2人參與, 最新討論串6/7 (看更多)
※ 引述《d25702 (DOTA)》之銘言: : 我想要做一隻可以從網路擷取資料並分析利用的程式, : 我的初步想法如該圖 http://ppt.cc/a3Ve : 1.擷取網頁碼我算用httpwebrequest(httpWebresponse)或WebBroswer技術 : 2.分析資料用regularExpression : 3.介面顯示用datagridview : 4.資料EXCEL匯出則用NPOI : 但目前我苦無想法與來源來為這隻程式注入生命, : 大家有什麼idea嗎? : 註:個人使用語言是VB.NET 剛好我也開發過類似的專案, 回答你一些我用到的東西。以C#來開發。 抓網頁的方法有三個 01. httpwebrequest 02. webclient 03. webbrowser 由難到簡單是01>02>03, 不過,我比較建議的是用httpwebrequest, 如果想偷懶點或者簡單的程式用webclient, 最後,webbrowser不要用,會有memory leak的問題,程式開太久會記憶體會爆掉。 通常爬蟲會搭配多執行緒, 如果簡單程式或你懶的話,用BackGroundWorker, 但是我比較建議自己寫多執行緒, 同時爬2X個網站你拉BackGroundWorker會死人, 畢竟,工具是好用,但無法搭配編寫者的需求。 分析或拆網頁的話,也有幾個方法, 01. Json、Xxml 02. Html Agility Pack 03. string 01的話,直接反序列化就好,最快, 02的話,稍微學一下,蠻簡單的。 03的話,通常會用string.IndexOf或string.Split 02或03的話,其實各有優缺點, 有時候網頁版面大改的話,02、03其實都要修改, 不過有時候小改的話,03其實比較有相容性。 不過這三個方法都一定要會的。 顯示畫面的話,隨意你想怎麼做, 因為這要講下去會講到軟體設計模式, 有興趣的話可以自己研究。 轉存Excel檔這部分的話其實沒什麼太大問題, 不過我建議存檔方式建議要抽像, 到時候要改成MySQL、Access、txt、Json、xml…會比較有彈性。 寫這種爬蟲軟體有個地方要注意,就是「你是否會比較分析多個網站」? 有跟沒有寫起來的東西差蠻多的, 尤其如果牽扯到多執行緒的話要多思考一下喔。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.249.117.38 ※ 文章網址: http://www.ptt.cc/bbs/Soft_Job/M.1399970436.A.D2E.html ※ 編輯: StupidGaGa (60.249.117.38), 05/13/2014 16:42:16 ※ 編輯: StupidGaGa (60.249.117.38), 05/13/2014 16:54:09

05/14 18:16, , 1F
請問 httprequest類 應該要熟悉該網站的標頭 甚至
05/14 18:16, 1F

05/14 18:17, , 2F
封包導向的驗證機制對吧? 有些網站標頭和一來一往封包
05/14 18:17, 2F

05/14 18:17, , 3F
做了些驗證 所以還要特地去分析網站這部分的運作
05/14 18:17, 3F

05/14 18:18, , 4F
才能正式進入擷取網頁文本的階段。y
05/14 18:18, 4F

05/14 18:19, , 5F
另外 類似誠品有擋webbrowser的機制 是從cookie 或是
05/14 18:19, 5F

05/14 18:19, , 6F
封包驗證的機制? 一般瀏覽器瀏覽沒問題 webbrowser會被擋
05/14 18:19, 6F

05/14 18:19, , 7F
謝謝。
05/14 18:19, 7F

05/14 18:23, , 8F
關於string分析網頁 string.Contains replace 也滿好用
05/14 18:23, 8F
有些網站的確會要求檢查head,或者用js針對cookie做修改, 用HttpWebRequest是比較萬能,也比較容易針對各網站去寫,不過就比較麻煩是真的。 通常還要搭配一些看封包的軟體,不過基本的用Chrome就可以了。 根據我的經驗,如果要檔爬蟲的話有幾個地方, 01 登入 [01] head [02] cookie 02 使用時 [01] ip [02] cookie更新,或者類似的時間戳記 [03] 某段時間內要求資料的次數 可能還有些地方或特殊的規則,不過我一時沒想到。 分析拆解網頁的話,string是基本工具,雖然很不好用,但一定要會用, 單就看你要怎麼拆, 通常我有兩種拆法, 一個是根據網頁的tag去拆, 另一個就類似xml、json用巢狀的方式去拆。

05/15 10:23, , 9F
我之前抓一個遊戲網站的查價.是先用Fiddler去試他要帶的參數
05/15 10:23, 9F

05/15 10:23, , 10F
因為他用.Net寫的,後來發現他需要某些.Net必備的值
05/15 10:23, 10F

05/15 10:23, , 11F
最後我才用WebRequest成功抓到資料@@
05/15 10:23, 11F
你說的應該是.aspx的 VIEWSTAT 與 PREVIOUSPAGE 之類的吧? 那個用HttpWebRequest與WebClient我記得都可以抓得到,不過傳出去記得要自己處理。 ※ 編輯: StupidGaGa (60.249.117.38), 05/15/2014 11:13:13

05/15 18:07, , 12F
謝謝
05/15 18:07, 12F
文章代碼(AID): #1JSTg4qk (Soft_Job)
文章代碼(AID): #1JSTg4qk (Soft_Job)