[問題] 關於網頁爬文的連線設定

作者: lueichun (no anonymous)   2018-11-08 17:32:55
我現在嘗試從PTT八卦版爬文,想爬出鄉民推文的ID和內容。
我透過八卦版的URL,連線到八卦版:
https://www.ptt.cc/bbs/Gossiping/index.html
這是八卦版最新網頁的URL。
前一頁的URL:
https://www.ptt.cc/bbs/Gossiping/index39000.html
多出「39000」這個頁碼,依此類推,前面的網頁,頁碼會是
38999->38998->38997......一路往下。
我現在的問題是,這樣的話每一頁的URL都不一樣,那麼是不是變成要爬每一頁時,
都變成要重新new一個新的connection??
但是真的這樣做的話,光是開啟、關閉connection就耗掉很多時間了。
我有使用多執行緒,讓code執行的快一點,但也就快一點而已,
整體來看還是跑得很慢。
所以想請問,現在面對這麼多的url,從39000->1,總共快4萬筆url,
有沒有比較快的連線方式呢?
不然我現在的作法,是一個url就開一個connection,真的很花資源又很花時間。
作者: sqrt998001 (平方根999)   2018-11-08 19:25:00
connection pool?
作者: swpoker (swpoker)   2018-11-09 08:09:00
同上,只要仔細處理close exception就好了
作者: lueichun (no anonymous)   2018-11-09 12:58:00
所以即使url都不同,也可用連線池?
作者: ssccg (23)   2018-11-09 18:12:00
同一個server,是同樣的socket啊URLConnection沒有api可以直接重用,但是底層JDK其實會重用Socket,只是有些條件(可以查http keep alive)當然也可以選擇有api能讓你自己控制connection pool的lib另外Server支援的話,可以改用HTTP/2

Links booklink

Contact Us: admin [ a t ] ucptt.com