作者: 3ldk 時間: 2017-3-25 18:00 標題: 如果parse html, 覺得用乜最方便?
如果綜合各langnage現有的library, 同埋該language本身的特性, parse html用邊個language最方便?
初步有三個選擇, php, java, node.js, 除左依三個, 有其他更方便的話都可以
當然, 我明白最方便一定係用javascript, 原生就係用黎咁做, 但始終依個只係一個browser上既language, 限制太多
作者: hihihi123hk 時間: 2017-3-25 18:04
如果綜合各langnage現有的library, 同埋該language本身的特性, parse html用邊個language最方便?
初步有三 ...
3ldk 發表於 2017-3-25 18:00
cherrio 可以做 server side parsing
Nodejs 用
而家隻 HKEPC IR Parse 緊 EPC 啲 Html 都係用緊佢
via HKEPC Ionic Reader v1.6.0 - iPhone
作者: KinChungE 時間: 2017-3-25 18:23
https://github.com/jOOQ/jOOX
jQuery on Java, 好方便
作者: 3ldk 時間: 2017-3-26 05:56
java的話, 我以前係用開jsoup, 一直以為jsoup係java入面最強大的
不過佢講到自己幾咁好, 又講到jsoup幾咁差, 咁依個joox其實係咪java中最多人用?
作者: stta800 時間: 2017-3-26 12:02
用開node.js
作者: 梁炳 時間: 2017-3-26 12:18
一定係nodejs啦
作者: KinChungE 時間: 2017-3-26 13:42
最大問題係好多HTML本身唔well formed
一用D標準既library就爆個exception出黎, 即刻玩完

作者: hihihi123hk 時間: 2017-3-26 16:17
應該好少人會選擇用 static typing 嘅 language 做 parsing

定好哂啲 schema , 啲 website 一郁就玩完
唔定啲 schema 根本發揮唔到 static typing 嘅優點

作者: KinChungE 時間: 2017-3-26 16:39
應該好少人會選擇用 static typing 嘅 language 做 parsing
定好哂啲 schema , 啲 website ...
hihihi123hk 發表於 2017-3-26 16:17
你咁講, 即係好少人寫bot抽iPhone

