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

看板java作者時間5年前 (2018/11/08 17:32), 編輯推噓1(107)
留言8則, 4人參與, 最新討論串1/1
我現在嘗試從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,真的很花資源又很花時間。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.167.49.134 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1541669578.A.C72.html

11/08 19:25, , 1F
connection pool?
11/08 19:25, 1F

11/09 08:09, , 2F
同上,只要仔細處理close exception就好了
11/09 08:09, 2F

11/09 12:58, , 3F
所以即使url都不同,也可用連線池?
11/09 12:58, 3F

11/09 18:12, , 4F
同一個server,是同樣的socket啊
11/09 18:12, 4F

11/09 18:14, , 5F
URLConnection沒有api可以直接重用,但是底層JDK其實會重用
11/09 18:14, 5F

11/09 18:17, , 6F
Socket,只是有些條件(可以查http keep alive)
11/09 18:17, 6F

11/09 18:19, , 7F
當然也可以選擇有api能讓你自己控制connection pool的lib
11/09 18:19, 7F

11/09 18:27, , 8F
另外Server支援的話,可以改用HTTP/2
11/09 18:27, 8F
文章代碼(AID): #1Rv0BAno (java)