[心得] 用Python抓網頁的心得

看板Python作者 (Victor)時間15年前 (2008/10/05 16:25), 編輯推噓15(15028)
留言43則, 12人參與, 最新討論串1/1
http://blog.ez2learn.com/2008/10/05/python-is-the-best-choice-to-grab-web/ 我寫了一篇關於Python抓網頁的心得 有興趣可以看看 我抓到現在的結論是,以工具而言 Twisted + lxml是最好用的 想抓網頁的可以參考看看 :P 接下來有空我會討論設計上的問題 然後過一陣子我想把我那些程式整理成Library弄成Open source project 以上 :D -- 易記學 程式設計教學 http://ez2learn.com/ 易記學 程式設計討論區 http://forum.ez2learn.com VICTOR's 個人Blog http://blog.ez2learn.com/ 財報分析王 http://victorlin.serveftp.org/stock/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.170.85.205

10/05 16:39, , 1F
10/05 16:39, 1F

10/05 16:52, , 2F
推 加油!
10/05 16:52, 2F

10/05 17:09, , 3F
what's wrong with urllib.urlopen()?
10/05 17:09, 3F

10/05 17:21, , 4F
10/05 17:21, 4F

10/05 17:31, , 5F
urllib不是不好 而是不夠好
10/05 17:31, 5F

10/05 17:31, , 6F
當你有一堆網頁想非同步抓取 urllib就顯得不適合
10/05 17:31, 6F

10/05 17:32, , 7F
因問它是同步的函數 而twisted整個都是非同步在跑的
10/05 17:32, 7F

10/05 17:34, , 8F
一次只抓一頁的話 整個時間都等在那個網頁上面
10/05 17:34, 8F

10/05 17:34, , 9F
同時間很多個網頁一起抓 誰先好先parse誰 這樣比較快
10/05 17:34, 9F

10/05 17:34, , 10F
cpu使用率和網路使用率也會比較高
10/05 17:34, 10F

10/05 17:35, , 11F
而我在使用Twisted之前就是用urllib自己寫threadpool
10/05 17:35, 11F

10/05 17:35, , 12F
發現Twisted可以用 我寫threadpool根本是重覆twisted
10/05 17:35, 12F

10/05 17:36, , 13F
Twisted的架構比我當初寫的好太多 就沒理由用urlopen
10/05 17:36, 13F

10/05 17:45, , 14F
了解 我只是在想python有內建的library
10/05 17:45, 14F

10/05 17:46, , 15F
為了抓網頁裝twisted好像有點殺機用牛刀了
10/05 17:46, 15F

10/05 17:47, , 16F
如果只是少量抓取的話 大量的話urllib還是不堪使用的
10/05 17:47, 16F

10/05 17:47, , 17F
Twisted有IOCP epoll等等reactor可以用
10/05 17:47, 17F

10/05 17:48, , 18F
我的水管太小 加上當時用BeautifulSoup
10/05 17:48, 18F

10/05 17:49, , 19F
抓財報資料幾乎都卡在cpu使用率上
10/05 17:49, 19F

10/05 17:49, , 20F
當水管大 又有大量但小筆的資料時 Twisted的優勢
10/05 17:49, 20F

10/05 17:49, , 21F
應該就可以表現出來 還有它極度穩定 等等好處
10/05 17:49, 21F

10/05 17:51, , 22F
它的Deferred機制也很好用 我都串起getPage
10/05 17:51, 22F

10/05 17:51, , 23F
後面放Parser 接著存到資料庫等等
10/05 17:51, 23F

10/05 17:52, , 24F
它本身就是一個責任鏈 最麻煩的錯誤它也有處理
10/05 17:52, 24F

10/05 17:58, , 25F
除此之外 還可以用來包裝retry的功能
10/05 17:58, 25F

10/05 18:00, , 26F

10/05 22:47, , 27F
謝謝原PO,你的網站讓我獲益良多,感謝。
10/05 22:47, 27F

10/05 23:06, , 28F
<---- urllib大量抓網頁使用者 :|
10/05 23:06, 28F

10/05 23:07, , 29F
然後我也是用soup加自己寫multi-thread XD
10/05 23:07, 29F

10/05 23:11, , 30F
人家習慣用pycurl _A_
10/05 23:11, 30F

10/05 23:19, , 31F
= .= 你不覺得soup喝下去整個CPU快燒起來了嗎
10/05 23:19, 31F

10/05 23:23, , 32F
那就再開個pyprocessing就好了, cpu不就是這樣用的 (?
10/05 23:23, 32F

10/05 23:37, , 33F
我是指beautifulsoup太吃資源= =
10/05 23:37, 33F

10/05 23:48, , 34F
幹麻用soup 自己寫re一定最快
10/05 23:48, 34F

10/05 23:51, , 35F
re寫少還算輕鬆 寫很多就很頭大= =
10/05 23:51, 35F

10/05 23:52, , 36F
不管怎樣 lxml高效率 又好用 XD
10/05 23:52, 36F

10/06 21:39, , 37F
但是我是在cluster上跑 所以我有N張網卡 2N個核心 XD
10/06 21:39, 37F

10/06 21:40, , 38F
用錯id :p
10/06 21:40, 38F

10/07 00:45, , 39F
有錢鬼 Q_Q 用什麼cluster 有錢的話我也想分散阿 ><
10/07 00:45, 39F

10/07 09:17, , 40F
而且re一多過幾天自己就不想看了..XD
10/07 09:17, 40F

10/08 08:50, , 41F
沒錯 一開始我也用re XD
10/08 08:50, 41F

10/10 09:36, , 42F
看來我是例外xd
10/10 09:36, 42F

10/11 23:06, , 43F
抓到分身了?
10/11 23:06, 43F
文章代碼(AID): #18w7dV7N (Python)