作者: hihihi123hk 時間: 2017-3-26 16:51
_ 做嘅野就算 _ 數啦
不過搶 iPhone 唔係好洗 Parse HTML,可能只係用兩三句食 SMS Code 就完, 之後已經係自動 Submit
作者: snoopy11hk 時間: 2017-3-26 17:07
應該好少人會選擇用 static typing 嘅 language 做 parsing
定好哂啲 schema , 啲 website ...
hihihi123hk 發表於 2017-3-26 16:17
最絕咪加多個 web automation testing tool 做 selection
咁佢改 layout 就無計 jei
作者: hihihi123hk 時間: 2017-3-26 17:44
本帖最後由 hihihi123hk 於 2017-3-26 17:46 編輯
如果 parsing 係一個非常 Core 嘅一部份, Monolithic 咁做只會玩殘自己 ( 例如將幾十個 Website 嘅 Parsing Logic 放落同一個 Application
用番 Micro-service 嘅 Pattern,揀番一隻最適合嘅 Language 去做,唔洗局限自己一定用番同 Application 一樣嘅 language
[attach]1970088[/attach]
一個 Website 有一個對應嘅 Parsing Service, 有咩事 Parse 唔到嘅時候就出 Alert
要有效實踐 Micro-service 嘅大前提當然係做到 CD (例如 git push 之後就全自動 Build + Deploy + Rolling update),不過淨係呢一點,香港都唔知有無 1 成公司做得到
作者: KinChungE 時間: 2017-3-26 19:14
如果 parsing 係一個非常 Core 嘅一部份, Monolithic 咁做只會玩殘自己 ( 例如將幾十個 Website 嘅 Parsing ...
hihihi123hk 發表於 2017-3-26 17:44
全自動好危險
起碼都俾其他人玩下O唔OK先再roll out啦
作者: 3ldk 時間: 2017-3-26 19:59
應該好少人會選擇用 static typing 嘅 language 做 parsing
定好哂啲 schema , 啲 website ...
hihihi123hk 發表於 2017-3-26 16:17
咁既話, php都係dynamic, 點解唔係php呢? 係library較差?
作者: hihihi123hk 時間: 2017-3-26 20:13
回覆 13# KinChungE
正正常常用 develop branch 直出 staging 慢慢試
無問題就 merge 落 master 直出 production
(經人手 Roll out 先係最危險
作者: hihihi123hk 時間: 2017-3-26 20:31
回覆 14# 3ldk
我相信 library 大家都差唔多係咁用架喇 (類近 jQuery 個用法)
都係個人口味問題,不過 javascript 比 php 都有啲明顯優點
javascript ES6 好寫咗好多
1. arrow function
2. 唔洗打 ; 號
3. construct/destruct object 都比 php 方便
JSON support 得開心啲
javascript 有真 const
Nodejs runtime 有自己嘅 process , Deploy 易控制好多
Nodejs 出 log 方便好多
Nodejs default Non-blocking API
- function doSomething({ title, body }, cb) {
- someAsyncCall(body, cb)
- }
- doSomething({ title : "abc", body: "def"}, result => {
- console.log(result)
- })
作者: 3ldk 時間: 2017-3-27 00:25
我後來再諗真D, 發覺問既方向其實錯左, 重點唔應該放係parse html上面
而係應該放係bot既能力, 爬蟲能力, 破解能力, 模擬browser等等既能力上面
因為有時唔係簡單send個request, 就可以拎到想要既內容, 所以比起parse html, 上述能力更為重要
例如我之前遇過一個網頁, 當頁面load完後, 中間仲有個框, 由另一個request load入去
又例如有D網站, 如果request唔係browser發出, 就唔會有正確response
所以在抓取網頁的實際情況, 仲有好多奇怪問題要解決
在Java, 有HtmlUnit, 佢可以在程式內部模擬一個browser, 咁起碼扮browser依一part, 唔洗自己實作先
遇上超難搞的網頁, 仲有終極既Selenium, 用一個真實既browser去load網頁
咁在node.js呢? 有無咁完善既library去抓取網頁既資料?
睇過cherrio, 應該就無依類機制同功能
如果node.js上的資源可以取代到Java的話, 我未來應該都會轉用node.js, 因為寫javascript始終方便好多
作者: hihihi123hk 時間: 2017-3-27 01:06
本帖最後由 hihihi123hk 於 2017-3-27 01:26 編輯
回覆 17# 3ldk
javascript 有 phantomJs 基本上同你講嘅 HTMLUnit 係同一樣野 (headless web browser),分別在於 phantomJs 係用真 Webkit, HtmlUnit 只係用一啲 Js Engine simulate...
有啲人用佢黎寫 UI automation Test case. 當然你用佢黎做 parsing agent 一樣可以,用 phantomjs 拎啲啲己經 Render 好咗嘅 Html 再 pass 比 Cherrio 做 Parsing
當然你用 Java 都可以駁 PhantomJs,有啲人都做咗啲 Bridge
作者: kof2002 時間: 2017-3-27 06:31
有captcha 或雙password Login form 用唔用得著?
via HKEPC Reader for Android
作者: KinChungE 時間: 2017-3-27 09:21
有paid service幫你解captcha
作者: stta800 時間: 2017-3-27 19:45
題外話:請問有無邊個網可解google個新captcha?
作者: 3ldk 時間: 2017-3-27 21:06
回覆 3ldk
javascript 有 phantomJs 基本上同你講嘅 HTMLUnit 係同一樣野 (headless web browser ...
hihihi123hk 發表於 2017-3-27 01:06
玩左phantomJs同node.js一整天, 發現phantomJs夾node.js, 其實唔係咁夾
首先phantomJs同node.js其實係兩樣野黎, 所以一係用phantomJs, 一係用node.js, 亦因為依個原因, 所以唔能夠話node.js有phantomJs
就連官方都話唔會整node.js版本
http://phantomjs.org/faq.html
要夾埋一齊用, 我目前只諗到以下三個方法
1. 在node.js安裝3rd的phantomJs module, 不過用起黎怪怪地, 試過幾段phantomJs的example code都行唔到, 總之問題多多
依度亦有少許討論
http://stackoverflow.com/questio ... -page-using-node-js
2. 用npm, 夾硬安裝nodejs module在phantomJs旁邊, 然後在phantomJs入面直接用nodejs的module
實驗結果係, 有D module係可以正常使用, 但亦有D會出問題, 而且phantomJs亦唔似得nodejs咁, 可以行一D新語法, 所以依個方法亦唔可行
3. 分開兩個program, phantomJs拎完html, 用http request send比nodejs處理
依個應該係最可行既方法, 但係較麻煩, 唔夠直接
而且phantomJs唔似得nodejs可以裝module, 但找抓html, 都有一定量的logic需要寫, 如果無module幫下手, 都幾麻煩
所以想知道, 正確玩法係點玩?
作者: hihihi123hk 時間: 2017-3-28 00:38
本帖最後由 hihihi123hk 於 2017-3-28 00:45 編輯
玩左phantomJs同node.js一整天, 發現phantomJs夾node.js, 其實唔係咁夾
首先phantomJs同node.js其實係 ...
3ldk 發表於 2017-3-27 21:06
你貼嗰條 Stackoverflow link 已經有答案
被 Mark 為 Answer嗰條已經係 2012年,當時 Phantom + node 一定未 Support 得好好,2017年個答案可能已經唔再適用(因為 Phantom-node 已經支援得好咗好多),一年前我自己用過 Phantom-node, 都無乜問題
另外 Stackoverflow 下面嘅答案有人提過
CasperJs Github 都 > 6000星,應該唔錯,可以參考下
PhantomJs 只係 javascript based ,你見啲人都可以係 Java 度用都係靠啲 Bridge(RPC call) ,用 Bridge 其實真係無問題,唔好太信啲過咗時嘅 Stackoverflow 答案,時間可以改變好多野。
等如十年前你同人講 Functional programming,啲人以為你痴咗線 ,可以無痛行Multi-Thread 但壞處係用好多 Ram。今日 16GB RAM 講緊一千蚊有找,兩千蚊買到 8Core16Thread 嘅CPU ,當年嘅壞處已經變得微不足道。
via HKEPC Ionic Reader v1.6.0 - iPhone
作者: kof2002 時間: 2017-3-31 17:33
Parse 得多會唔會易被block ip, 甚至當係ddos 攻擊?
via HKEPC Reader for Android
作者: KinChungE 時間: 2017-3-31 21:04
睇你所指既多係幾多request
作者: kof2002 時間: 2017-3-31 23:37
一日一百次?
via HKEPC Reader for Android
作者: KinChungE 時間: 2017-4-3 14:07
即係平均每小時4次
平時你上人地網頁睇野都唔止呢個次數啦
作者: t61 時間: 2017-4-3 15:28
https://scrapy.org/
回覆 17# 3ldk

