日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python采集_Python3做采集

發(fā)布時(shí)間:2024/1/23 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python采集_Python3做采集 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

出于某些目的,需要在網(wǎng)上爬一些數(shù)據(jù)。考慮到Python有各種各樣的庫,以前想試試Pycharm這個(gè)IDE,就決定用它了。首先翻完《深入Python3》這本書,了解了它的語法之類的。下面就以下載http://www.meinv68.com/為例子開始干活了:

Http協(xié)議的實(shí)現(xiàn)。那本書里有介紹一個(gè)叫httplib2的庫,看起來挺好。就用這個(gè)庫把網(wǎng)頁內(nèi)容抓下來先。

Html解析。之前有用過一些解析xml的庫,但是想著html代碼可能不會(huì)太嚴(yán)禁,就找到了一個(gè)傳說中對(duì)html容錯(cuò)度很高的庫:BeautifulSoup。Python3得用這個(gè)庫的第四版,導(dǎo)入時(shí)也是要導(dǎo)「bs4」庫。解析挺簡(jiǎn)單,我用的基本還是xml那一套。

數(shù)據(jù)保存。呃,沒啥說的,就是用內(nèi)建方法open()打開一個(gè)文件,會(huì)返回一個(gè)文件對(duì)象,然后調(diào)用它的各種方法就可以了。

采集的有點(diǎn)慢。需要采集的數(shù)據(jù)有三十多萬條。但是一個(gè)頁面只有十條數(shù)據(jù),而且每三四秒左右才能從服務(wù)器抓到一個(gè)頁面。剛開始想著用多線程之類的加速,但想著抓一次就好了,而且有人鄙視說,抓太快對(duì)服務(wù)器負(fù)擔(dān)太大,就讓它跑了個(gè)通宵。只抓了十萬條數(shù)據(jù),而且還有漏的。

然后就找到另外一個(gè)網(wǎng)站,繼續(xù)抓。這個(gè)時(shí)候蛋疼了,那網(wǎng)頁里的內(nèi)容大部分都是js之類生成的。第一反應(yīng)就是看看有沒人用Python實(shí)現(xiàn)一個(gè)js的解釋器。結(jié)果發(fā)現(xiàn)這個(gè)工具量太大,很多庫都必須依靠瀏覽器來解析,太重量級(jí)。先放一放,就先看看這個(gè)js里有些啥,會(huì)不會(huì)直接有需要的數(shù)據(jù)。

以前沒有網(wǎng)頁開發(fā)的經(jīng)驗(yàn),只是問過同學(xué)什么js,asp語言是干嘛用的。但是Firefox很久之前就裝了FireBug這個(gè)插件,就拿出來隨便點(diǎn)點(diǎn)。很容易看到了加載的js,但是看了半天沒發(fā)現(xiàn)有想要的東西。然后繼續(xù)隨便點(diǎn)點(diǎn),發(fā)現(xiàn)加載的不只一個(gè)腳本,最后在控制臺(tái)里,發(fā)現(xiàn)Get了一個(gè)aspx文件,里面就有想要的數(shù)據(jù)。

下面繼續(xù)是Python的事了:

瞄了下那個(gè)url里,有關(guān)于日期的參數(shù)。首先很純潔的想到我需要一個(gè)能處理日期的類。嗯,我也找到了,datetime。這貨能很方便的處理關(guān)于 「時(shí)間」的功能,比如一個(gè)時(shí)間的前一天,前一秒是什么時(shí)候,計(jì)算兩個(gè)時(shí)間相差多少等等,而完全不用考慮類似潤年哇,加了幾小時(shí)后就成了另外一天之類的問題。也能很方便的把日期用字符串按指定的格式打印出來。

抓到這里面的文件后,需要進(jìn)行分析。就簡(jiǎn)單的用正則表達(dá)式了。用到的庫是re。呃,用法也很簡(jiǎn)單,可以先用編譯一個(gè)正則表達(dá)式,然后可以查看一個(gè)字符串能不能被這個(gè)正則表達(dá)式匹配,返回匹配部分等等。

因?yàn)檫@個(gè)腳本很小,比起抓整個(gè)網(wǎng)頁來說,效率好太多了,一秒鐘左右抓一個(gè)頁面,而且一個(gè)頁面大概有170條數(shù)據(jù)。跑了二十分鐘左右就抓完了。

后:

以前用C++這樣的靜態(tài)類型語言,一個(gè)表達(dá)式的值,一個(gè)函數(shù)的返回值只能是一種類型。但是Python則不同,比如open()會(huì)根據(jù)你打開模式返回不同的類型的對(duì)象。雖然說C++的parser做起來很難,但是只要做出來,就能很容器確定一個(gè)變量的類型(模板中的除外,所以C++11放棄Concept的時(shí)候還是略讓人蛋疼的),然后IDE就能進(jìn)行很好的自動(dòng)補(bǔ)全建議。但是動(dòng)態(tài)類型語言這方面則略為蛋疼了,對(duì)IDE要求高了一點(diǎn)。好處則是很方便靈活,寫函數(shù)里也不怎么糾結(jié)參數(shù)的實(shí)際類型,全特么是模板參數(shù)……好在PyCharm能根據(jù)一個(gè)函數(shù)的docstring判斷參數(shù)的類型。

還有就是Python里對(duì)機(jī)器的控制弱了點(diǎn)。因?yàn)閿?shù)據(jù)量有點(diǎn)大,所以不得不關(guān)心了下list的實(shí)現(xiàn)。它類似C++ stl里的vector,但是又沒有提供設(shè)置容量的方法。現(xiàn)在就用collection.deque將就了一下。

總結(jié)

以上是生活随笔為你收集整理的python采集_Python3做采集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。