python
使用Python編撰多線(xiàn)程爬蟲(chóng)抓取百度貼吧郵箱與手機號
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 502 次瀏覽 ? 2020-07-05 08:00
本爬蟲(chóng)主要是對百度貼吧中各類(lèi)貼子的內容進(jìn)行抓取,并且剖析貼子內容將其中的手機號和郵箱地址抓取下來(lái)。主要流程在代碼注釋中有詳盡解釋。
代碼在Windows7 64bit,python 2.7 64bit(安裝mysqldb擴充)以及centos 6.5,python 2.7(帶mysqldb擴充)環(huán)境下測試通過(guò)
工欲善其事必先利其器,大家可以從截圖看出我的環(huán)境是Windows 7 + PyCharm。我的Python環(huán)境是Python 2.7 64bit。這是比較適宜菜鳥(niǎo)使用的開(kāi)發(fā)環(huán)境。然后我再建議你們安裝一個(gè)easy_install,聽(tīng)名子就曉得這是一個(gè)安裝器,它是拿來(lái)安裝一些擴充包的,比如說(shuō)在python中假如我們要操作mysql數據庫的話(huà),python原生是不支持的,我們必須安裝mysqldb包來(lái)讓python可以操作mysql數據庫,如果有easy_install的話(huà)我們只須要一行命令就可以快速安裝號mysqldb擴充包,他如同php中的composer,centos中的yum,Ubuntu中的apt-get一樣便捷。
相關(guān)工具可在我的github中找到:cw1997/python-tools,其中easy_install的安裝只須要在python命令行下運行哪個(gè)py腳本之后稍等片刻即可郵箱爬蟲(chóng)軟件,他會(huì )手動(dòng)加入Windows的環(huán)境變量,在Windows命令行下假如輸入easy_install有回顯說(shuō)明安裝成功。
至于電腦硬件其實(shí)是越快越好,內存至少8G起步,因為爬蟲(chóng)本身須要大量?jì)Υ婧徒馕鲋虚g數據,尤其是多線(xiàn)程爬蟲(chóng),在遇到抓取帶有分頁(yè)的列表和詳情頁(yè),并且抓取數據量很大的情況下使用queue隊列分配抓取任務(wù)會(huì )特別占顯存。包括有的時(shí)候我們抓取的數據是使用json,如果使用mongodb等nosql數據庫儲存,也會(huì )太占顯存。
網(wǎng)絡(luò )聯(lián)接建議使用有線(xiàn)網(wǎng),因為市面上一些劣質(zhì)的無(wú)線(xiàn)路由器和普通的民用無(wú)線(xiàn)網(wǎng)卡在線(xiàn)程開(kāi)的比較大的情況下會(huì )出現間歇性斷網(wǎng)或則數據遺失,掉包等情況,這個(gè)我親有感受。
至于操作系統和python其實(shí)肯定是選擇64位。如果你使用的是32位的操作系統,那么難以使用大顯存。如果你使用的是32位的python,可能在小規模抓取數據的時(shí)侯覺(jué)得不出有哪些問(wèn)題,但是當數據量變大的時(shí)侯,比如說(shuō)某個(gè)列表,隊列,字典上面儲存了大量數據,導致python的顯存占用超過(guò)2g的時(shí)侯會(huì )報顯存溢出錯誤。原因在我以前segmentfault上提過(guò)的問(wèn)題中依云的回答有解釋?zhuān)╦ava – python只要占用顯存達到1.9G以后httplib模塊就開(kāi)始報內存溢出錯誤 – SegmentFault)
如果你打算使用mysql儲存數據,建議使用mysql5.5之后的版本,因為mysql5.5版本支持json數據類(lèi)型,這樣的話(huà)可以?huà)仐塵ongodb了。(有人說(shuō)mysql會(huì )比mongodb穩定一點(diǎn),這個(gè)我不確定。)
至于現今python都早已出了3.x版本了,為什么我這兒還使用的是python2.7?我個(gè)人選擇2.7版本的緣由是自己當年很早曾經(jīng)買(mǎi)的python核心編程這本書(shū)是第二版的,仍然以2.7為示例版本。并且目前網(wǎng)上一直有大量的教程資料是以2.7為版本講解,2.7在個(gè)別方面與3.x還是有很大差異,如果我們沒(méi)有學(xué)過(guò)2.7,可能對于一些細微的句型差異不是太懂會(huì )導致我們理解上出現誤差,或者看不懂demo代碼。而且如今還是有部份依賴(lài)包只兼容2.7版本。我的建議是假如你是打算急著(zhù)學(xué)python之后去公司工作,并且公司沒(méi)有老代碼須要維護,那么可以考慮直接上手3.x,如果你有比較充沛的時(shí)間,并且沒(méi)有太系統的大牛帶,只能借助網(wǎng)上零零散散的博客文章來(lái)學(xué)習,那么還是先學(xué)2.7在學(xué)3.x,畢竟學(xué)會(huì )了2.7以后3.x上手也很快。
其實(shí)對于任何軟件項目而言,我們但凡想知道編撰這個(gè)項目須要哪些知識點(diǎn),我們都可以觀(guān)察一下這個(gè)項目的主要入口文件都導出了什么包。
現在來(lái)看一下我們這個(gè)項目,作為一個(gè)剛接觸python的人,可能有一些包幾乎都沒(méi)有用過(guò),那么我們在本小節就來(lái)簡(jiǎn)單的談?wù)勥@種包起哪些作用,要把握她們分別會(huì )涉及到哪些知識點(diǎn),這些知識點(diǎn)的關(guān)鍵詞是哪些。這篇文章并不會(huì )耗費長(cháng)篇大論來(lái)從基礎講起,因此我們要學(xué)會(huì )善用百度,搜索那些知識點(diǎn)的關(guān)鍵詞來(lái)自學(xué)。下面就來(lái)一一剖析一下這種知識點(diǎn)。
我們的爬蟲(chóng)抓取數據本質(zhì)上就是不停的發(fā)起http請求,獲取http響應,將其存入我們的筆記本中。了解http協(xié)議有助于我們在抓取數據的時(shí)侯對一些才能加速抓取速率的參數才能精準的控制,比如說(shuō)keep-alive等。
我們平常編撰的程序都是單線(xiàn)程程序,我們寫(xiě)的代碼都在主線(xiàn)程上面運行,這個(gè)主線(xiàn)程又運行在python進(jìn)程中。關(guān)于線(xiàn)程和進(jìn)程的解釋可以參考阮一峰的博客:進(jìn)程與線(xiàn)程的一個(gè)簡(jiǎn)單解釋 – 阮一峰的網(wǎng)路日志
在python中實(shí)現多線(xiàn)程是通過(guò)一個(gè)名子稱(chēng)作threading的模塊來(lái)實(shí)現。之前還有thread模塊,但是threading對于線(xiàn)程的控制更強,因此我們后來(lái)都改用threading來(lái)實(shí)現多線(xiàn)程編程了。
關(guān)于threading多線(xiàn)程的一些用法,我認為這篇文章不錯:[python] 專(zhuān)題八.多線(xiàn)程編程之thread和threading 大家可以參考參考。
簡(jiǎn)單來(lái)說(shuō),使用threading模塊編撰多線(xiàn)程程序,就是先自己定義一個(gè)類(lèi),然后這個(gè)類(lèi)要承繼threading.Thread,并且把每位線(xiàn)程要做的工作代碼講到一個(gè)類(lèi)的run方式中,當然若果線(xiàn)程本身在創(chuàng )建的時(shí)侯假如要做一些初始化工作,那么就要在他的__init__方法中編撰好初始化工作所要執行的代碼,這個(gè)方式如同php,java中的構造方式一樣。
這里還要額外講的一點(diǎn)就是線(xiàn)程安全這個(gè)概念。通常情況下我們單線(xiàn)程情況下每位時(shí)刻只有一個(gè)線(xiàn)程在對資源(文件,變量)操作,所以不可能會(huì )出現沖突。但是當多線(xiàn)程的情況下,可能會(huì )出現同一個(gè)時(shí)刻兩個(gè)線(xiàn)程在操作同一個(gè)資源,導致資源受損,所以我們須要一種機制來(lái)解決這些沖突帶來(lái)的破壞,通常有加鎖等操作,比如說(shuō)mysql數據庫的innodb表引擎有行級鎖等,文件操作有讀取鎖等等,這些都是她們的程序底層幫我們完成了。所以我們一般只要曉得這些操作,或者這些程序對于線(xiàn)程安全問(wèn)題做了處理,然后就可以在多線(xiàn)程編程中去使用它們了。而這些考慮到線(xiàn)程安全問(wèn)題的程序通常就叫做“線(xiàn)程安全版本”,比如說(shuō)php就有TS版本,這個(gè)TS就是Thread Safety線(xiàn)程安全的意思。下面我們要提到的Queue模塊就是一種線(xiàn)程安全的隊列數據結構,所以我們可以放心的在多線(xiàn)程編程中使用它。
***我們就要來(lái)講講至關(guān)重要的線(xiàn)程阻塞這個(gè)概念了。當我們詳盡學(xué)習完threading模塊以后,大概就曉得怎樣創(chuàng )建和啟動(dòng)線(xiàn)程了。但是假如我們把線(xiàn)程創(chuàng )建好了,然后調用了start方式,那么我們會(huì )發(fā)覺(jué)似乎整個(gè)程序立刻就結束了,這是如何回事呢?其實(shí)這是因為我們在主線(xiàn)程中只有負責啟動(dòng)子線(xiàn)程的代碼,也就意味著(zhù)主線(xiàn)程只有啟動(dòng)子線(xiàn)程的功能,至于子線(xiàn)程執行的這些代碼,他們本質(zhì)上只是寫(xiě)在類(lèi)上面的一個(gè)方式,并沒(méi)在主線(xiàn)程上面真正去執行他,所以主線(xiàn)程啟動(dòng)完子線(xiàn)程以后他的本職工作就早已全部完成了,已經(jīng)光榮離場(chǎng)了。既然主線(xiàn)程都離場(chǎng)了,那么python進(jìn)程就跟隨結束了,那么其他線(xiàn)程也就沒(méi)有顯存空間繼續執行了。所以我們應當是要使主線(xiàn)程大嬸等到所有的子線(xiàn)程鄙人全部執行完畢再光榮離場(chǎng),那么在線(xiàn)程對象中有哪些方式才能把主線(xiàn)程卡住呢?thread.sleep嘛?這確實(shí)是個(gè)辦法,但是到底應當使主線(xiàn)程sleep多久呢?我們并不能確切曉得執行完一個(gè)任務(wù)要多久時(shí)間,肯定不能用這個(gè)辦法。所以我們這個(gè)時(shí)侯應當上網(wǎng)查詢(xún)一下有哪些辦法才能使子線(xiàn)程“卡住”主線(xiàn)程呢?“卡住”這個(gè)詞似乎很粗俗了,其實(shí)說(shuō)專(zhuān)業(yè)一點(diǎn),應該稱(chēng)作“阻塞”,所以我們可以查詢(xún)“python 子線(xiàn)程阻塞主線(xiàn)程”,如果我們會(huì )正確使用搜索引擎的話(huà),應該會(huì )查到一個(gè)方式稱(chēng)作join(),沒(méi)錯,這個(gè)join()方法就是子線(xiàn)程用于阻塞主線(xiàn)程的方式,當子線(xiàn)程還未執行完畢的時(shí)侯,主線(xiàn)程運行到富含join()方法的這一行都會(huì )卡在那里,直到所有線(xiàn)程都執行完畢才能執行join()方法前面的代碼。
假設有一個(gè)這樣的場(chǎng)景,我們須要抓取一個(gè)人的博客,我們曉得這個(gè)人的博客有兩個(gè)頁(yè)面,一個(gè)list.php頁(yè)面顯示的是此博客的所有文章鏈接,還有一個(gè)view.php頁(yè)面顯示的是一篇文章的具體內容。
如果我們要把這個(gè)人的博客上面所有文章內容抓取出來(lái),編寫(xiě)單線(xiàn)程爬蟲(chóng)的思路是:先用正則表達式把這個(gè)list.php頁(yè)面的所有鏈接a標簽的href屬性抓取出來(lái),存入一個(gè)名子稱(chēng)作article_list的鏈表(在python中不叫鏈表,叫做list,中文名列表),然后再用一個(gè)for循環(huán)遍歷這個(gè)article_list鏈表,用各類(lèi)抓取網(wǎng)頁(yè)內容的函數把內容抓取出來(lái)之后存入數據庫。
如果我們要編撰一個(gè)多線(xiàn)程爬蟲(chóng)來(lái)完成這個(gè)任務(wù)的話(huà),就假定我們的程序用10個(gè)線(xiàn)程把,那么我們就要想辦法把之前抓取的article_list平均分成10份,分別把每一份分配給其中一個(gè)子線(xiàn)程。
但是問(wèn)題來(lái)了,如果我們的article_list鏈表寬度不是10的倍數,也就是文章數量并不是10的整數倍,那么***一個(gè)線(xiàn)程都會(huì )比別的線(xiàn)程少分配到一些任務(wù),那么它將會(huì )更快的結束。
如果僅僅是抓取這些只有幾千字的博客文章這看似沒(méi)哪些問(wèn)題,但是假如我們一個(gè)任務(wù)(不一定是抓取網(wǎng)頁(yè)的任務(wù),有可能是物理估算,或者圖形渲染等等歷時(shí)任務(wù))的運行時(shí)間太長(cháng),那么這將導致極大地資源和時(shí)間浪費。我們多線(xiàn)程的目的就是盡可能的借助一切估算資源而且估算時(shí)間,所以我們要想辦法使任務(wù)才能愈發(fā)科學(xué)合理的分配。
并且我還要考慮一種情況,就是文章數量很大的情況下,我們要既能快速抓取到文章內容,又能盡早的看見(jiàn)我們早已抓取到的內容,這種需求在好多CMS采集站上常常會(huì )彰顯下來(lái)。
比如說(shuō)我們如今要抓取的目標博客,有幾千萬(wàn)篇文章,通常這些情況下博客還會(huì )做分頁(yè)處理,那么我們若果根據前面的傳統思路先抓取完list.php的所有頁(yè)面至少就要幾個(gè)小時(shí)甚至幾天,老板假如希望你還能早日顯示出抓取內容,并且盡早將早已抓取到的內容詮釋到我們的CMS采集站上,那么我們就要實(shí)現一邊抓取list.php而且把早已抓取到的數據丟入一個(gè)article_list鏈表,一邊用另一個(gè)線(xiàn)程從article_list鏈表中提取早已抓取到的文章URL地址,然后這個(gè)線(xiàn)程再去對應的URL地址中用正則表達式取到博客文章內容。如何實(shí)現這個(gè)功能呢?
我們就須要同時(shí)開(kāi)啟兩類(lèi)線(xiàn)程,一類(lèi)線(xiàn)程專(zhuān)門(mén)負責抓取list.php中的url之后丟入article_list鏈表,另外一類(lèi)線(xiàn)程專(zhuān)門(mén)負責從article_list中提取出url之后從對應的view.php頁(yè)面中抓取出對應的博客內容。
但是我們是否還記得上面提及過(guò)線(xiàn)程安全這個(gè)概念?前一類(lèi)線(xiàn)程一邊往article_list字段中寫(xiě)入數據,另外那一類(lèi)的線(xiàn)程從article_list中讀取數據但是刪掉早已讀取完畢的數據。但是python中list并不是線(xiàn)程安全版本的數據結構,因此這樣操作會(huì )導致不可預想的錯誤。所以我們可以嘗試使用一個(gè)愈發(fā)便捷且線(xiàn)程安全的數據結構,這就是我們的子標題中所提及的Queue隊列數據結構。
同樣Queue也有一個(gè)join()方法,這個(gè)join()方法雖然和上一個(gè)小節所提到的threading中join()方法差不多,只不過(guò)在Queue中,join()的阻塞條件是當隊列不為空空的時(shí)侯才阻塞,否則繼續執行join()后面的代碼。在這個(gè)爬蟲(chóng)中我便使用了這些技巧來(lái)阻塞主線(xiàn)程而不是直接通過(guò)線(xiàn)程的join方法來(lái)阻塞主線(xiàn)程,這樣的用處是可以不用寫(xiě)一個(gè)死循環(huán)來(lái)判定當前任務(wù)隊列中是否還有未執行完的任務(wù),讓程序運行愈發(fā)高效,也使代碼愈發(fā)柔美。
還有一個(gè)細節就是在python2.7中隊列模塊的名子是Queue,而在python3.x中早已更名為queue,就是首字母大小寫(xiě)的區別,大家假如是復制網(wǎng)上的代碼,要記得這個(gè)小區別。
如果你們學(xué)過(guò)c語(yǔ)言的話(huà),對這個(gè)模塊應當會(huì )太熟悉,他就是一個(gè)負責從命令行中的命令上面提取出附送參數的模塊。比如說(shuō)我們一般在命令行中操作mysql數據庫,就是輸入mysql -h127.0.0.1 -uroot -p,其中mysql前面的“-h127.0.0.1 -uroot -p”就是可以獲取的參數部份。
我們平常在編撰爬蟲(chóng)的時(shí)侯,有一些參數是須要用戶(hù)自己自動(dòng)輸入的,比如說(shuō)mysql的主機IP,用戶(hù)名密碼等等。為了使我們的程序愈加友好通用,有一些配置項是不需要硬編碼在代碼上面,而是在執行他的時(shí)侯我們動(dòng)態(tài)傳入,結合getopt模塊我們就可以實(shí)現這個(gè)功能。
哈希本質(zhì)上就是一類(lèi)物理算法的集合,這種物理算法有個(gè)特點(diǎn)就是你給定一個(gè)參數,他就能輸出另外一個(gè)結果,雖然這個(gè)結果太短,但是他可以近似覺(jué)得是***的。比如說(shuō)我們平常聽(tīng)過(guò)的md5,sha-1等等,他們都屬于哈希算法。他們可以把一些文件,文字經(jīng)過(guò)一系列的物理運算然后弄成短短不到一百位的一段數字中文混和的字符串。
python中的hashlib模塊就為我們封裝好了這種物理運算函數,我們只須要簡(jiǎn)單的調用它就可以完成哈希運算。
為什么在我這個(gè)爬蟲(chóng)中用到了這個(gè)包呢?因為在一些插口懇求中,服務(wù)器須要帶上一些校驗碼,保證插口懇求的數據沒(méi)有被篡改或則遺失,這些校驗碼通常都是hash算法,所以我們須要用到這個(gè)模塊來(lái)完成這些運算。
很多時(shí)侯我們抓取到的數據不是html,而是一些json數據,json本質(zhì)上只是一段富含通配符對的字符串,如果我們須要提取出其中特定的字符串,那么我們須要json這個(gè)模塊來(lái)將這個(gè)json字符串轉換為dict類(lèi)型便捷我們操作。
有的時(shí)侯我們抓取到了一些網(wǎng)頁(yè)內容,但是我們須要將網(wǎng)頁(yè)中的一些特定格式的內容提取下來(lái),比如說(shuō)電子郵箱的格式通常都是上面幾位英語(yǔ)數字字母加一個(gè)@符號加的域名,而要象計算機語(yǔ)言描述這些格式,我們可以使用一種稱(chēng)作正則表達式的表達式來(lái)抒發(fā)出這些格式,并且使計算機手動(dòng)從一大段字符串上將符合這些特定格式的文字匹配下來(lái)。
這個(gè)模塊主要用于處理一些系統方面的事情,在這個(gè)爬蟲(chóng)中我用他來(lái)解決輸出編碼問(wèn)題。
稍微學(xué)過(guò)一點(diǎn)法語(yǔ)的人都還能猜下來(lái)這個(gè)模塊用于處理時(shí)間,在這個(gè)爬蟲(chóng)中我用它來(lái)獲取當前時(shí)間戳,然后通過(guò)在主線(xiàn)程末尾用當前時(shí)間戳除以程序開(kāi)始運行時(shí)的時(shí)間戳,得到程序的運行時(shí)間。
如圖所示,開(kāi)50個(gè)線(xiàn)程抓取100頁(yè)(每頁(yè)30個(gè)貼子,相當于抓取了3000個(gè)貼子)貼吧貼子內容而且從中提取出手機郵箱這個(gè)步驟共歷時(shí)330秒。
這兩個(gè)模塊都是用于處理一些http請求,以及url低格方面的事情。我的爬蟲(chóng)http請求部份的核心代碼就是使用這個(gè)模塊完成的。
這是一個(gè)第三方模塊,用于在python中操作mysql數據庫。
這里我們要注意一個(gè)細節問(wèn)題:mysqldb模塊并不是線(xiàn)程安全版本,意味著(zhù)我們不能在多線(xiàn)程中共享同一個(gè)mysql聯(lián)接句柄。所以你們可以在我的代碼中聽(tīng)到,我在每位線(xiàn)程的構造函數中都傳入了一個(gè)新的mysql聯(lián)接句柄。因此每位子線(xiàn)程只會(huì )用自己獨立的mysql聯(lián)接句柄。
這也是一個(gè)第三方模塊,網(wǎng)上還能找到相關(guān)代碼,這個(gè)模塊主要用于向命令行中輸出彩色字符串。比如說(shuō)我們一般爬蟲(chóng)出現錯誤,要輸出黃色的字體會(huì )比較醒目,就要使用到這個(gè)模塊。
如果你們在網(wǎng)路質(zhì)量不是挺好的環(huán)境下使用該爬蟲(chóng),會(huì )發(fā)覺(jué)有的時(shí)侯會(huì )報如圖所示的異常,這是我為了偷懶并沒(méi)有寫(xiě)各類(lèi)異常處理的邏輯。
通常情況下我們假如要編撰高度自動(dòng)化的爬蟲(chóng),那么就須要意料到我們的爬蟲(chóng)可能會(huì )遇見(jiàn)的所有異常情況郵箱爬蟲(chóng)軟件,針對這種異常情況做處理。
比如說(shuō)如圖所示的錯誤,我們就應當把當時(shí)正在處理的任務(wù)重新伸入任務(wù)隊列,否則我們還會(huì )出現遺漏信息的情況。這也是爬蟲(chóng)編撰的一個(gè)復雜點(diǎn)。
其實(shí)多線(xiàn)程爬蟲(chóng)的編撰也不復雜,多看示例代碼,多自己動(dòng)手嘗試,多去社區,論壇交流,很多精典的書(shū)上對多線(xiàn)程編程也有特別詳盡的解釋。這篇文章本質(zhì)上主要還是一篇科普文章,內容講解的都不是太深入,大家還須要課外自己多結合網(wǎng)上各類(lèi)資料自己學(xué)習。
【編輯推薦】
Python程序員都該用的一個(gè)庫Python正則表達式re模塊簡(jiǎn)明筆記這種方式推動(dòng)Python開(kāi)發(fā)者提升效率Python并發(fā)編程之線(xiàn)程池/進(jìn)程池Python黑魔法之描述符 查看全部
不知道你們春節都是如何過(guò)的,反正欄主是在家睡了三天,醒來(lái)的時(shí)侯登QQ發(fā)覺(jué)有人找我要一份帖吧爬蟲(chóng)的源代碼,想起之前練手的時(shí)侯寫(xiě)過(guò)一個(gè)抓取百度貼吧發(fā)貼記錄中的郵箱與手機號的爬蟲(chóng),于是開(kāi)源分享給你們學(xué)習與參考。
本爬蟲(chóng)主要是對百度貼吧中各類(lèi)貼子的內容進(jìn)行抓取,并且剖析貼子內容將其中的手機號和郵箱地址抓取下來(lái)。主要流程在代碼注釋中有詳盡解釋。
代碼在Windows7 64bit,python 2.7 64bit(安裝mysqldb擴充)以及centos 6.5,python 2.7(帶mysqldb擴充)環(huán)境下測試通過(guò)


工欲善其事必先利其器,大家可以從截圖看出我的環(huán)境是Windows 7 + PyCharm。我的Python環(huán)境是Python 2.7 64bit。這是比較適宜菜鳥(niǎo)使用的開(kāi)發(fā)環(huán)境。然后我再建議你們安裝一個(gè)easy_install,聽(tīng)名子就曉得這是一個(gè)安裝器,它是拿來(lái)安裝一些擴充包的,比如說(shuō)在python中假如我們要操作mysql數據庫的話(huà),python原生是不支持的,我們必須安裝mysqldb包來(lái)讓python可以操作mysql數據庫,如果有easy_install的話(huà)我們只須要一行命令就可以快速安裝號mysqldb擴充包,他如同php中的composer,centos中的yum,Ubuntu中的apt-get一樣便捷。
相關(guān)工具可在我的github中找到:cw1997/python-tools,其中easy_install的安裝只須要在python命令行下運行哪個(gè)py腳本之后稍等片刻即可郵箱爬蟲(chóng)軟件,他會(huì )手動(dòng)加入Windows的環(huán)境變量,在Windows命令行下假如輸入easy_install有回顯說(shuō)明安裝成功。
至于電腦硬件其實(shí)是越快越好,內存至少8G起步,因為爬蟲(chóng)本身須要大量?jì)Υ婧徒馕鲋虚g數據,尤其是多線(xiàn)程爬蟲(chóng),在遇到抓取帶有分頁(yè)的列表和詳情頁(yè),并且抓取數據量很大的情況下使用queue隊列分配抓取任務(wù)會(huì )特別占顯存。包括有的時(shí)候我們抓取的數據是使用json,如果使用mongodb等nosql數據庫儲存,也會(huì )太占顯存。
網(wǎng)絡(luò )聯(lián)接建議使用有線(xiàn)網(wǎng),因為市面上一些劣質(zhì)的無(wú)線(xiàn)路由器和普通的民用無(wú)線(xiàn)網(wǎng)卡在線(xiàn)程開(kāi)的比較大的情況下會(huì )出現間歇性斷網(wǎng)或則數據遺失,掉包等情況,這個(gè)我親有感受。
至于操作系統和python其實(shí)肯定是選擇64位。如果你使用的是32位的操作系統,那么難以使用大顯存。如果你使用的是32位的python,可能在小規模抓取數據的時(shí)侯覺(jué)得不出有哪些問(wèn)題,但是當數據量變大的時(shí)侯,比如說(shuō)某個(gè)列表,隊列,字典上面儲存了大量數據,導致python的顯存占用超過(guò)2g的時(shí)侯會(huì )報顯存溢出錯誤。原因在我以前segmentfault上提過(guò)的問(wèn)題中依云的回答有解釋?zhuān)╦ava – python只要占用顯存達到1.9G以后httplib模塊就開(kāi)始報內存溢出錯誤 – SegmentFault)
如果你打算使用mysql儲存數據,建議使用mysql5.5之后的版本,因為mysql5.5版本支持json數據類(lèi)型,這樣的話(huà)可以?huà)仐塵ongodb了。(有人說(shuō)mysql會(huì )比mongodb穩定一點(diǎn),這個(gè)我不確定。)
至于現今python都早已出了3.x版本了,為什么我這兒還使用的是python2.7?我個(gè)人選擇2.7版本的緣由是自己當年很早曾經(jīng)買(mǎi)的python核心編程這本書(shū)是第二版的,仍然以2.7為示例版本。并且目前網(wǎng)上一直有大量的教程資料是以2.7為版本講解,2.7在個(gè)別方面與3.x還是有很大差異,如果我們沒(méi)有學(xué)過(guò)2.7,可能對于一些細微的句型差異不是太懂會(huì )導致我們理解上出現誤差,或者看不懂demo代碼。而且如今還是有部份依賴(lài)包只兼容2.7版本。我的建議是假如你是打算急著(zhù)學(xué)python之后去公司工作,并且公司沒(méi)有老代碼須要維護,那么可以考慮直接上手3.x,如果你有比較充沛的時(shí)間,并且沒(méi)有太系統的大牛帶,只能借助網(wǎng)上零零散散的博客文章來(lái)學(xué)習,那么還是先學(xué)2.7在學(xué)3.x,畢竟學(xué)會(huì )了2.7以后3.x上手也很快。
其實(shí)對于任何軟件項目而言,我們但凡想知道編撰這個(gè)項目須要哪些知識點(diǎn),我們都可以觀(guān)察一下這個(gè)項目的主要入口文件都導出了什么包。

現在來(lái)看一下我們這個(gè)項目,作為一個(gè)剛接觸python的人,可能有一些包幾乎都沒(méi)有用過(guò),那么我們在本小節就來(lái)簡(jiǎn)單的談?wù)勥@種包起哪些作用,要把握她們分別會(huì )涉及到哪些知識點(diǎn),這些知識點(diǎn)的關(guān)鍵詞是哪些。這篇文章并不會(huì )耗費長(cháng)篇大論來(lái)從基礎講起,因此我們要學(xué)會(huì )善用百度,搜索那些知識點(diǎn)的關(guān)鍵詞來(lái)自學(xué)。下面就來(lái)一一剖析一下這種知識點(diǎn)。
我們的爬蟲(chóng)抓取數據本質(zhì)上就是不停的發(fā)起http請求,獲取http響應,將其存入我們的筆記本中。了解http協(xié)議有助于我們在抓取數據的時(shí)侯對一些才能加速抓取速率的參數才能精準的控制,比如說(shuō)keep-alive等。
我們平常編撰的程序都是單線(xiàn)程程序,我們寫(xiě)的代碼都在主線(xiàn)程上面運行,這個(gè)主線(xiàn)程又運行在python進(jìn)程中。關(guān)于線(xiàn)程和進(jìn)程的解釋可以參考阮一峰的博客:進(jìn)程與線(xiàn)程的一個(gè)簡(jiǎn)單解釋 – 阮一峰的網(wǎng)路日志
在python中實(shí)現多線(xiàn)程是通過(guò)一個(gè)名子稱(chēng)作threading的模塊來(lái)實(shí)現。之前還有thread模塊,但是threading對于線(xiàn)程的控制更強,因此我們后來(lái)都改用threading來(lái)實(shí)現多線(xiàn)程編程了。
關(guān)于threading多線(xiàn)程的一些用法,我認為這篇文章不錯:[python] 專(zhuān)題八.多線(xiàn)程編程之thread和threading 大家可以參考參考。
簡(jiǎn)單來(lái)說(shuō),使用threading模塊編撰多線(xiàn)程程序,就是先自己定義一個(gè)類(lèi),然后這個(gè)類(lèi)要承繼threading.Thread,并且把每位線(xiàn)程要做的工作代碼講到一個(gè)類(lèi)的run方式中,當然若果線(xiàn)程本身在創(chuàng )建的時(shí)侯假如要做一些初始化工作,那么就要在他的__init__方法中編撰好初始化工作所要執行的代碼,這個(gè)方式如同php,java中的構造方式一樣。
這里還要額外講的一點(diǎn)就是線(xiàn)程安全這個(gè)概念。通常情況下我們單線(xiàn)程情況下每位時(shí)刻只有一個(gè)線(xiàn)程在對資源(文件,變量)操作,所以不可能會(huì )出現沖突。但是當多線(xiàn)程的情況下,可能會(huì )出現同一個(gè)時(shí)刻兩個(gè)線(xiàn)程在操作同一個(gè)資源,導致資源受損,所以我們須要一種機制來(lái)解決這些沖突帶來(lái)的破壞,通常有加鎖等操作,比如說(shuō)mysql數據庫的innodb表引擎有行級鎖等,文件操作有讀取鎖等等,這些都是她們的程序底層幫我們完成了。所以我們一般只要曉得這些操作,或者這些程序對于線(xiàn)程安全問(wèn)題做了處理,然后就可以在多線(xiàn)程編程中去使用它們了。而這些考慮到線(xiàn)程安全問(wèn)題的程序通常就叫做“線(xiàn)程安全版本”,比如說(shuō)php就有TS版本,這個(gè)TS就是Thread Safety線(xiàn)程安全的意思。下面我們要提到的Queue模塊就是一種線(xiàn)程安全的隊列數據結構,所以我們可以放心的在多線(xiàn)程編程中使用它。
***我們就要來(lái)講講至關(guān)重要的線(xiàn)程阻塞這個(gè)概念了。當我們詳盡學(xué)習完threading模塊以后,大概就曉得怎樣創(chuàng )建和啟動(dòng)線(xiàn)程了。但是假如我們把線(xiàn)程創(chuàng )建好了,然后調用了start方式,那么我們會(huì )發(fā)覺(jué)似乎整個(gè)程序立刻就結束了,這是如何回事呢?其實(shí)這是因為我們在主線(xiàn)程中只有負責啟動(dòng)子線(xiàn)程的代碼,也就意味著(zhù)主線(xiàn)程只有啟動(dòng)子線(xiàn)程的功能,至于子線(xiàn)程執行的這些代碼,他們本質(zhì)上只是寫(xiě)在類(lèi)上面的一個(gè)方式,并沒(méi)在主線(xiàn)程上面真正去執行他,所以主線(xiàn)程啟動(dòng)完子線(xiàn)程以后他的本職工作就早已全部完成了,已經(jīng)光榮離場(chǎng)了。既然主線(xiàn)程都離場(chǎng)了,那么python進(jìn)程就跟隨結束了,那么其他線(xiàn)程也就沒(méi)有顯存空間繼續執行了。所以我們應當是要使主線(xiàn)程大嬸等到所有的子線(xiàn)程鄙人全部執行完畢再光榮離場(chǎng),那么在線(xiàn)程對象中有哪些方式才能把主線(xiàn)程卡住呢?thread.sleep嘛?這確實(shí)是個(gè)辦法,但是到底應當使主線(xiàn)程sleep多久呢?我們并不能確切曉得執行完一個(gè)任務(wù)要多久時(shí)間,肯定不能用這個(gè)辦法。所以我們這個(gè)時(shí)侯應當上網(wǎng)查詢(xún)一下有哪些辦法才能使子線(xiàn)程“卡住”主線(xiàn)程呢?“卡住”這個(gè)詞似乎很粗俗了,其實(shí)說(shuō)專(zhuān)業(yè)一點(diǎn),應該稱(chēng)作“阻塞”,所以我們可以查詢(xún)“python 子線(xiàn)程阻塞主線(xiàn)程”,如果我們會(huì )正確使用搜索引擎的話(huà),應該會(huì )查到一個(gè)方式稱(chēng)作join(),沒(méi)錯,這個(gè)join()方法就是子線(xiàn)程用于阻塞主線(xiàn)程的方式,當子線(xiàn)程還未執行完畢的時(shí)侯,主線(xiàn)程運行到富含join()方法的這一行都會(huì )卡在那里,直到所有線(xiàn)程都執行完畢才能執行join()方法前面的代碼。
假設有一個(gè)這樣的場(chǎng)景,我們須要抓取一個(gè)人的博客,我們曉得這個(gè)人的博客有兩個(gè)頁(yè)面,一個(gè)list.php頁(yè)面顯示的是此博客的所有文章鏈接,還有一個(gè)view.php頁(yè)面顯示的是一篇文章的具體內容。
如果我們要把這個(gè)人的博客上面所有文章內容抓取出來(lái),編寫(xiě)單線(xiàn)程爬蟲(chóng)的思路是:先用正則表達式把這個(gè)list.php頁(yè)面的所有鏈接a標簽的href屬性抓取出來(lái),存入一個(gè)名子稱(chēng)作article_list的鏈表(在python中不叫鏈表,叫做list,中文名列表),然后再用一個(gè)for循環(huán)遍歷這個(gè)article_list鏈表,用各類(lèi)抓取網(wǎng)頁(yè)內容的函數把內容抓取出來(lái)之后存入數據庫。
如果我們要編撰一個(gè)多線(xiàn)程爬蟲(chóng)來(lái)完成這個(gè)任務(wù)的話(huà),就假定我們的程序用10個(gè)線(xiàn)程把,那么我們就要想辦法把之前抓取的article_list平均分成10份,分別把每一份分配給其中一個(gè)子線(xiàn)程。
但是問(wèn)題來(lái)了,如果我們的article_list鏈表寬度不是10的倍數,也就是文章數量并不是10的整數倍,那么***一個(gè)線(xiàn)程都會(huì )比別的線(xiàn)程少分配到一些任務(wù),那么它將會(huì )更快的結束。
如果僅僅是抓取這些只有幾千字的博客文章這看似沒(méi)哪些問(wèn)題,但是假如我們一個(gè)任務(wù)(不一定是抓取網(wǎng)頁(yè)的任務(wù),有可能是物理估算,或者圖形渲染等等歷時(shí)任務(wù))的運行時(shí)間太長(cháng),那么這將導致極大地資源和時(shí)間浪費。我們多線(xiàn)程的目的就是盡可能的借助一切估算資源而且估算時(shí)間,所以我們要想辦法使任務(wù)才能愈發(fā)科學(xué)合理的分配。
并且我還要考慮一種情況,就是文章數量很大的情況下,我們要既能快速抓取到文章內容,又能盡早的看見(jiàn)我們早已抓取到的內容,這種需求在好多CMS采集站上常常會(huì )彰顯下來(lái)。
比如說(shuō)我們如今要抓取的目標博客,有幾千萬(wàn)篇文章,通常這些情況下博客還會(huì )做分頁(yè)處理,那么我們若果根據前面的傳統思路先抓取完list.php的所有頁(yè)面至少就要幾個(gè)小時(shí)甚至幾天,老板假如希望你還能早日顯示出抓取內容,并且盡早將早已抓取到的內容詮釋到我們的CMS采集站上,那么我們就要實(shí)現一邊抓取list.php而且把早已抓取到的數據丟入一個(gè)article_list鏈表,一邊用另一個(gè)線(xiàn)程從article_list鏈表中提取早已抓取到的文章URL地址,然后這個(gè)線(xiàn)程再去對應的URL地址中用正則表達式取到博客文章內容。如何實(shí)現這個(gè)功能呢?
我們就須要同時(shí)開(kāi)啟兩類(lèi)線(xiàn)程,一類(lèi)線(xiàn)程專(zhuān)門(mén)負責抓取list.php中的url之后丟入article_list鏈表,另外一類(lèi)線(xiàn)程專(zhuān)門(mén)負責從article_list中提取出url之后從對應的view.php頁(yè)面中抓取出對應的博客內容。
但是我們是否還記得上面提及過(guò)線(xiàn)程安全這個(gè)概念?前一類(lèi)線(xiàn)程一邊往article_list字段中寫(xiě)入數據,另外那一類(lèi)的線(xiàn)程從article_list中讀取數據但是刪掉早已讀取完畢的數據。但是python中list并不是線(xiàn)程安全版本的數據結構,因此這樣操作會(huì )導致不可預想的錯誤。所以我們可以嘗試使用一個(gè)愈發(fā)便捷且線(xiàn)程安全的數據結構,這就是我們的子標題中所提及的Queue隊列數據結構。
同樣Queue也有一個(gè)join()方法,這個(gè)join()方法雖然和上一個(gè)小節所提到的threading中join()方法差不多,只不過(guò)在Queue中,join()的阻塞條件是當隊列不為空空的時(shí)侯才阻塞,否則繼續執行join()后面的代碼。在這個(gè)爬蟲(chóng)中我便使用了這些技巧來(lái)阻塞主線(xiàn)程而不是直接通過(guò)線(xiàn)程的join方法來(lái)阻塞主線(xiàn)程,這樣的用處是可以不用寫(xiě)一個(gè)死循環(huán)來(lái)判定當前任務(wù)隊列中是否還有未執行完的任務(wù),讓程序運行愈發(fā)高效,也使代碼愈發(fā)柔美。
還有一個(gè)細節就是在python2.7中隊列模塊的名子是Queue,而在python3.x中早已更名為queue,就是首字母大小寫(xiě)的區別,大家假如是復制網(wǎng)上的代碼,要記得這個(gè)小區別。
如果你們學(xué)過(guò)c語(yǔ)言的話(huà),對這個(gè)模塊應當會(huì )太熟悉,他就是一個(gè)負責從命令行中的命令上面提取出附送參數的模塊。比如說(shuō)我們一般在命令行中操作mysql數據庫,就是輸入mysql -h127.0.0.1 -uroot -p,其中mysql前面的“-h127.0.0.1 -uroot -p”就是可以獲取的參數部份。
我們平常在編撰爬蟲(chóng)的時(shí)侯,有一些參數是須要用戶(hù)自己自動(dòng)輸入的,比如說(shuō)mysql的主機IP,用戶(hù)名密碼等等。為了使我們的程序愈加友好通用,有一些配置項是不需要硬編碼在代碼上面,而是在執行他的時(shí)侯我們動(dòng)態(tài)傳入,結合getopt模塊我們就可以實(shí)現這個(gè)功能。
哈希本質(zhì)上就是一類(lèi)物理算法的集合,這種物理算法有個(gè)特點(diǎn)就是你給定一個(gè)參數,他就能輸出另外一個(gè)結果,雖然這個(gè)結果太短,但是他可以近似覺(jué)得是***的。比如說(shuō)我們平常聽(tīng)過(guò)的md5,sha-1等等,他們都屬于哈希算法。他們可以把一些文件,文字經(jīng)過(guò)一系列的物理運算然后弄成短短不到一百位的一段數字中文混和的字符串。
python中的hashlib模塊就為我們封裝好了這種物理運算函數,我們只須要簡(jiǎn)單的調用它就可以完成哈希運算。
為什么在我這個(gè)爬蟲(chóng)中用到了這個(gè)包呢?因為在一些插口懇求中,服務(wù)器須要帶上一些校驗碼,保證插口懇求的數據沒(méi)有被篡改或則遺失,這些校驗碼通常都是hash算法,所以我們須要用到這個(gè)模塊來(lái)完成這些運算。
很多時(shí)侯我們抓取到的數據不是html,而是一些json數據,json本質(zhì)上只是一段富含通配符對的字符串,如果我們須要提取出其中特定的字符串,那么我們須要json這個(gè)模塊來(lái)將這個(gè)json字符串轉換為dict類(lèi)型便捷我們操作。
有的時(shí)侯我們抓取到了一些網(wǎng)頁(yè)內容,但是我們須要將網(wǎng)頁(yè)中的一些特定格式的內容提取下來(lái),比如說(shuō)電子郵箱的格式通常都是上面幾位英語(yǔ)數字字母加一個(gè)@符號加的域名,而要象計算機語(yǔ)言描述這些格式,我們可以使用一種稱(chēng)作正則表達式的表達式來(lái)抒發(fā)出這些格式,并且使計算機手動(dòng)從一大段字符串上將符合這些特定格式的文字匹配下來(lái)。
這個(gè)模塊主要用于處理一些系統方面的事情,在這個(gè)爬蟲(chóng)中我用他來(lái)解決輸出編碼問(wèn)題。
稍微學(xué)過(guò)一點(diǎn)法語(yǔ)的人都還能猜下來(lái)這個(gè)模塊用于處理時(shí)間,在這個(gè)爬蟲(chóng)中我用它來(lái)獲取當前時(shí)間戳,然后通過(guò)在主線(xiàn)程末尾用當前時(shí)間戳除以程序開(kāi)始運行時(shí)的時(shí)間戳,得到程序的運行時(shí)間。

如圖所示,開(kāi)50個(gè)線(xiàn)程抓取100頁(yè)(每頁(yè)30個(gè)貼子,相當于抓取了3000個(gè)貼子)貼吧貼子內容而且從中提取出手機郵箱這個(gè)步驟共歷時(shí)330秒。
這兩個(gè)模塊都是用于處理一些http請求,以及url低格方面的事情。我的爬蟲(chóng)http請求部份的核心代碼就是使用這個(gè)模塊完成的。
這是一個(gè)第三方模塊,用于在python中操作mysql數據庫。
這里我們要注意一個(gè)細節問(wèn)題:mysqldb模塊并不是線(xiàn)程安全版本,意味著(zhù)我們不能在多線(xiàn)程中共享同一個(gè)mysql聯(lián)接句柄。所以你們可以在我的代碼中聽(tīng)到,我在每位線(xiàn)程的構造函數中都傳入了一個(gè)新的mysql聯(lián)接句柄。因此每位子線(xiàn)程只會(huì )用自己獨立的mysql聯(lián)接句柄。
這也是一個(gè)第三方模塊,網(wǎng)上還能找到相關(guān)代碼,這個(gè)模塊主要用于向命令行中輸出彩色字符串。比如說(shuō)我們一般爬蟲(chóng)出現錯誤,要輸出黃色的字體會(huì )比較醒目,就要使用到這個(gè)模塊。

如果你們在網(wǎng)路質(zhì)量不是挺好的環(huán)境下使用該爬蟲(chóng),會(huì )發(fā)覺(jué)有的時(shí)侯會(huì )報如圖所示的異常,這是我為了偷懶并沒(méi)有寫(xiě)各類(lèi)異常處理的邏輯。
通常情況下我們假如要編撰高度自動(dòng)化的爬蟲(chóng),那么就須要意料到我們的爬蟲(chóng)可能會(huì )遇見(jiàn)的所有異常情況郵箱爬蟲(chóng)軟件,針對這種異常情況做處理。
比如說(shuō)如圖所示的錯誤,我們就應當把當時(shí)正在處理的任務(wù)重新伸入任務(wù)隊列,否則我們還會(huì )出現遺漏信息的情況。這也是爬蟲(chóng)編撰的一個(gè)復雜點(diǎn)。
其實(shí)多線(xiàn)程爬蟲(chóng)的編撰也不復雜,多看示例代碼,多自己動(dòng)手嘗試,多去社區,論壇交流,很多精典的書(shū)上對多線(xiàn)程編程也有特別詳盡的解釋。這篇文章本質(zhì)上主要還是一篇科普文章,內容講解的都不是太深入,大家還須要課外自己多結合網(wǎng)上各類(lèi)資料自己學(xué)習。
【編輯推薦】
Python程序員都該用的一個(gè)庫Python正則表達式re模塊簡(jiǎn)明筆記這種方式推動(dòng)Python開(kāi)發(fā)者提升效率Python并發(fā)編程之線(xiàn)程池/進(jìn)程池Python黑魔法之描述符
Python爬蟲(chóng)借助cookie實(shí)現模擬登錄實(shí)例解讀
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 464 次瀏覽 ? 2020-07-05 08:00
舉個(gè)事例,某些網(wǎng)站是須要登陸后就能得到你想要的信息的,不登錄只能是旅客模式,那么我們可以借助Urllib2庫保存我們曾經(jīng)登陸過(guò)的Cookie,之后載入cookie獲取我們想要的頁(yè)面,然后再進(jìn)行抓取。理解cookie主要是為我們快捷模擬登陸抓取目標網(wǎng)頁(yè)作出打算。
我之前的貼子中使用過(guò)urlopen()這個(gè)函數來(lái)打開(kāi)網(wǎng)頁(yè)進(jìn)行抓取,這僅僅只是一個(gè)簡(jiǎn)單的Python網(wǎng)頁(yè)打開(kāi)器,其參數也僅有urlopen(url,data,timeout),這三個(gè)參數對于我們獲取目標網(wǎng)頁(yè)的cookie是遠遠不夠的。這時(shí)候我們就要借助到另外一種Opener——CookieJar。
cookielib也是Python進(jìn)行爬蟲(chóng)的一個(gè)重要模塊python爬蟲(chóng)模擬登錄python爬蟲(chóng)模擬登錄,他能與urllib2互相結合一起爬取想要的內容。該模塊的CookieJar類(lèi)的對象可以捕獲cookie并在后續聯(lián)接懇求時(shí)重新發(fā)送,這樣就可以實(shí)現我們所須要的模擬登陸功能。
這里非常說(shuō)明一下,cookielib是在py2.7中自帶的模塊,無(wú)需重新安裝,想要查看其自帶模塊可以查看Python目錄下的Lib文件夾,里面有所有安裝的模塊。我一開(kāi)始沒(méi)想起來(lái),在pycharm中居然沒(méi)有搜到cookielib,使用了快捷安裝也報錯:Couldn't find index page for 'Cookielib' (maybe misspelled?)
之后才想起來(lái)是不是自帶的就有,沒(méi)想到去lib文件夾一看還真有,白白浪費半個(gè)小時(shí)各類(lèi)瞎折騰~~
下面我們就來(lái)介紹一下這個(gè)模塊,該模塊主要的對象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
它們的關(guān)系:CookieJar —-派生—->FileCookieJar —-派生—–>MozillaCookieJar和LWPCookieJar 主要用法,我們下邊也會(huì )提到。urllib2.urlopen()函數不支持驗證、cookie或則其它HTTP中級功能。要支持這種功能,必須使用build_opener()(可以用于使python程序模擬瀏覽器進(jìn)行訪(fǎng)問(wèn),作用你懂得~)函數創(chuàng )建自定義Opener對象。
1、首先我們就來(lái)獲取一下網(wǎng)站的cookie
例子:
#coding=utf-8
import cookielib
import urllib2
mycookie = cookielib.CookieJar() #聲明一個(gè)CookieJar的類(lèi)對象保存cookie(注意CookieJar的大小寫(xiě)問(wèn)題)
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2庫中的HTTPCookieProcessor來(lái)聲明一個(gè)處理cookie的處理器
opener = urllib2.build_opener(handler) #利用handler來(lái)構造opener,opener的用法和urlopen()類(lèi)似
response = opener.open("http://www.baidu.com") #opener返回的一個(gè)應答對象response
for item in my.cookie:
print"name="+item.name
print"value="+item.value
結果:
name=BAIDUID
value=73BD718962A6EA0DAD4CB9578A08FDD0:FG=1
name=BIDUPSID
value=73BD718962A6EA0DAD4CB9578A08FDD0
name=H_PS_PSSID
value=1450_19035_21122_17001_21454_21409_21394_21377_21526_21189_21398
name=PSTM
value=1478834132
name=BDSVRTM
value=0
name=BD_HOME
value=0
這樣我們就得到了一個(gè)最簡(jiǎn)單的cookie。
2、將cookie保存到文件
上面我們得到了cookie,下面我們學(xué)習怎么保存cookie。在這里我們使用它的泛型MozillaCookieJar來(lái)實(shí)現Cookie的保存
例子:
#coding=utf-8
import cookielib
import urllib2
mycookie = cookielib.MozillaCookieJar() #聲明一個(gè)MozillaCookieJar的類(lèi)對象保存cookie(注意MozillaCookieJar的大小寫(xiě)問(wèn)題)
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2庫中的HTTPCookieProcessor來(lái)聲明一個(gè)處理cookie的處理器
opener = urllib2.build_opener(handler) #利用handler來(lái)構造opener,opener的用法和urlopen()類(lèi)似
response = opener.open("http://www.baidu.com") #opener返回的一個(gè)應答對象response
for item in mycookie:
print"name="+item.name
print"value="+item.value
filename='mycookie.txt'#設定保存的文件名
mycookie.save(filename,ignore_discard=True, ignore_expires=True)
將里面的事例簡(jiǎn)單變型就可以得到本例,使用了CookieJar的泛型MozillaCookiJar,為什么呢?我們將MozillaCookiJar換成CookieJar試試,下面一張圖你能夠明白:
CookieJar是沒(méi)有保存save屬性的~
save()這個(gè)方式中:ignore_discard的意思是雖然cookies將被遺棄也將它保存出來(lái),ignore_expires的意思是假如在該文件中cookies早已存在,則覆蓋原文件寫(xiě)入,在這里,我們將這兩個(gè)全部設置為T(mén)rue。運行以后,cookies將被保存到cookie.txt文件中,我們查看一下內容:
這樣我們就成功保存了我們想要的cookie
3、從文件中獲取cookie并訪(fǎng)問(wèn) 查看全部
Cookie,指個(gè)別網(wǎng)站為了分辨用戶(hù)身分、進(jìn)行session跟蹤而存儲在用戶(hù)本地終端上的數據(通常經(jīng)過(guò)加密)。
舉個(gè)事例,某些網(wǎng)站是須要登陸后就能得到你想要的信息的,不登錄只能是旅客模式,那么我們可以借助Urllib2庫保存我們曾經(jīng)登陸過(guò)的Cookie,之后載入cookie獲取我們想要的頁(yè)面,然后再進(jìn)行抓取。理解cookie主要是為我們快捷模擬登陸抓取目標網(wǎng)頁(yè)作出打算。
我之前的貼子中使用過(guò)urlopen()這個(gè)函數來(lái)打開(kāi)網(wǎng)頁(yè)進(jìn)行抓取,這僅僅只是一個(gè)簡(jiǎn)單的Python網(wǎng)頁(yè)打開(kāi)器,其參數也僅有urlopen(url,data,timeout),這三個(gè)參數對于我們獲取目標網(wǎng)頁(yè)的cookie是遠遠不夠的。這時(shí)候我們就要借助到另外一種Opener——CookieJar。
cookielib也是Python進(jìn)行爬蟲(chóng)的一個(gè)重要模塊python爬蟲(chóng)模擬登錄python爬蟲(chóng)模擬登錄,他能與urllib2互相結合一起爬取想要的內容。該模塊的CookieJar類(lèi)的對象可以捕獲cookie并在后續聯(lián)接懇求時(shí)重新發(fā)送,這樣就可以實(shí)現我們所須要的模擬登陸功能。
這里非常說(shuō)明一下,cookielib是在py2.7中自帶的模塊,無(wú)需重新安裝,想要查看其自帶模塊可以查看Python目錄下的Lib文件夾,里面有所有安裝的模塊。我一開(kāi)始沒(méi)想起來(lái),在pycharm中居然沒(méi)有搜到cookielib,使用了快捷安裝也報錯:Couldn't find index page for 'Cookielib' (maybe misspelled?)

之后才想起來(lái)是不是自帶的就有,沒(méi)想到去lib文件夾一看還真有,白白浪費半個(gè)小時(shí)各類(lèi)瞎折騰~~
下面我們就來(lái)介紹一下這個(gè)模塊,該模塊主要的對象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
它們的關(guān)系:CookieJar —-派生—->FileCookieJar —-派生—–>MozillaCookieJar和LWPCookieJar 主要用法,我們下邊也會(huì )提到。urllib2.urlopen()函數不支持驗證、cookie或則其它HTTP中級功能。要支持這種功能,必須使用build_opener()(可以用于使python程序模擬瀏覽器進(jìn)行訪(fǎng)問(wèn),作用你懂得~)函數創(chuàng )建自定義Opener對象。
1、首先我們就來(lái)獲取一下網(wǎng)站的cookie
例子:
#coding=utf-8
import cookielib
import urllib2
mycookie = cookielib.CookieJar() #聲明一個(gè)CookieJar的類(lèi)對象保存cookie(注意CookieJar的大小寫(xiě)問(wèn)題)
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2庫中的HTTPCookieProcessor來(lái)聲明一個(gè)處理cookie的處理器
opener = urllib2.build_opener(handler) #利用handler來(lái)構造opener,opener的用法和urlopen()類(lèi)似
response = opener.open("http://www.baidu.com") #opener返回的一個(gè)應答對象response
for item in my.cookie:
print"name="+item.name
print"value="+item.value
結果:
name=BAIDUID
value=73BD718962A6EA0DAD4CB9578A08FDD0:FG=1
name=BIDUPSID
value=73BD718962A6EA0DAD4CB9578A08FDD0
name=H_PS_PSSID
value=1450_19035_21122_17001_21454_21409_21394_21377_21526_21189_21398
name=PSTM
value=1478834132
name=BDSVRTM
value=0
name=BD_HOME
value=0
這樣我們就得到了一個(gè)最簡(jiǎn)單的cookie。
2、將cookie保存到文件
上面我們得到了cookie,下面我們學(xué)習怎么保存cookie。在這里我們使用它的泛型MozillaCookieJar來(lái)實(shí)現Cookie的保存
例子:
#coding=utf-8
import cookielib
import urllib2
mycookie = cookielib.MozillaCookieJar() #聲明一個(gè)MozillaCookieJar的類(lèi)對象保存cookie(注意MozillaCookieJar的大小寫(xiě)問(wèn)題)
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2庫中的HTTPCookieProcessor來(lái)聲明一個(gè)處理cookie的處理器
opener = urllib2.build_opener(handler) #利用handler來(lái)構造opener,opener的用法和urlopen()類(lèi)似
response = opener.open("http://www.baidu.com") #opener返回的一個(gè)應答對象response
for item in mycookie:
print"name="+item.name
print"value="+item.value
filename='mycookie.txt'#設定保存的文件名
mycookie.save(filename,ignore_discard=True, ignore_expires=True)
將里面的事例簡(jiǎn)單變型就可以得到本例,使用了CookieJar的泛型MozillaCookiJar,為什么呢?我們將MozillaCookiJar換成CookieJar試試,下面一張圖你能夠明白:

CookieJar是沒(méi)有保存save屬性的~
save()這個(gè)方式中:ignore_discard的意思是雖然cookies將被遺棄也將它保存出來(lái),ignore_expires的意思是假如在該文件中cookies早已存在,則覆蓋原文件寫(xiě)入,在這里,我們將這兩個(gè)全部設置為T(mén)rue。運行以后,cookies將被保存到cookie.txt文件中,我們查看一下內容:

這樣我們就成功保存了我們想要的cookie
3、從文件中獲取cookie并訪(fǎng)問(wèn)
從python基礎到爬蟲(chóng)的書(shū)有哪些值得推薦
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 498 次瀏覽 ? 2020-07-04 08:00
第一個(gè)
個(gè)人覺(jué)得《Python學(xué)習手冊:第3版》是學(xué)習語(yǔ)言基礎比較好的書(shū)了.
《Python學(xué)習手冊(第3版)》講述了:Python可移植、功能強悍、易于使用,是編撰獨立應用程序和腳本應用程序的理想選擇。無(wú)論你是剛接觸編程或則剛接觸Python,通過(guò)學(xué)習《Python學(xué)習手冊(第3版)》,你可以迅速高效地精通核心Python語(yǔ)言基礎。讀完《Python學(xué)習手冊(第3版)》,你會(huì )對這門(mén)語(yǔ)言有足夠的了解,從而可以在你所從事的任何應用領(lǐng)域中使用它。
《Python學(xué)習手冊(第3版)》是作者依據過(guò)去10年用于教學(xué)而廣為人知的培訓課程的材料編撰而成的。除了有許多詳盡說(shuō)明和每章小結之外,每章還包括一個(gè)頭腦風(fēng)暴:這是《Python學(xué)習手冊(第3版)》獨特的一部分,配合以實(shí)用的練習題和復習題,讓讀者練習新學(xué)的方法并測試自己的理解程度。
《Python學(xué)習手冊(第3版)》包括:
類(lèi)型和操作——深入討論Python主要的外置對象類(lèi)型:數字、列表和字典等。
語(yǔ)句和句型——在Python中輸入代碼來(lái)構建并處理對象,以及Python通常的句型模型。
函數——Python基本的面向過(guò)程工具,用于組織代碼和重用。
模塊——封裝句子、函數以及其他工具,從而可以組織成較大的組件。
類(lèi)和OOP——Python可選的面向對象編程工具,可用于組織程序代碼因而實(shí)現訂制和重用。
異常和工具——異常處理模型和句子,并介紹編撰更大程序的開(kāi)發(fā)工具。
討論Python 3.0。
《Python學(xué)習手冊(第3版)》讓你對Python語(yǔ)言有深入而完整的了解,從而幫助你理解今后碰到的任何Python應用程序實(shí)例。如果你打算探求Google和YouTube為何選中了Python,《Python學(xué)習手冊(第3版)》就是你入門(mén)的最佳手冊。
第二個(gè)
《Python基礎教程(第2版·修訂版)》也是精典的Python入門(mén)教程,層次鮮明,結構嚴謹,內容詳實(shí),特別是最后幾章,作者將上面述說(shuō)的內容應用到10個(gè)引人入勝的項目中,并以模板的方式介紹了項目的開(kāi)發(fā)過(guò)程,手把手院長(cháng)Python開(kāi)發(fā),讓讀者從項目中展現Python的真正魅力。這本書(shū)既適宜初學(xué)者筑牢基礎,又能幫助Python程序員提高技能,即使是Python方面的技術(shù)專(zhuān)家,也能從書(shū)里找到耳目一新的內容。
第三個(gè)
《“笨辦法”學(xué)Python(第3版)》是一本Python入門(mén)書(shū)籍,適合對計算機了解不多,沒(méi)有學(xué)過(guò)編程,但對編程感興趣的初學(xué)者使用。這本書(shū)結構十分簡(jiǎn)單,其中覆蓋了輸入/輸出、變量和函數三個(gè)主題,以及一些比較中級的話(huà)題,如條件判定、循環(huán)、類(lèi)和對象、代碼測試及項目的實(shí)現等。每一章的格式基本相同,以代碼習題開(kāi)始,按照說(shuō)明編撰代碼,運行并檢測結果,然后再做附加練習。這本書(shū)以習題的方法引導讀者一步一步學(xué)習編程,從簡(jiǎn)單的復印仍然講授到完整項目的實(shí)現,讓初學(xué)者從基礎的編程技術(shù)入手,最終體驗到軟件開(kāi)發(fā)的基本過(guò)程。
【大牛評價(jià)】hardway(笨辦法)比較適宜起步編程,作為Python的入門(mén)挺不錯。
第四個(gè)
在這里給你們推薦最后一本《集體智慧編程》
本書(shū)以機器學(xué)習與估算統計為主題背景,專(zhuān)門(mén)述說(shuō)怎么挖掘和剖析Web上的數據和資源,如何剖析用戶(hù)體驗、市場(chǎng)營(yíng)銷(xiāo)、個(gè)人品位等眾多信息,并得出有用的推論python爬蟲(chóng)數據書(shū)籍,通過(guò)復雜的算法來(lái)從Web網(wǎng)站獲取、收集并剖析用戶(hù)的數據和反饋信息,以便創(chuàng )造新的用戶(hù)價(jià)值和商業(yè)價(jià)值。
全書(shū)內容詳實(shí),包括協(xié)作過(guò)濾技術(shù)(實(shí)現關(guān)聯(lián)產(chǎn)品推薦功能)、集群數據剖析(在大規模數據集中開(kāi)掘相像的數據子集)、搜索引擎核心技術(shù)(爬蟲(chóng)、索引、查詢(xún)引擎、PageRank算法等)、搜索海量信息并進(jìn)行剖析統計得出結論的優(yōu)化算法、貝葉斯過(guò)濾技術(shù)(垃圾郵件過(guò)濾、文本過(guò)濾)、用決策樹(shù)技術(shù)實(shí)現預測和決策建模功能、社交網(wǎng)絡(luò )的信息匹配技術(shù)、機器學(xué)習和人工智能應用等。
本書(shū)是Web開(kāi)發(fā)者、架構師、應用工程師等的極佳選擇。
“太棒了!對于初學(xué)這種算法的開(kāi)發(fā)者而言,我想不出有比這本書(shū)更好的選擇了,而對于象我這樣學(xué)過(guò)Al的道友而言,我也想不出還有什么更好的辦法才能使自己重溫這種知識的細節?!?br /> ——Dan Russell,資深技術(shù)總監,Google
“Toby的這本書(shū)十分成功地將機器學(xué)習算法這一復雜的議程分拆成了一個(gè)個(gè)既實(shí)用又易懂的事例,我們可以直接借助那些反例來(lái)剖析當前網(wǎng)路上的社會(huì )化交互作用。假如我早三年讀過(guò)這本書(shū),就會(huì )省去許多寶貴的時(shí)間python爬蟲(chóng)數據書(shū)籍,也不至于走那么多的彎路了?!?br /> ——Tim Wolters,CTO,Collective Intellect
第五個(gè)
其實(shí)我認為很多人也在看《Python核心編程:第2版》.在我自己看來(lái),我并不喜歡這本書(shū).
這本書(shū)的原書(shū)的勘誤表就有夠長(cháng)的,翻譯時(shí)卻幾乎沒(méi)有參考勘誤表,把原書(shū)的所有低級錯誤都搬進(jìn)去了。這本書(shū)的原書(shū)質(zhì)量也并不好,書(shū)的結構組織并不合理,不適宜初學(xué)者閱讀。有人說(shuō),這本書(shū)適宜進(jìn)階閱讀,我認為也不盡然。這本書(shū)好多地方都寫(xiě)的欲言又止的,看得人很郁悶。 查看全部
于我個(gè)人而言,我很喜歡2113Python,當然我也5261有很多的理由推薦你去學(xué)python.我只4102說(shuō)兩點(diǎn).一是簡(jiǎn)單,二是寫(xiě)python工資高1653.我感覺(jué)這倆理由就夠了,對不對.買(mǎi)本書(shū),裝上pycharm,把書(shū)里面的事例習題都敲一遍.再用flask,web.py等框架搭個(gè)小網(wǎng)站.. 完美...(小伙伴們有問(wèn)到該學(xué)python2.7還是3.X,那我的答案是:目前大多數實(shí)際開(kāi)發(fā),都是用2.7的,因為實(shí)際項目開(kāi)發(fā)有很多依賴(lài)的包,都只支持到2.7,你用3.X干不了活.那你能怎樣辦.所以不需要苦惱.等3.X普及,你寫(xiě)的2.7代碼,都可以無(wú)痛移植,妥妥的不用害怕.)
第一個(gè)
個(gè)人覺(jué)得《Python學(xué)習手冊:第3版》是學(xué)習語(yǔ)言基礎比較好的書(shū)了.
《Python學(xué)習手冊(第3版)》講述了:Python可移植、功能強悍、易于使用,是編撰獨立應用程序和腳本應用程序的理想選擇。無(wú)論你是剛接觸編程或則剛接觸Python,通過(guò)學(xué)習《Python學(xué)習手冊(第3版)》,你可以迅速高效地精通核心Python語(yǔ)言基礎。讀完《Python學(xué)習手冊(第3版)》,你會(huì )對這門(mén)語(yǔ)言有足夠的了解,從而可以在你所從事的任何應用領(lǐng)域中使用它。
《Python學(xué)習手冊(第3版)》是作者依據過(guò)去10年用于教學(xué)而廣為人知的培訓課程的材料編撰而成的。除了有許多詳盡說(shuō)明和每章小結之外,每章還包括一個(gè)頭腦風(fēng)暴:這是《Python學(xué)習手冊(第3版)》獨特的一部分,配合以實(shí)用的練習題和復習題,讓讀者練習新學(xué)的方法并測試自己的理解程度。
《Python學(xué)習手冊(第3版)》包括:
類(lèi)型和操作——深入討論Python主要的外置對象類(lèi)型:數字、列表和字典等。
語(yǔ)句和句型——在Python中輸入代碼來(lái)構建并處理對象,以及Python通常的句型模型。
函數——Python基本的面向過(guò)程工具,用于組織代碼和重用。
模塊——封裝句子、函數以及其他工具,從而可以組織成較大的組件。
類(lèi)和OOP——Python可選的面向對象編程工具,可用于組織程序代碼因而實(shí)現訂制和重用。
異常和工具——異常處理模型和句子,并介紹編撰更大程序的開(kāi)發(fā)工具。
討論Python 3.0。
《Python學(xué)習手冊(第3版)》讓你對Python語(yǔ)言有深入而完整的了解,從而幫助你理解今后碰到的任何Python應用程序實(shí)例。如果你打算探求Google和YouTube為何選中了Python,《Python學(xué)習手冊(第3版)》就是你入門(mén)的最佳手冊。
第二個(gè)
《Python基礎教程(第2版·修訂版)》也是精典的Python入門(mén)教程,層次鮮明,結構嚴謹,內容詳實(shí),特別是最后幾章,作者將上面述說(shuō)的內容應用到10個(gè)引人入勝的項目中,并以模板的方式介紹了項目的開(kāi)發(fā)過(guò)程,手把手院長(cháng)Python開(kāi)發(fā),讓讀者從項目中展現Python的真正魅力。這本書(shū)既適宜初學(xué)者筑牢基礎,又能幫助Python程序員提高技能,即使是Python方面的技術(shù)專(zhuān)家,也能從書(shū)里找到耳目一新的內容。
第三個(gè)
《“笨辦法”學(xué)Python(第3版)》是一本Python入門(mén)書(shū)籍,適合對計算機了解不多,沒(méi)有學(xué)過(guò)編程,但對編程感興趣的初學(xué)者使用。這本書(shū)結構十分簡(jiǎn)單,其中覆蓋了輸入/輸出、變量和函數三個(gè)主題,以及一些比較中級的話(huà)題,如條件判定、循環(huán)、類(lèi)和對象、代碼測試及項目的實(shí)現等。每一章的格式基本相同,以代碼習題開(kāi)始,按照說(shuō)明編撰代碼,運行并檢測結果,然后再做附加練習。這本書(shū)以習題的方法引導讀者一步一步學(xué)習編程,從簡(jiǎn)單的復印仍然講授到完整項目的實(shí)現,讓初學(xué)者從基礎的編程技術(shù)入手,最終體驗到軟件開(kāi)發(fā)的基本過(guò)程。
【大牛評價(jià)】hardway(笨辦法)比較適宜起步編程,作為Python的入門(mén)挺不錯。
第四個(gè)
在這里給你們推薦最后一本《集體智慧編程》
本書(shū)以機器學(xué)習與估算統計為主題背景,專(zhuān)門(mén)述說(shuō)怎么挖掘和剖析Web上的數據和資源,如何剖析用戶(hù)體驗、市場(chǎng)營(yíng)銷(xiāo)、個(gè)人品位等眾多信息,并得出有用的推論python爬蟲(chóng)數據書(shū)籍,通過(guò)復雜的算法來(lái)從Web網(wǎng)站獲取、收集并剖析用戶(hù)的數據和反饋信息,以便創(chuàng )造新的用戶(hù)價(jià)值和商業(yè)價(jià)值。
全書(shū)內容詳實(shí),包括協(xié)作過(guò)濾技術(shù)(實(shí)現關(guān)聯(lián)產(chǎn)品推薦功能)、集群數據剖析(在大規模數據集中開(kāi)掘相像的數據子集)、搜索引擎核心技術(shù)(爬蟲(chóng)、索引、查詢(xún)引擎、PageRank算法等)、搜索海量信息并進(jìn)行剖析統計得出結論的優(yōu)化算法、貝葉斯過(guò)濾技術(shù)(垃圾郵件過(guò)濾、文本過(guò)濾)、用決策樹(shù)技術(shù)實(shí)現預測和決策建模功能、社交網(wǎng)絡(luò )的信息匹配技術(shù)、機器學(xué)習和人工智能應用等。
本書(shū)是Web開(kāi)發(fā)者、架構師、應用工程師等的極佳選擇。
“太棒了!對于初學(xué)這種算法的開(kāi)發(fā)者而言,我想不出有比這本書(shū)更好的選擇了,而對于象我這樣學(xué)過(guò)Al的道友而言,我也想不出還有什么更好的辦法才能使自己重溫這種知識的細節?!?br /> ——Dan Russell,資深技術(shù)總監,Google
“Toby的這本書(shū)十分成功地將機器學(xué)習算法這一復雜的議程分拆成了一個(gè)個(gè)既實(shí)用又易懂的事例,我們可以直接借助那些反例來(lái)剖析當前網(wǎng)路上的社會(huì )化交互作用。假如我早三年讀過(guò)這本書(shū),就會(huì )省去許多寶貴的時(shí)間python爬蟲(chóng)數據書(shū)籍,也不至于走那么多的彎路了?!?br /> ——Tim Wolters,CTO,Collective Intellect
第五個(gè)
其實(shí)我認為很多人也在看《Python核心編程:第2版》.在我自己看來(lái),我并不喜歡這本書(shū).
這本書(shū)的原書(shū)的勘誤表就有夠長(cháng)的,翻譯時(shí)卻幾乎沒(méi)有參考勘誤表,把原書(shū)的所有低級錯誤都搬進(jìn)去了。這本書(shū)的原書(shū)質(zhì)量也并不好,書(shū)的結構組織并不合理,不適宜初學(xué)者閱讀。有人說(shuō),這本書(shū)適宜進(jìn)階閱讀,我認為也不盡然。這本書(shū)好多地方都寫(xiě)的欲言又止的,看得人很郁悶。
Python爬蟲(chóng)的用途
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 371 次瀏覽 ? 2020-06-30 08:01
Python 爬蟲(chóng)的用途 Python 爬蟲(chóng)是用 Python 編程語(yǔ)言實(shí)現的網(wǎng)路爬蟲(chóng),主要用于網(wǎng)路數據的抓取和處理,相比于其他語(yǔ)言,Python 是一門(mén)特別適宜開(kāi)發(fā)網(wǎng)路爬蟲(chóng)的編程語(yǔ)言,大量外置包,可以輕松實(shí)現網(wǎng)路爬蟲(chóng)功能。 Python 爬蟲(chóng)可以做的事情好多,如搜索引擎、采集數據、廣告過(guò)濾等,Python爬蟲(chóng)還可以用于數據剖析,在數據的抓取方面可以作用巨大! n Python 爬蟲(chóng)構架組成 1. URL 管理器:管理待爬取的 url 集合和已爬取的 url 集合,傳送待爬取的 url 給網(wǎng)頁(yè)下載器; 2. 網(wǎng)頁(yè)下載器:爬取 url 對應的網(wǎng)頁(yè),存儲成字符串,傳送給網(wǎng)頁(yè)解析器; 3. 網(wǎng)頁(yè)解析器:解析出有價(jià)值的數據,存儲出來(lái),同時(shí)補充 url 到 URL 管理器。 n Python 爬蟲(chóng)工作原理 Python 爬蟲(chóng)通過(guò) URL 管理器,判斷是否有待爬 URL,如果有待爬 URL,通過(guò)調度器進(jìn)行傳遞給下載器網(wǎng)絡(luò )爬蟲(chóng) 作用,下載 URL 內容,并通過(guò)調度器傳送給解析器,解析URL 內容,并將價(jià)值數據和新 URL 列表通過(guò)調度器傳遞給應用程序,并輸出價(jià)值信息的過(guò)程。 n Python 爬蟲(chóng)常用框架有: grab:網(wǎng)絡(luò )爬蟲(chóng)框架(基于 pycurl/multicur); scrapy:網(wǎng)絡(luò )爬蟲(chóng)框架(基于 twisted),不支持 Python3; pyspider:一個(gè)強悍的爬蟲(chóng)系統;cola:一個(gè)分布式爬蟲(chóng)框架; portia:基于 Scrapy 的可視化爬蟲(chóng); restkit:Python 的 HTTP 資源工具包。它可以使你輕松地訪(fǎng)問(wèn) HTTP 資源,并圍繞它完善的對象; demiurge:基于 PyQuery 的爬蟲(chóng)微框架。 Python 爬蟲(chóng)應用領(lǐng)域廣泛,在網(wǎng)絡(luò )爬蟲(chóng)領(lǐng)域處于霸主位置,Scrapy、Request、BeautifuSoap、urlib 等框架的應用,可以實(shí)現爬行自如的功能,只要您數據抓取看法網(wǎng)絡(luò )爬蟲(chóng) 作用,Python 爬蟲(chóng)均可實(shí)現!
Python爬蟲(chóng)實(shí)現百度圖片手動(dòng)下載
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 355 次瀏覽 ? 2020-06-29 08:01
分析需求剖析網(wǎng)頁(yè)源代碼,配合開(kāi)發(fā)者工具編撰正則表達式或則XPath表達式即將編撰 python 爬蟲(chóng)代碼 效果預覽
運行療效如下:
存放圖片的文件夾:
我們的爬蟲(chóng)起碼要實(shí)現兩個(gè)功能:一是搜索圖片,二是手動(dòng)下載。
搜索圖片:最容易想到的是爬百度圖片的結果,我們就上百度圖片瞧瞧:
隨便搜索幾個(gè)關(guān)鍵字,可以看見(jiàn)早已搜索下來(lái)好多張圖片:
我們點(diǎn)擊右鍵,查看源代碼:
打開(kāi)源代碼以后,發(fā)現一堆源代碼比較難找出我們想要的資源。
這個(gè)時(shí)侯,就要用開(kāi)發(fā)者工具!我們回到上一頁(yè)面,調出開(kāi)發(fā)者工具,我們須要用的是左上角那種東西:(鼠標追隨)。
然后選擇你想看源代碼的地方,就可以發(fā)覺(jué),下面的代碼市手動(dòng)定位到了相應的位置。如下圖:
我們復制這個(gè)地址,然后到昨天的一堆源代碼里搜索一下百度圖片 爬蟲(chóng),發(fā)現了它的位置,但是這兒我們又困惑了,這個(gè)圖片有這么多地址,到底用那個(gè)呢?我們可以看見(jiàn)有thumbURL,middleURL,hoverURL,objURL
通過(guò)剖析可以曉得,前面兩個(gè)是縮小的版本,hoverURL 是鍵盤(pán)聯(lián)通之后顯示的版本,objURL 應該是我們須要的,可以分別打開(kāi)這幾個(gè)網(wǎng)址瞧瞧,發(fā)現 objURL 的那種最大最清晰。
找到了圖片地址,接下來(lái)我們剖析源代碼??纯词遣皇撬械?objURL 都是圖片。
發(fā)現都是以.jpg格式結尾的圖片。
pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
這里我們用了2個(gè)包百度圖片 爬蟲(chóng),一個(gè)是正則,一個(gè)是 requests 包
#-*- coding:utf-8 -*-
import re
import requests
復制百度圖片搜索的鏈接,傳入 requests ,然后把正則表達式寫(xiě)好
url = 'https://image.baidu.com/search/index?tn=baiduimage&ie=utf-8&word=%E6%A0%97%E5%B1%B1%E6%9C%AA%E6%9D%A5%E5%A4%B4%E5%83%8F&ct=201326592&ic=0&lm=-1&width=&height=&v=index' html = requests.get(url).text pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
因為有很多張圖片,所以要循環(huán),我們復印出結果來(lái)瞧瞧,然后用 requests 獲取網(wǎng)址,由于有些圖片可能存在網(wǎng)址打不開(kāi)的情況,所以加了10秒超時(shí)控制。
pic_url = re.findall('"objURL":"(.*?)",',html,re.S) i = 1 for each in pic_url:
print each
try:
pic= requests.get(each, timeout=10)
except requests.exceptions.ConnectionError: print('【錯誤】當前圖片無(wú)法下載')
continue
接著(zhù)就是把圖片保存出來(lái),我們事先構建好一個(gè) images 目錄,把圖片都放進(jìn)去,命名的時(shí)侯,以數字命名。
dir = '../images/' + keyword + '_' + str(i) + '.jpg'
fp = open(dir, 'wb')
fp.write(pic.content)
fp.close()
i += 1
完整的代碼
# -*- coding:utf-8 -*-
import re
import requests
def dowmloadPic(html, keyword):
pic_url = re.findall('"objURL":"(.*?)",', html, re.S)
i = 1
print('找到關(guān)鍵詞:' + keyword + '的圖片,現在開(kāi)始下載圖片...')
for each in pic_url:
print('正在下載第' + str(i) + '張圖片,圖片地址:' + str(each))
try:
pic = requests.get(each, timeout=10)
except requests.exceptions.ConnectionError:
print('【錯誤】當前圖片無(wú)法下載')
continue
dir = '../images/' + keyword + '_' + str(i) + '.jpg'
fp = open(dir, 'wb')
fp.write(pic.content)
fp.close()
i += 1
if __name__ == '__main__':
word = input("Input key word: ")
url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + word + '&ct=201326592&v=flip'
result = requests.get(url)
dowmloadPic(result.text, word)
我們聽(tīng)到有的圖片沒(méi)顯示下來(lái),打開(kāi)網(wǎng)址看,發(fā)現確實(shí)沒(méi)了。
因為百度有些圖片它緩存到百度的服務(wù)器上,所以我們在百度上能夠看到它,但它的實(shí)際鏈接早已失效了。
enjoy 我們的第一個(gè)圖片下載爬蟲(chóng)吧!當然它除了能下載百度的圖片,依葫蘆畫(huà)瓢,你如今應當能做好多事情了,比如爬取頭像,爬天貓展示圖等等。
完整代碼已然放在Githut上 查看全部
制作一個(gè)爬蟲(chóng)通常分以下幾個(gè)步驟:
分析需求剖析網(wǎng)頁(yè)源代碼,配合開(kāi)發(fā)者工具編撰正則表達式或則XPath表達式即將編撰 python 爬蟲(chóng)代碼 效果預覽
運行療效如下:

存放圖片的文件夾:

我們的爬蟲(chóng)起碼要實(shí)現兩個(gè)功能:一是搜索圖片,二是手動(dòng)下載。
搜索圖片:最容易想到的是爬百度圖片的結果,我們就上百度圖片瞧瞧:

隨便搜索幾個(gè)關(guān)鍵字,可以看見(jiàn)早已搜索下來(lái)好多張圖片:

我們點(diǎn)擊右鍵,查看源代碼:

打開(kāi)源代碼以后,發(fā)現一堆源代碼比較難找出我們想要的資源。
這個(gè)時(shí)侯,就要用開(kāi)發(fā)者工具!我們回到上一頁(yè)面,調出開(kāi)發(fā)者工具,我們須要用的是左上角那種東西:(鼠標追隨)。

然后選擇你想看源代碼的地方,就可以發(fā)覺(jué),下面的代碼市手動(dòng)定位到了相應的位置。如下圖:


我們復制這個(gè)地址,然后到昨天的一堆源代碼里搜索一下百度圖片 爬蟲(chóng),發(fā)現了它的位置,但是這兒我們又困惑了,這個(gè)圖片有這么多地址,到底用那個(gè)呢?我們可以看見(jiàn)有thumbURL,middleURL,hoverURL,objURL

通過(guò)剖析可以曉得,前面兩個(gè)是縮小的版本,hoverURL 是鍵盤(pán)聯(lián)通之后顯示的版本,objURL 應該是我們須要的,可以分別打開(kāi)這幾個(gè)網(wǎng)址瞧瞧,發(fā)現 objURL 的那種最大最清晰。
找到了圖片地址,接下來(lái)我們剖析源代碼??纯词遣皇撬械?objURL 都是圖片。

發(fā)現都是以.jpg格式結尾的圖片。
pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
這里我們用了2個(gè)包百度圖片 爬蟲(chóng),一個(gè)是正則,一個(gè)是 requests 包
#-*- coding:utf-8 -*-
import re
import requests
復制百度圖片搜索的鏈接,傳入 requests ,然后把正則表達式寫(xiě)好

url = 'https://image.baidu.com/search/index?tn=baiduimage&ie=utf-8&word=%E6%A0%97%E5%B1%B1%E6%9C%AA%E6%9D%A5%E5%A4%B4%E5%83%8F&ct=201326592&ic=0&lm=-1&width=&height=&v=index' html = requests.get(url).text pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
因為有很多張圖片,所以要循環(huán),我們復印出結果來(lái)瞧瞧,然后用 requests 獲取網(wǎng)址,由于有些圖片可能存在網(wǎng)址打不開(kāi)的情況,所以加了10秒超時(shí)控制。
pic_url = re.findall('"objURL":"(.*?)",',html,re.S) i = 1 for each in pic_url:
print each
try:
pic= requests.get(each, timeout=10)
except requests.exceptions.ConnectionError: print('【錯誤】當前圖片無(wú)法下載')
continue
接著(zhù)就是把圖片保存出來(lái),我們事先構建好一個(gè) images 目錄,把圖片都放進(jìn)去,命名的時(shí)侯,以數字命名。
dir = '../images/' + keyword + '_' + str(i) + '.jpg'
fp = open(dir, 'wb')
fp.write(pic.content)
fp.close()
i += 1
完整的代碼
# -*- coding:utf-8 -*-
import re
import requests
def dowmloadPic(html, keyword):
pic_url = re.findall('"objURL":"(.*?)",', html, re.S)
i = 1
print('找到關(guān)鍵詞:' + keyword + '的圖片,現在開(kāi)始下載圖片...')
for each in pic_url:
print('正在下載第' + str(i) + '張圖片,圖片地址:' + str(each))
try:
pic = requests.get(each, timeout=10)
except requests.exceptions.ConnectionError:
print('【錯誤】當前圖片無(wú)法下載')
continue
dir = '../images/' + keyword + '_' + str(i) + '.jpg'
fp = open(dir, 'wb')
fp.write(pic.content)
fp.close()
i += 1
if __name__ == '__main__':
word = input("Input key word: ")
url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + word + '&ct=201326592&v=flip'
result = requests.get(url)
dowmloadPic(result.text, word)


我們聽(tīng)到有的圖片沒(méi)顯示下來(lái),打開(kāi)網(wǎng)址看,發(fā)現確實(shí)沒(méi)了。

因為百度有些圖片它緩存到百度的服務(wù)器上,所以我們在百度上能夠看到它,但它的實(shí)際鏈接早已失效了。
enjoy 我們的第一個(gè)圖片下載爬蟲(chóng)吧!當然它除了能下載百度的圖片,依葫蘆畫(huà)瓢,你如今應當能做好多事情了,比如爬取頭像,爬天貓展示圖等等。
完整代碼已然放在Githut上
2019最新30個(gè)小時(shí)搞定Python網(wǎng)絡(luò )爬蟲(chóng)(全套詳盡版) 零基礎入門(mén) 視頻教
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 385 次瀏覽 ? 2020-06-26 08:01
1、零基礎對Python網(wǎng)絡(luò )爬蟲(chóng)感興趣的開(kāi)發(fā)者
2、想從事Python網(wǎng)路爬蟲(chóng)工程師相關(guān)工作的開(kāi)發(fā)者
3、想學(xué)習Python網(wǎng)路爬蟲(chóng)作為技術(shù)儲備的開(kāi)發(fā)者
1、本課程的目標是將你們培養成Python網(wǎng)路爬蟲(chóng)工程師。薪資基本在13k-36k左右;
2、學(xué)完才能從零開(kāi)始把握Python爬蟲(chóng)項目的編撰,學(xué)會(huì )獨立開(kāi)發(fā)常見(jiàn)的爬蟲(chóng)項目;
3、學(xué)完能把握常見(jiàn)的反爬處理手段爬蟲(chóng)入門(mén)書(shū)籍,比如驗證碼處理、瀏覽器偽裝、代理IP池技術(shù)和用戶(hù)代理池技術(shù)等;
4、學(xué)完才能熟練使用正則表達式和XPath表達式進(jìn)行信息提??;
5、學(xué)完把握抓包技術(shù),掌握屏蔽的數據信息怎樣進(jìn)行提取,學(xué)會(huì )手動(dòng)模擬加載行為、進(jìn)行網(wǎng)址構造和手動(dòng)模擬Ajax異步懇求數據;
6、熟練把握urllib模塊,熟練使用Scrapy框架進(jìn)行爬蟲(chóng)項目開(kāi)發(fā)。
第一章節:Python 網(wǎng)絡(luò )爬蟲(chóng)之基礎
第二章節:Python網(wǎng)路爬蟲(chóng)之工作原理
第三章節:Python網(wǎng)路爬蟲(chóng)之正則表達式
第五章節:Python網(wǎng)路爬蟲(chóng)之用戶(hù)和IP代理池
第六章節 :Python網(wǎng)路爬蟲(chóng)之騰訊陌陌和視頻實(shí)戰
第七章節:Python網(wǎng)路爬蟲(chóng)之Scrapy框架
第八章節:Python網(wǎng)路爬蟲(chóng)之Scrapy與Urllib的整合
第九章節:Python網(wǎng)路爬蟲(chóng)之擴充學(xué)習
第十章節:Python網(wǎng)路爬蟲(chóng)之分布式爬蟲(chóng) 查看全部
這是一套完整的網(wǎng)路爬蟲(chóng)課程,通過(guò)該課程把握網(wǎng)路爬蟲(chóng)的相關(guān)知識,以便把握網(wǎng)路爬蟲(chóng)方方面面的知識,學(xué)完后勝任網(wǎng)路爬蟲(chóng)相關(guān)工作。 1、體系完整科學(xué),可以系統化學(xué)習; 2、課程通俗易懂爬蟲(chóng)入門(mén)書(shū)籍,可以使學(xué)員真正學(xué)會(huì ); 3、從零開(kāi)始教學(xué)直至深入,零基礎的朋友亦可以學(xué)習!
1、零基礎對Python網(wǎng)絡(luò )爬蟲(chóng)感興趣的開(kāi)發(fā)者
2、想從事Python網(wǎng)路爬蟲(chóng)工程師相關(guān)工作的開(kāi)發(fā)者
3、想學(xué)習Python網(wǎng)路爬蟲(chóng)作為技術(shù)儲備的開(kāi)發(fā)者
1、本課程的目標是將你們培養成Python網(wǎng)路爬蟲(chóng)工程師。薪資基本在13k-36k左右;
2、學(xué)完才能從零開(kāi)始把握Python爬蟲(chóng)項目的編撰,學(xué)會(huì )獨立開(kāi)發(fā)常見(jiàn)的爬蟲(chóng)項目;
3、學(xué)完能把握常見(jiàn)的反爬處理手段爬蟲(chóng)入門(mén)書(shū)籍,比如驗證碼處理、瀏覽器偽裝、代理IP池技術(shù)和用戶(hù)代理池技術(shù)等;
4、學(xué)完才能熟練使用正則表達式和XPath表達式進(jìn)行信息提??;
5、學(xué)完把握抓包技術(shù),掌握屏蔽的數據信息怎樣進(jìn)行提取,學(xué)會(huì )手動(dòng)模擬加載行為、進(jìn)行網(wǎng)址構造和手動(dòng)模擬Ajax異步懇求數據;
6、熟練把握urllib模塊,熟練使用Scrapy框架進(jìn)行爬蟲(chóng)項目開(kāi)發(fā)。
第一章節:Python 網(wǎng)絡(luò )爬蟲(chóng)之基礎
第二章節:Python網(wǎng)路爬蟲(chóng)之工作原理
第三章節:Python網(wǎng)路爬蟲(chóng)之正則表達式
第五章節:Python網(wǎng)路爬蟲(chóng)之用戶(hù)和IP代理池
第六章節 :Python網(wǎng)路爬蟲(chóng)之騰訊陌陌和視頻實(shí)戰
第七章節:Python網(wǎng)路爬蟲(chóng)之Scrapy框架
第八章節:Python網(wǎng)路爬蟲(chóng)之Scrapy與Urllib的整合
第九章節:Python網(wǎng)路爬蟲(chóng)之擴充學(xué)習
第十章節:Python網(wǎng)路爬蟲(chóng)之分布式爬蟲(chóng)
求大神們推薦python入門(mén)書(shū)籍(爬蟲(chóng)方面)?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 329 次瀏覽 ? 2020-06-25 08:03
題主的要求是Python入門(mén),而且是和爬蟲(chóng)相關(guān)的書(shū)籍,那么有一本書(shū)簡(jiǎn)直很適宜了,那就是《 Python for Informatics 》(中文翻譯叫《信息管理專(zhuān)業(yè)Python教程》),這本書(shū)除了是一本挺好的Python爬蟲(chóng)方面的入門(mén)書(shū),而且還有以這本書(shū)為教材的配套的Coursera課程。
這本書(shū)是美國密西根大學(xué)信息學(xué)院院長(cháng)為他的課程編撰的,是一本開(kāi)源書(shū),有人將他翻譯成了中文版爬蟲(chóng)入門(mén)書(shū)籍,書(shū)上有配套的習題和代碼,而且這種習題代碼都可以在網(wǎng)上獲取到,書(shū)本身并不厚,前面十章將的都是Python的基礎用法,后面幾張就是講解和Python爬蟲(chóng)有關(guān)的,像正則表達式,網(wǎng)絡(luò )編程(HTTP 協(xié)議), Web Service,數據庫與SQL句子,數據可視化,書(shū)中還仔細講解了用Python爬取Twiter上的用戶(hù)信息,和各類(lèi)解析html會(huì )用到的工具,如BeautifulSoup等,學(xué)完本書(shū),爬取個(gè)知乎哪些的都是小意思!本書(shū)中文版下載地址地址。
說(shuō)完了書(shū)在來(lái)說(shuō)說(shuō)配套的Coursera課程,是Coursera上太火的零基礎 Python 入門(mén) 專(zhuān)項課程,內容大致和書(shū)上的內容差不多,分成了6門(mén)課程,前三門(mén)課程講解Python句型,后面講Python爬蟲(chóng)的數據采集數據處理等爬蟲(chóng)入門(mén)書(shū)籍,并且有不少的習題,老師也十分特別有趣,,知乎上很早之前就有人介紹這門(mén)課程coursera上有什么值得學(xué)習的Python,數據剖析的課程? - 程剛的回答,本課的課程地址,并且這門(mén)課正好就是今天開(kāi)課(7月25號),學(xué)習課程假如不要證書(shū)的話(huà)也不用花錢(qián),貌似大部分配有英文字幕。 查看全部

題主的要求是Python入門(mén),而且是和爬蟲(chóng)相關(guān)的書(shū)籍,那么有一本書(shū)簡(jiǎn)直很適宜了,那就是《 Python for Informatics 》(中文翻譯叫《信息管理專(zhuān)業(yè)Python教程》),這本書(shū)除了是一本挺好的Python爬蟲(chóng)方面的入門(mén)書(shū),而且還有以這本書(shū)為教材的配套的Coursera課程。
這本書(shū)是美國密西根大學(xué)信息學(xué)院院長(cháng)為他的課程編撰的,是一本開(kāi)源書(shū),有人將他翻譯成了中文版爬蟲(chóng)入門(mén)書(shū)籍,書(shū)上有配套的習題和代碼,而且這種習題代碼都可以在網(wǎng)上獲取到,書(shū)本身并不厚,前面十章將的都是Python的基礎用法,后面幾張就是講解和Python爬蟲(chóng)有關(guān)的,像正則表達式,網(wǎng)絡(luò )編程(HTTP 協(xié)議), Web Service,數據庫與SQL句子,數據可視化,書(shū)中還仔細講解了用Python爬取Twiter上的用戶(hù)信息,和各類(lèi)解析html會(huì )用到的工具,如BeautifulSoup等,學(xué)完本書(shū),爬取個(gè)知乎哪些的都是小意思!本書(shū)中文版下載地址地址。
說(shuō)完了書(shū)在來(lái)說(shuō)說(shuō)配套的Coursera課程,是Coursera上太火的零基礎 Python 入門(mén) 專(zhuān)項課程,內容大致和書(shū)上的內容差不多,分成了6門(mén)課程,前三門(mén)課程講解Python句型,后面講Python爬蟲(chóng)的數據采集數據處理等爬蟲(chóng)入門(mén)書(shū)籍,并且有不少的習題,老師也十分特別有趣,,知乎上很早之前就有人介紹這門(mén)課程coursera上有什么值得學(xué)習的Python,數據剖析的課程? - 程剛的回答,本課的課程地址,并且這門(mén)課正好就是今天開(kāi)課(7月25號),學(xué)習課程假如不要證書(shū)的話(huà)也不用花錢(qián),貌似大部分配有英文字幕。
Python借助requests進(jìn)行模擬登陸
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 686 次瀏覽 ? 2020-06-25 08:00
Python3 模擬登陸并爬取表格數據!
本節主要內容有:通過(guò)requests庫模擬表單遞交通過(guò)pandas庫提取網(wǎng)頁(yè)表格上周五,大師兄發(fā)給我一個(gè)網(wǎng)址,哭哭啼啼地求我:“去!把這個(gè)網(wǎng)頁(yè)上所有年所有市所有小麥的數據全爬出來(lái),存到Access里!”我看他可憐,勉為其難地揮揮手說(shuō):“好嘞,馬上就開(kāi)始!”目標剖析Python學(xué)習交流群:1004391443大師兄給我的網(wǎng)址是這個(gè):
使用python模擬登陸
使用python模擬登陸Windows + Linux 均成功
Python模擬一個(gè)用戶(hù)登入系統
題目:模擬一個(gè)用戶(hù)登入系統,用戶(hù)輸入用戶(hù)名和密碼,輸入正確即可步入系統直接上代碼:#模擬一個(gè)用戶(hù)登入系統,用戶(hù)輸入用戶(hù)名和密碼,輸入正確即可步入系統d=['yao','123456']while 1:name =input("請輸入用戶(hù)名:")if name in d:breakelse:print("你輸入的用戶(hù)名不存在,請...
使用python模擬瀏覽器實(shí)現登錄
讓我們通過(guò)命令行模擬瀏覽器實(shí)現登錄操作,看看一個(gè)簡(jiǎn)單的登錄操作,具體是怎樣實(shí)現的
Python爬蟲(chóng)入門(mén)-表單遞交與模擬登陸
前言明天主要講兩個(gè)方面:利用Request庫進(jìn)行POST懇求表單交互cookie實(shí)現模擬登陸網(wǎng)站Requests實(shí)現POST懇求今requests可以以多種形式進(jìn)行post懇求,比如form表單方式、json方式等。今天主要以表單方式舉例:Reqeusts支持以form表單方式發(fā)送post懇求,只須要將懇求的參數構造成一個(gè)字典,然后傳給requests.post()...
Python模擬百度登陸
注:本文轉載,如有侵權,請告知將給以刪掉原文章鏈接:本來(lái)寫(xiě)這個(gè)玩意是想拿來(lái)手動(dòng)登入百度,然后按照帖吧內的的排行抓取會(huì )員頭像的,比如生成一個(gè)帖吧萬(wàn)人頭像圖或千人頭像圖。也算是練練手。完成后才發(fā)覺(jué)抓那種帖吧排行完全不需要登陸…也好,以后拿來(lái)做手動(dòng)一鍵簽到(經(jīng)常忘打卡),搶二樓哪些的,也...
任務(wù)自動(dòng)化_request 模擬登陸實(shí)戰
知識點(diǎn):request 帶密碼登入、selenium+headless Chrome、pandas、思路:request 爬蟲(chóng)模擬登陸,下載文檔,再用 pandas 進(jìn)行數據剖析
python實(shí)現模擬登陸
本文主要用python實(shí)現了對網(wǎng)站的模擬登陸。通過(guò)自己構造post數據來(lái)用Python實(shí)現登陸過(guò)程。當你要模擬登陸一個(gè)網(wǎng)站時(shí),首先要搞清楚網(wǎng)站的登陸處理細節(發(fā)了什么樣的數據,給誰(shuí)發(fā)等...)。我是通過(guò)HTTPfox來(lái)抓取http數據包來(lái)剖析該網(wǎng)站的登陸流程。同時(shí),我們還要剖析抓到的post包的數據結構和header,要按照遞交的數據結構和heander來(lái)構造自己的pos...
請問(wèn)寫(xiě)python爬蟲(chóng)怎樣用urllib或則requests模擬用戶(hù)登入
比如我在百度文庫下個(gè)教案,,我用urllib2或則request,我可以用urllib2.open(url)或者requests.get(url)來(lái)打開(kāi)頁(yè)面,但是不知道怎么寫(xiě)cookie的,就是使瀏覽器覺(jué)得你早已登陸了,請問(wèn)怎么寫(xiě)urllib或則requests.get呢?謝謝
requests 實(shí)現模擬登陸,獲取cookie
有個(gè)需求須要模擬登陸csdn獲取cookie,對csdn進(jìn)行后續系列操作,剛開(kāi)始使用的selenium,功能可以實(shí)現,但是效率有點(diǎn)低,后來(lái)改用的requests,遇到不少坑,今天來(lái)總結一下。首先找到csdn登陸的url,在故意輸錯密碼的情況下點(diǎn)擊登陸,檢查會(huì )發(fā)覺(jué)network中有一個(gè)dologin的響應,這就是要遞交到服務(wù)器的帳號密碼信息。點(diǎn)開(kāi)會(huì )發(fā)覺(jué)下圖所示:請求的url,請求方法p...
Python模擬登錄
最近想做一個(gè)可以模擬人工,對網(wǎng)站的內容進(jìn)行操作,比如手動(dòng)購物,自動(dòng)支付。朋友向我推薦用Python去寫(xiě)python爬蟲(chóng)模擬登錄,我也就開(kāi)始用Python??戳艘恍┐蠹s,用Python3 的requests去弄,感覺(jué)邏輯很簡(jiǎn)單。最主要的問(wèn)題是怎樣去剖析網(wǎng)站的邏輯,這很難。用了chrome f12 記錄網(wǎng)頁(yè)的操作,但是一點(diǎn)是,chrome不能全文查找,沒(méi)辦法搜索到諸如帳號密碼的傳送,cookie等問(wèn)題,手動(dòng)查找好煩。
Python模擬登陸的幾種方式
目錄方式一:直接使用已知的cookie訪(fǎng)問(wèn)技巧二:模擬登陸后再攜帶得到的cookie訪(fǎng)問(wèn)方式三:模擬登陸后用session保持登入狀態(tài)方式四:使用無(wú)頭瀏覽器訪(fǎng)問(wèn)正文方式一:直接使用已知的cookie訪(fǎng)問(wèn)特征:簡(jiǎn)單,但須要先在瀏覽器登陸原理:簡(jiǎn)單地說(shuō),cookie保存在發(fā)起懇求的客戶(hù)端中,服務(wù)器借助cookie來(lái)分辨不同的客戶(hù)端。因為htt...
用Python模擬登陸中學(xué)教務(wù)系統搶課
-- Illustrations by Vladislav Solovjov --作者:小蘇打博客地址:地址:github....
Python爬蟲(chóng)之模擬登陸總結
備注:python 2.7.9,32位有些網(wǎng)站需要登入后才會(huì )爬取所須要的信息python爬蟲(chóng)模擬登錄,此時(shí)可以設計爬蟲(chóng)進(jìn)行模擬登陸,原理是借助瀏覽器cookie。一、瀏覽器訪(fǎng)問(wèn)服務(wù)器的過(guò)程: (1)瀏覽器(客戶(hù)端)向Web服務(wù)器發(fā)出一個(gè)HTTP請求(Http request); (2)Web服務(wù)器收到懇求,發(fā)回響應信息(Http Response); (3)瀏覽器解析內容呈現
python模擬瀏覽器登陸
轉自:
python3下使用requests實(shí)現模擬用戶(hù)登入 —— 基礎篇(馬蜂窩)
python3下使用requests實(shí)現模擬用戶(hù)登入 —— 基礎篇(馬蜂窩)1. 了解cookie和session首先一定要先了解到cookie和session是哪些,這是前面理解網(wǎng)站交互,模擬用戶(hù)登入的基礎。1.1. 無(wú)狀態(tài)合同:Http如上圖所示,HTTP合同 是無(wú)狀態(tài)的合同,用戶(hù)瀏覽服務(wù)器上的內容,只須要發(fā)送頁(yè)面懇求,服務(wù)器返回內容。對于服務(wù)器來(lái)說(shuō),并不關(guān)心,也...
Visual C++技術(shù)內幕(第四版).part4.rar下載
一個(gè)十分清淅的PDF版的Visual C++技術(shù)黑幕(第四版),至于這本書(shū)究竟有多強就不用我介紹了吧!本書(shū)共分part1、part2、part3、part4 四部份相關(guān)下載鏈接:
sap施行顧問(wèn)寶典2下載
sap施行顧問(wèn)寶典一共3個(gè)壓縮包挺好的東西。相關(guān)下載鏈接:
Xilinx_ise使用教程(配合Modelsim使用)下載
這是我搜集的一個(gè)Xilinx_ISE6.1的教程,結合了MODELSIM的仿真功能,自己覺(jué)得講解的還可以,適合初學(xué)者入門(mén)使用,對其他人員也有一定的參考價(jià)值。相關(guān)下載鏈接:
相關(guān)熱詞c# 程序跳轉c#索引器定義、c#掃描軟件c# 文字復印左右反轉c#byte轉換成數字c# 音量調節組件c# wpf 界面c# 讀取證書(shū)文件的內容c# dgv 樹(shù)結構c#承繼 反序列化
我們是太有底線(xiàn)的 查看全部

Python3 模擬登陸并爬取表格數據!
本節主要內容有:通過(guò)requests庫模擬表單遞交通過(guò)pandas庫提取網(wǎng)頁(yè)表格上周五,大師兄發(fā)給我一個(gè)網(wǎng)址,哭哭啼啼地求我:“去!把這個(gè)網(wǎng)頁(yè)上所有年所有市所有小麥的數據全爬出來(lái),存到Access里!”我看他可憐,勉為其難地揮揮手說(shuō):“好嘞,馬上就開(kāi)始!”目標剖析Python學(xué)習交流群:1004391443大師兄給我的網(wǎng)址是這個(gè):
使用python模擬登陸
使用python模擬登陸Windows + Linux 均成功
Python模擬一個(gè)用戶(hù)登入系統
題目:模擬一個(gè)用戶(hù)登入系統,用戶(hù)輸入用戶(hù)名和密碼,輸入正確即可步入系統直接上代碼:#模擬一個(gè)用戶(hù)登入系統,用戶(hù)輸入用戶(hù)名和密碼,輸入正確即可步入系統d=['yao','123456']while 1:name =input("請輸入用戶(hù)名:")if name in d:breakelse:print("你輸入的用戶(hù)名不存在,請...

使用python模擬瀏覽器實(shí)現登錄
讓我們通過(guò)命令行模擬瀏覽器實(shí)現登錄操作,看看一個(gè)簡(jiǎn)單的登錄操作,具體是怎樣實(shí)現的
Python爬蟲(chóng)入門(mén)-表單遞交與模擬登陸
前言明天主要講兩個(gè)方面:利用Request庫進(jìn)行POST懇求表單交互cookie實(shí)現模擬登陸網(wǎng)站Requests實(shí)現POST懇求今requests可以以多種形式進(jìn)行post懇求,比如form表單方式、json方式等。今天主要以表單方式舉例:Reqeusts支持以form表單方式發(fā)送post懇求,只須要將懇求的參數構造成一個(gè)字典,然后傳給requests.post()...
Python模擬百度登陸
注:本文轉載,如有侵權,請告知將給以刪掉原文章鏈接:本來(lái)寫(xiě)這個(gè)玩意是想拿來(lái)手動(dòng)登入百度,然后按照帖吧內的的排行抓取會(huì )員頭像的,比如生成一個(gè)帖吧萬(wàn)人頭像圖或千人頭像圖。也算是練練手。完成后才發(fā)覺(jué)抓那種帖吧排行完全不需要登陸…也好,以后拿來(lái)做手動(dòng)一鍵簽到(經(jīng)常忘打卡),搶二樓哪些的,也...
任務(wù)自動(dòng)化_request 模擬登陸實(shí)戰
知識點(diǎn):request 帶密碼登入、selenium+headless Chrome、pandas、思路:request 爬蟲(chóng)模擬登陸,下載文檔,再用 pandas 進(jìn)行數據剖析
python實(shí)現模擬登陸
本文主要用python實(shí)現了對網(wǎng)站的模擬登陸。通過(guò)自己構造post數據來(lái)用Python實(shí)現登陸過(guò)程。當你要模擬登陸一個(gè)網(wǎng)站時(shí),首先要搞清楚網(wǎng)站的登陸處理細節(發(fā)了什么樣的數據,給誰(shuí)發(fā)等...)。我是通過(guò)HTTPfox來(lái)抓取http數據包來(lái)剖析該網(wǎng)站的登陸流程。同時(shí),我們還要剖析抓到的post包的數據結構和header,要按照遞交的數據結構和heander來(lái)構造自己的pos...

請問(wèn)寫(xiě)python爬蟲(chóng)怎樣用urllib或則requests模擬用戶(hù)登入
比如我在百度文庫下個(gè)教案,,我用urllib2或則request,我可以用urllib2.open(url)或者requests.get(url)來(lái)打開(kāi)頁(yè)面,但是不知道怎么寫(xiě)cookie的,就是使瀏覽器覺(jué)得你早已登陸了,請問(wèn)怎么寫(xiě)urllib或則requests.get呢?謝謝
requests 實(shí)現模擬登陸,獲取cookie
有個(gè)需求須要模擬登陸csdn獲取cookie,對csdn進(jìn)行后續系列操作,剛開(kāi)始使用的selenium,功能可以實(shí)現,但是效率有點(diǎn)低,后來(lái)改用的requests,遇到不少坑,今天來(lái)總結一下。首先找到csdn登陸的url,在故意輸錯密碼的情況下點(diǎn)擊登陸,檢查會(huì )發(fā)覺(jué)network中有一個(gè)dologin的響應,這就是要遞交到服務(wù)器的帳號密碼信息。點(diǎn)開(kāi)會(huì )發(fā)覺(jué)下圖所示:請求的url,請求方法p...
Python模擬登錄
最近想做一個(gè)可以模擬人工,對網(wǎng)站的內容進(jìn)行操作,比如手動(dòng)購物,自動(dòng)支付。朋友向我推薦用Python去寫(xiě)python爬蟲(chóng)模擬登錄,我也就開(kāi)始用Python??戳艘恍┐蠹s,用Python3 的requests去弄,感覺(jué)邏輯很簡(jiǎn)單。最主要的問(wèn)題是怎樣去剖析網(wǎng)站的邏輯,這很難。用了chrome f12 記錄網(wǎng)頁(yè)的操作,但是一點(diǎn)是,chrome不能全文查找,沒(méi)辦法搜索到諸如帳號密碼的傳送,cookie等問(wèn)題,手動(dòng)查找好煩。
Python模擬登陸的幾種方式
目錄方式一:直接使用已知的cookie訪(fǎng)問(wèn)技巧二:模擬登陸后再攜帶得到的cookie訪(fǎng)問(wèn)方式三:模擬登陸后用session保持登入狀態(tài)方式四:使用無(wú)頭瀏覽器訪(fǎng)問(wèn)正文方式一:直接使用已知的cookie訪(fǎng)問(wèn)特征:簡(jiǎn)單,但須要先在瀏覽器登陸原理:簡(jiǎn)單地說(shuō),cookie保存在發(fā)起懇求的客戶(hù)端中,服務(wù)器借助cookie來(lái)分辨不同的客戶(hù)端。因為htt...
用Python模擬登陸中學(xué)教務(wù)系統搶課
-- Illustrations by Vladislav Solovjov --作者:小蘇打博客地址:地址:github....
Python爬蟲(chóng)之模擬登陸總結
備注:python 2.7.9,32位有些網(wǎng)站需要登入后才會(huì )爬取所須要的信息python爬蟲(chóng)模擬登錄,此時(shí)可以設計爬蟲(chóng)進(jìn)行模擬登陸,原理是借助瀏覽器cookie。一、瀏覽器訪(fǎng)問(wèn)服務(wù)器的過(guò)程: (1)瀏覽器(客戶(hù)端)向Web服務(wù)器發(fā)出一個(gè)HTTP請求(Http request); (2)Web服務(wù)器收到懇求,發(fā)回響應信息(Http Response); (3)瀏覽器解析內容呈現
python模擬瀏覽器登陸
轉自:
python3下使用requests實(shí)現模擬用戶(hù)登入 —— 基礎篇(馬蜂窩)
python3下使用requests實(shí)現模擬用戶(hù)登入 —— 基礎篇(馬蜂窩)1. 了解cookie和session首先一定要先了解到cookie和session是哪些,這是前面理解網(wǎng)站交互,模擬用戶(hù)登入的基礎。1.1. 無(wú)狀態(tài)合同:Http如上圖所示,HTTP合同 是無(wú)狀態(tài)的合同,用戶(hù)瀏覽服務(wù)器上的內容,只須要發(fā)送頁(yè)面懇求,服務(wù)器返回內容。對于服務(wù)器來(lái)說(shuō),并不關(guān)心,也...
Visual C++技術(shù)內幕(第四版).part4.rar下載
一個(gè)十分清淅的PDF版的Visual C++技術(shù)黑幕(第四版),至于這本書(shū)究竟有多強就不用我介紹了吧!本書(shū)共分part1、part2、part3、part4 四部份相關(guān)下載鏈接:
sap施行顧問(wèn)寶典2下載
sap施行顧問(wèn)寶典一共3個(gè)壓縮包挺好的東西。相關(guān)下載鏈接:
Xilinx_ise使用教程(配合Modelsim使用)下載
這是我搜集的一個(gè)Xilinx_ISE6.1的教程,結合了MODELSIM的仿真功能,自己覺(jué)得講解的還可以,適合初學(xué)者入門(mén)使用,對其他人員也有一定的參考價(jià)值。相關(guān)下載鏈接:
相關(guān)熱詞c# 程序跳轉c#索引器定義、c#掃描軟件c# 文字復印左右反轉c#byte轉換成數字c# 音量調節組件c# wpf 界面c# 讀取證書(shū)文件的內容c# dgv 樹(shù)結構c#承繼 反序列化
我們是太有底線(xiàn)的
Python代理IP爬蟲(chóng)的菜鳥(niǎo)使用教程
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 387 次瀏覽 ? 2020-06-24 08:01
Python爬蟲(chóng)要經(jīng)歷爬蟲(chóng)、爬蟲(chóng)被限制、爬蟲(chóng)反限制的過(guò)程。當然后續還要網(wǎng)頁(yè)爬蟲(chóng)限制優(yōu)化爬蟲(chóng)代理,爬蟲(chóng)再反限制的一系列道高一尺魔高一丈的過(guò)程。爬蟲(chóng)的中級階段,添加headers和ip代理可以解決好多問(wèn)題。
本人自己在爬取豆瓣讀書(shū)的時(shí)侯,就以為爬取次數過(guò)多,直接被封了IP.后來(lái)就研究了代理IP的問(wèn)題.
(當時(shí)不知道哪些情況,差點(diǎn)態(tài)度就崩了...),下面給你們介紹一下我自己代理IP爬取數據的問(wèn)題,請你們強調不足之處.
問(wèn)題
這是我的IP被封了,一開(kāi)始好好的,我還以為是我的代碼問(wèn)題了
思路:
從網(wǎng)上查找了一些關(guān)于爬蟲(chóng)代理IP的資料,得到下邊的思路
爬取一些IP,過(guò)濾掉不可用. 在requests的懇求的proxies參數加入對應的IP. 繼續爬取. 收工 好吧,都是屁話(huà),理論你們都懂,上面直接上代碼...
思路有了,動(dòng)手上去.
運行環(huán)境
Python 3.7, Pycharm
這些須要你們直接去搭建好環(huán)境...
準備工作
爬取IP地址的網(wǎng)站(國內高匿代理) 校準IP地址的網(wǎng)站 你之前被封IP的py爬蟲(chóng)腳本...
上面的網(wǎng)址看個(gè)人的情況來(lái)選定
爬取IP的完整代碼
PS:簡(jiǎn)單的使用bs4獲取IP和端口號,沒(méi)有啥難度,里面降低了一個(gè)過(guò)濾不可用IP的邏輯
關(guān)鍵地方都有注釋了
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2018/11/22
# @Author : liangk
# @Site :
# @File : auto_archive_ios.py
# @Software: PyCharm
import requests
from bs4 import BeautifulSoup
import json
class GetIp(object):
"""抓取代理IP"""
def __init__(self):
"""初始化變量"""
self.url = 'http://www.xicidaili.com/nn/'
self.check_url = 'https://www.ip.cn/'
self.ip_list = []
@staticmethod
def get_html(url):
"""請求html頁(yè)面信息"""
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
}
try:
request = requests.get(url=url, headers=header)
request.encoding = 'utf-8'
html = request.text
return html
except Exception as e:
return ''
def get_available_ip(self, ip_address, ip_port):
"""檢測IP地址是否可用"""
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
}
ip_url_next = '://' + ip_address + ':' + ip_port
proxies = {'http': 'http' + ip_url_next, 'https': 'https' + ip_url_next}
try:
r = requests.get(self.check_url, headers=header, proxies=proxies, timeout=3)
html = r.text
except:
print('fail-%s' % ip_address)
else:
print('success-%s' % ip_address)
soup = BeautifulSoup(html, 'lxml')
div = soup.find(class_='well')
if div:
print(div.text)
ip_info = {'address': ip_address, 'port': ip_port}
self.ip_list.append(ip_info)
def main(self):
"""主方法"""
web_html = self.get_html(self.url)
soup = BeautifulSoup(web_html, 'lxml')
ip_list = soup.find(id='ip_list').find_all('tr')
for ip_info in ip_list:
td_list = ip_info.find_all('td')
if len(td_list) > 0:
ip_address = td_list[1].text
ip_port = td_list[2].text
# 檢測IP地址是否有效
self.get_available_ip(ip_address, ip_port)
# 寫(xiě)入有效文件
with open('ip.txt', 'w') as file:
json.dump(self.ip_list, file)
print(self.ip_list)
# 程序主入口
if __name__ == '__main__':
get_ip = GetIp()
get_ip.main()
使用方式完整代碼
PS: 主要是通過(guò)使用隨機的IP來(lái)爬取,根據request_status來(lái)判定這個(gè)IP是否可以用.
為什么要這樣判定?
主要是即使前面經(jīng)過(guò)了過(guò)濾,但是不代表在你爬取的時(shí)侯是可以用的,所以還是得多做一個(gè)判定.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2018/11/22
# @Author : liangk
# @Site :
# @File : get_douban_books.py
# @Software: PyCharm
from bs4 import BeautifulSoup
import datetime
import requests
import json
import random
ip_random = -1
article_tag_list = []
article_type_list = []
def get_html(url):
header = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
}
global ip_random
ip_rand, proxies = get_proxie(ip_random)
print(proxies)
try:
request = requests.get(url=url, headers=header, proxies=proxies, timeout=3)
except:
request_status = 500
else:
request_status = request.status_code
print(request_status)
while request_status != 200:
ip_random = -1
ip_rand, proxies = get_proxie(ip_random)
print(proxies)
try:
request = requests.get(url=url, headers=header, proxies=proxies, timeout=3)
except:
request_status = 500
else:
request_status = request.status_code
print(request_status)
ip_random = ip_rand
request.encoding = 'gbk'
html = request.content
print(html)
return html
def get_proxie(random_number):
with open('ip.txt', 'r') as file:
ip_list = json.load(file)
if random_number == -1:
random_number = random.randint(0, len(ip_list) - 1)
ip_info = ip_list[random_number]
ip_url_next = '://' + ip_info['address'] + ':' + ip_info['port']
proxies = {'http': 'http' + ip_url_next, 'https': 'https' + ip_url_next}
return random_number, proxies
# 程序主入口
if __name__ == '__main__':
"""只是爬取了書(shū)籍的第一頁(yè),按照評價(jià)排序"""
start_time = datetime.datetime.now()
url = 'https://book.douban.com/tag/?view=type&icn=index-sorttags-all'
base_url = 'https://book.douban.com/tag/'
html = get_html(url)
soup = BeautifulSoup(html, 'lxml')
article_tag_list = soup.find_all(class_='tag-content-wrapper')
tagCol_list = soup.find_all(class_='tagCol')
for table in tagCol_list:
""" 整理分析數據 """
sub_type_list = []
a = table.find_all('a')
for book_type in a:
sub_type_list.append(book_type.text)
article_type_list.append(sub_type_list)
for sub in article_type_list:
for sub1 in sub:
title = '==============' + sub1 + '=============='
print(title)
print(base_url + sub1 + '?start=0' + '&type=S')
with open('book.text', 'a', encoding='utf-8') as f:
f.write('\n' + title + '\n')
f.write(url + '\n')
for start in range(0, 2):
# (start * 20) 分頁(yè)是0 20 40 這樣的
# type=S是按評價(jià)排序
url = base_url + sub1 + '?start=%s' % (start * 20) + '&type=S'
html = get_html(url)
soup = BeautifulSoup(html, 'lxml')
li = soup.find_all(class_='subject-item')
for div in li:
info = div.find(class_='info').find('a')
img = div.find(class_='pic').find('img')
content = '書(shū)名:<%s>' % info['title'] + ' 書(shū)本圖片:' + img['src'] + '\n'
print(content)
with open('book.text', 'a', encoding='utf-8') as f:
f.write(content)
end_time = datetime.datetime.now()
print('耗時(shí): ', (end_time - start_time).seconds)
為什么選擇國外高匿代理!
總結
使用這樣簡(jiǎn)單的代理IP,基本上就可以應付在爬爬爬著(zhù)被封IP的情況了.而且沒(méi)有使用自己的IP,間接的保護?!?!
大家有其他的愈發(fā)快捷的方式,歡迎你們可以拿出來(lái)交流和討論爬蟲(chóng)代理,謝謝。 查看全部
前言
Python爬蟲(chóng)要經(jīng)歷爬蟲(chóng)、爬蟲(chóng)被限制、爬蟲(chóng)反限制的過(guò)程。當然后續還要網(wǎng)頁(yè)爬蟲(chóng)限制優(yōu)化爬蟲(chóng)代理,爬蟲(chóng)再反限制的一系列道高一尺魔高一丈的過(guò)程。爬蟲(chóng)的中級階段,添加headers和ip代理可以解決好多問(wèn)題。
本人自己在爬取豆瓣讀書(shū)的時(shí)侯,就以為爬取次數過(guò)多,直接被封了IP.后來(lái)就研究了代理IP的問(wèn)題.
(當時(shí)不知道哪些情況,差點(diǎn)態(tài)度就崩了...),下面給你們介紹一下我自己代理IP爬取數據的問(wèn)題,請你們強調不足之處.
問(wèn)題
這是我的IP被封了,一開(kāi)始好好的,我還以為是我的代碼問(wèn)題了

思路:
從網(wǎng)上查找了一些關(guān)于爬蟲(chóng)代理IP的資料,得到下邊的思路
爬取一些IP,過(guò)濾掉不可用. 在requests的懇求的proxies參數加入對應的IP. 繼續爬取. 收工 好吧,都是屁話(huà),理論你們都懂,上面直接上代碼...
思路有了,動(dòng)手上去.
運行環(huán)境
Python 3.7, Pycharm
這些須要你們直接去搭建好環(huán)境...
準備工作
爬取IP地址的網(wǎng)站(國內高匿代理) 校準IP地址的網(wǎng)站 你之前被封IP的py爬蟲(chóng)腳本...
上面的網(wǎng)址看個(gè)人的情況來(lái)選定
爬取IP的完整代碼
PS:簡(jiǎn)單的使用bs4獲取IP和端口號,沒(méi)有啥難度,里面降低了一個(gè)過(guò)濾不可用IP的邏輯
關(guān)鍵地方都有注釋了
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2018/11/22
# @Author : liangk
# @Site :
# @File : auto_archive_ios.py
# @Software: PyCharm
import requests
from bs4 import BeautifulSoup
import json
class GetIp(object):
"""抓取代理IP"""
def __init__(self):
"""初始化變量"""
self.url = 'http://www.xicidaili.com/nn/'
self.check_url = 'https://www.ip.cn/'
self.ip_list = []
@staticmethod
def get_html(url):
"""請求html頁(yè)面信息"""
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
}
try:
request = requests.get(url=url, headers=header)
request.encoding = 'utf-8'
html = request.text
return html
except Exception as e:
return ''
def get_available_ip(self, ip_address, ip_port):
"""檢測IP地址是否可用"""
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
}
ip_url_next = '://' + ip_address + ':' + ip_port
proxies = {'http': 'http' + ip_url_next, 'https': 'https' + ip_url_next}
try:
r = requests.get(self.check_url, headers=header, proxies=proxies, timeout=3)
html = r.text
except:
print('fail-%s' % ip_address)
else:
print('success-%s' % ip_address)
soup = BeautifulSoup(html, 'lxml')
div = soup.find(class_='well')
if div:
print(div.text)
ip_info = {'address': ip_address, 'port': ip_port}
self.ip_list.append(ip_info)
def main(self):
"""主方法"""
web_html = self.get_html(self.url)
soup = BeautifulSoup(web_html, 'lxml')
ip_list = soup.find(id='ip_list').find_all('tr')
for ip_info in ip_list:
td_list = ip_info.find_all('td')
if len(td_list) > 0:
ip_address = td_list[1].text
ip_port = td_list[2].text
# 檢測IP地址是否有效
self.get_available_ip(ip_address, ip_port)
# 寫(xiě)入有效文件
with open('ip.txt', 'w') as file:
json.dump(self.ip_list, file)
print(self.ip_list)
# 程序主入口
if __name__ == '__main__':
get_ip = GetIp()
get_ip.main()
使用方式完整代碼
PS: 主要是通過(guò)使用隨機的IP來(lái)爬取,根據request_status來(lái)判定這個(gè)IP是否可以用.
為什么要這樣判定?
主要是即使前面經(jīng)過(guò)了過(guò)濾,但是不代表在你爬取的時(shí)侯是可以用的,所以還是得多做一個(gè)判定.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2018/11/22
# @Author : liangk
# @Site :
# @File : get_douban_books.py
# @Software: PyCharm
from bs4 import BeautifulSoup
import datetime
import requests
import json
import random
ip_random = -1
article_tag_list = []
article_type_list = []
def get_html(url):
header = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
}
global ip_random
ip_rand, proxies = get_proxie(ip_random)
print(proxies)
try:
request = requests.get(url=url, headers=header, proxies=proxies, timeout=3)
except:
request_status = 500
else:
request_status = request.status_code
print(request_status)
while request_status != 200:
ip_random = -1
ip_rand, proxies = get_proxie(ip_random)
print(proxies)
try:
request = requests.get(url=url, headers=header, proxies=proxies, timeout=3)
except:
request_status = 500
else:
request_status = request.status_code
print(request_status)
ip_random = ip_rand
request.encoding = 'gbk'
html = request.content
print(html)
return html
def get_proxie(random_number):
with open('ip.txt', 'r') as file:
ip_list = json.load(file)
if random_number == -1:
random_number = random.randint(0, len(ip_list) - 1)
ip_info = ip_list[random_number]
ip_url_next = '://' + ip_info['address'] + ':' + ip_info['port']
proxies = {'http': 'http' + ip_url_next, 'https': 'https' + ip_url_next}
return random_number, proxies
# 程序主入口
if __name__ == '__main__':
"""只是爬取了書(shū)籍的第一頁(yè),按照評價(jià)排序"""
start_time = datetime.datetime.now()
url = 'https://book.douban.com/tag/?view=type&icn=index-sorttags-all'
base_url = 'https://book.douban.com/tag/'
html = get_html(url)
soup = BeautifulSoup(html, 'lxml')
article_tag_list = soup.find_all(class_='tag-content-wrapper')
tagCol_list = soup.find_all(class_='tagCol')
for table in tagCol_list:
""" 整理分析數據 """
sub_type_list = []
a = table.find_all('a')
for book_type in a:
sub_type_list.append(book_type.text)
article_type_list.append(sub_type_list)
for sub in article_type_list:
for sub1 in sub:
title = '==============' + sub1 + '=============='
print(title)
print(base_url + sub1 + '?start=0' + '&type=S')
with open('book.text', 'a', encoding='utf-8') as f:
f.write('\n' + title + '\n')
f.write(url + '\n')
for start in range(0, 2):
# (start * 20) 分頁(yè)是0 20 40 這樣的
# type=S是按評價(jià)排序
url = base_url + sub1 + '?start=%s' % (start * 20) + '&type=S'
html = get_html(url)
soup = BeautifulSoup(html, 'lxml')
li = soup.find_all(class_='subject-item')
for div in li:
info = div.find(class_='info').find('a')
img = div.find(class_='pic').find('img')
content = '書(shū)名:<%s>' % info['title'] + ' 書(shū)本圖片:' + img['src'] + '\n'
print(content)
with open('book.text', 'a', encoding='utf-8') as f:
f.write(content)
end_time = datetime.datetime.now()
print('耗時(shí): ', (end_time - start_time).seconds)
為什么選擇國外高匿代理!

總結
使用這樣簡(jiǎn)單的代理IP,基本上就可以應付在爬爬爬著(zhù)被封IP的情況了.而且沒(méi)有使用自己的IP,間接的保護?!?!
大家有其他的愈發(fā)快捷的方式,歡迎你們可以拿出來(lái)交流和討論爬蟲(chóng)代理,謝謝。
寫(xiě)爬蟲(chóng),用哪些編程語(yǔ)言好,python好嗎
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 435 次瀏覽 ? 2020-06-23 08:01
之前換了份工作,不再是單純的Web開(kāi)發(fā)了,要學(xué)習的東西真的很多的。入職的第1天,就讓我入手寫(xiě)個(gè)爬蟲(chóng),只是這個(gè)爬蟲(chóng)沒(méi)有采集幾個(gè)億數據量的業(yè)務(wù)場(chǎng)景。
于是,整理了下需求,簡(jiǎn)單的設計了下方案就草草開(kāi)始了。小B是我學(xué)院時(shí)侯的同事,那天這哥們約我喝水,想看下能夠順帶介紹幾個(gè)姑娘。酒過(guò)三巡,不勝酒力,于是便聊起了近來(lái)的工作。
當他知曉我居然在寫(xiě)爬蟲(chóng),便起了同情之心,覺(jué)得我懷才不遇。仿佛寫(xiě)爬蟲(chóng)是件太低級太low的技術(shù)活。在他那家公司,招進(jìn)來(lái)的實(shí)習生就多多少少會(huì )點(diǎn)爬蟲(chóng),什么nodejs、golang,哪個(gè)不是爬蟲(chóng)的好手。沒(méi)想到我結業(yè)多年,竟然淪落到做實(shí)習生的工作,可悲可泣。
接著(zhù)建議我轉入Java陣營(yíng),如果到他公司去,多多少少也能混個(gè)主任的職位。搞得自己只能一番苦笑。
不知道從何時(shí)起,程序員的世界流行起了鄙視鏈這玩意。什么寫(xiě)C語(yǔ)言的厭惡寫(xiě)C++,寫(xiě)C++的厭惡寫(xiě)Java的,最后鄙視鏈最高端是PHP。具體是如何的關(guān)系,就不再揣測了。
寫(xiě)爬蟲(chóng),用哪些編程語(yǔ)言好,python好嗎
然而,縱觀(guān)整個(gè)行業(yè),都說(shuō)Python火。具體有多火,看培訓機構的廣告就曉得了。在16年之前,Python還是1個(gè)若不見(jiàn)經(jīng)傳的詞組,之后各家培訓機構鋪天蓋地的廣告,什么大數據、自動(dòng)化運維全都跟Python扯上了關(guān)系。畢業(yè)學(xué)生工資更是達到了50-100W,還老是招不到人。
更有意思的是,學(xué)Python最容易上手的過(guò)程就是寫(xiě)爬蟲(chóng)。什么Scrapy、Pysider是必學(xué),HTML、Javascript是重點(diǎn),外帶幾個(gè)豆瓣、花瓣網(wǎng)的實(shí)戰案例,讓你一下子才能解決企業(yè)的剛需。
這樣說(shuō)來(lái),難怪連實(shí)習生也能跟你搶飯碗了,技術(shù)發(fā)展的很快,各種框架構建的結果是釋放人力,降低成本。
據我了解,Python的優(yōu)勢集中于數據剖析、信息安全那些領(lǐng)域。你可能聽(tīng)說(shuō)過(guò)Hadoop、Spark、Tensorflow這種高大上的名詞,但是對于數據取證、DLL注入等內容可能從無(wú)聽(tīng)聞。舉個(gè)簡(jiǎn)單的事例,在數據取證中,由于犯罪人員不配合檢測機關(guān)的工作,通過(guò)數據取證技術(shù)我們可以進(jìn)行一些信息的提取,從而輔助否認其犯罪記錄,如獲取系統密碼、瀏覽器中帳號及密碼。
聽(tīng)起來(lái)覺(jué)得很高大上的,但是假如我跟你說(shuō)其過(guò)程就是對sqlite3文件數據庫查詢(xún)一下SQL,不知道你會(huì )不會(huì )認為上述取證的事例頓時(shí)很low的。但是,當你不留神把陌陌消息的圖片刪除想尋回的時(shí)侯,或許你能在Python中找到對應的方案,而其他的語(yǔ)言還真沒(méi)發(fā)覺(jué)有合適的。
于是,我開(kāi)導他說(shuō),搞完這波爬蟲(chóng)騷操作,下一次就是數據剖析了,你看不有前進(jìn)了一步?
還數據剖析,你似乎想的很遠的。小B打斷了我的話(huà),你認為人家會(huì )使你搞數據剖析,沒(méi)有數據何來(lái)的剖析。況且,沒(méi)有哪家公司會(huì )笨到把所有數據都曝露在互聯(lián)網(wǎng)上。你能看到的只是那冰山的一角。即使你想深入進(jìn)去,沒(méi)有分布式技術(shù)支撐和幾十個(gè)億的數據業(yè)務(wù),你簡(jiǎn)歷上也不會(huì )有亮點(diǎn)。
然后,又聊到他公司近日招了個(gè)大數據的開(kāi)發(fā),薪資比他還要高出一大截,但是技術(shù)卻不咋地。我從小B的話(huà)里聽(tīng)出了一絲揶揄了。于是,又教唆我不要再搞哪些爬蟲(chóng)了,還是搞Spark才有未來(lái)。既不用害怕大深夜服務(wù)掛了,又不用害怕完不成采集數量。完全是實(shí)打實(shí)的數據,何樂(lè )而不為呢?
這話(huà)聽(tīng)得我都有點(diǎn)動(dòng)心了,沒(méi)有攀比就沒(méi)有傷害。但是一想到Java是加班加點(diǎn)工作,我還是打消了這個(gè)念頭。
我不知道該說(shuō)些哪些,只是認為時(shí)間過(guò)得太慢,是種熬煎。于是只能扯開(kāi)了話(huà)題,免得喝頓飯都艱難。
結語(yǔ)
技術(shù)沒(méi)有low不low,沒(méi)有爛的技術(shù),只有不會(huì )用的人。重要的是人家能給你多少錢(qián),你能弄成如何的結果。
這年頭會(huì )有多少公司樂(lè )意給實(shí)習生稅后1W+的起薪,而這一切都只是份養活自己的技能而已,別把面子很當回事。
寫(xiě)爬蟲(chóng),用哪些編程語(yǔ)言好,python好嗎,其實(shí)編程的路上只在于擅長(cháng),沒(méi)有所謂的行不行,如果不擅長(cháng),就是給您好用的編程語(yǔ)言也沒(méi)有療效,如果想要學(xué)編程,那就關(guān)注IT培訓網(wǎng)網(wǎng)絡(luò )爬蟲(chóng)用什么語(yǔ)言寫(xiě),讓我們一起走入編程的世界! 查看全部
用Python寫(xiě)爬蟲(chóng)就太low?你贊成嘛?為何不建議使用python寫(xiě)爬蟲(chóng)呢網(wǎng)絡(luò )爬蟲(chóng)用什么語(yǔ)言寫(xiě),是有哪些誘因嗎,難道用python寫(xiě)爬蟲(chóng)不好嗎?
之前換了份工作,不再是單純的Web開(kāi)發(fā)了,要學(xué)習的東西真的很多的。入職的第1天,就讓我入手寫(xiě)個(gè)爬蟲(chóng),只是這個(gè)爬蟲(chóng)沒(méi)有采集幾個(gè)億數據量的業(yè)務(wù)場(chǎng)景。
于是,整理了下需求,簡(jiǎn)單的設計了下方案就草草開(kāi)始了。小B是我學(xué)院時(shí)侯的同事,那天這哥們約我喝水,想看下能夠順帶介紹幾個(gè)姑娘。酒過(guò)三巡,不勝酒力,于是便聊起了近來(lái)的工作。
當他知曉我居然在寫(xiě)爬蟲(chóng),便起了同情之心,覺(jué)得我懷才不遇。仿佛寫(xiě)爬蟲(chóng)是件太低級太low的技術(shù)活。在他那家公司,招進(jìn)來(lái)的實(shí)習生就多多少少會(huì )點(diǎn)爬蟲(chóng),什么nodejs、golang,哪個(gè)不是爬蟲(chóng)的好手。沒(méi)想到我結業(yè)多年,竟然淪落到做實(shí)習生的工作,可悲可泣。
接著(zhù)建議我轉入Java陣營(yíng),如果到他公司去,多多少少也能混個(gè)主任的職位。搞得自己只能一番苦笑。
不知道從何時(shí)起,程序員的世界流行起了鄙視鏈這玩意。什么寫(xiě)C語(yǔ)言的厭惡寫(xiě)C++,寫(xiě)C++的厭惡寫(xiě)Java的,最后鄙視鏈最高端是PHP。具體是如何的關(guān)系,就不再揣測了。

寫(xiě)爬蟲(chóng),用哪些編程語(yǔ)言好,python好嗎
然而,縱觀(guān)整個(gè)行業(yè),都說(shuō)Python火。具體有多火,看培訓機構的廣告就曉得了。在16年之前,Python還是1個(gè)若不見(jiàn)經(jīng)傳的詞組,之后各家培訓機構鋪天蓋地的廣告,什么大數據、自動(dòng)化運維全都跟Python扯上了關(guān)系。畢業(yè)學(xué)生工資更是達到了50-100W,還老是招不到人。
更有意思的是,學(xué)Python最容易上手的過(guò)程就是寫(xiě)爬蟲(chóng)。什么Scrapy、Pysider是必學(xué),HTML、Javascript是重點(diǎn),外帶幾個(gè)豆瓣、花瓣網(wǎng)的實(shí)戰案例,讓你一下子才能解決企業(yè)的剛需。
這樣說(shuō)來(lái),難怪連實(shí)習生也能跟你搶飯碗了,技術(shù)發(fā)展的很快,各種框架構建的結果是釋放人力,降低成本。
據我了解,Python的優(yōu)勢集中于數據剖析、信息安全那些領(lǐng)域。你可能聽(tīng)說(shuō)過(guò)Hadoop、Spark、Tensorflow這種高大上的名詞,但是對于數據取證、DLL注入等內容可能從無(wú)聽(tīng)聞。舉個(gè)簡(jiǎn)單的事例,在數據取證中,由于犯罪人員不配合檢測機關(guān)的工作,通過(guò)數據取證技術(shù)我們可以進(jìn)行一些信息的提取,從而輔助否認其犯罪記錄,如獲取系統密碼、瀏覽器中帳號及密碼。
聽(tīng)起來(lái)覺(jué)得很高大上的,但是假如我跟你說(shuō)其過(guò)程就是對sqlite3文件數據庫查詢(xún)一下SQL,不知道你會(huì )不會(huì )認為上述取證的事例頓時(shí)很low的。但是,當你不留神把陌陌消息的圖片刪除想尋回的時(shí)侯,或許你能在Python中找到對應的方案,而其他的語(yǔ)言還真沒(méi)發(fā)覺(jué)有合適的。
于是,我開(kāi)導他說(shuō),搞完這波爬蟲(chóng)騷操作,下一次就是數據剖析了,你看不有前進(jìn)了一步?
還數據剖析,你似乎想的很遠的。小B打斷了我的話(huà),你認為人家會(huì )使你搞數據剖析,沒(méi)有數據何來(lái)的剖析。況且,沒(méi)有哪家公司會(huì )笨到把所有數據都曝露在互聯(lián)網(wǎng)上。你能看到的只是那冰山的一角。即使你想深入進(jìn)去,沒(méi)有分布式技術(shù)支撐和幾十個(gè)億的數據業(yè)務(wù),你簡(jiǎn)歷上也不會(huì )有亮點(diǎn)。
然后,又聊到他公司近日招了個(gè)大數據的開(kāi)發(fā),薪資比他還要高出一大截,但是技術(shù)卻不咋地。我從小B的話(huà)里聽(tīng)出了一絲揶揄了。于是,又教唆我不要再搞哪些爬蟲(chóng)了,還是搞Spark才有未來(lái)。既不用害怕大深夜服務(wù)掛了,又不用害怕完不成采集數量。完全是實(shí)打實(shí)的數據,何樂(lè )而不為呢?
這話(huà)聽(tīng)得我都有點(diǎn)動(dòng)心了,沒(méi)有攀比就沒(méi)有傷害。但是一想到Java是加班加點(diǎn)工作,我還是打消了這個(gè)念頭。
我不知道該說(shuō)些哪些,只是認為時(shí)間過(guò)得太慢,是種熬煎。于是只能扯開(kāi)了話(huà)題,免得喝頓飯都艱難。
結語(yǔ)
技術(shù)沒(méi)有low不low,沒(méi)有爛的技術(shù),只有不會(huì )用的人。重要的是人家能給你多少錢(qián),你能弄成如何的結果。
這年頭會(huì )有多少公司樂(lè )意給實(shí)習生稅后1W+的起薪,而這一切都只是份養活自己的技能而已,別把面子很當回事。
寫(xiě)爬蟲(chóng),用哪些編程語(yǔ)言好,python好嗎,其實(shí)編程的路上只在于擅長(cháng),沒(méi)有所謂的行不行,如果不擅長(cháng),就是給您好用的編程語(yǔ)言也沒(méi)有療效,如果想要學(xué)編程,那就關(guān)注IT培訓網(wǎng)網(wǎng)絡(luò )爬蟲(chóng)用什么語(yǔ)言寫(xiě),讓我們一起走入編程的世界!
三種 Python 網(wǎng)絡(luò )內容抓取工具與爬蟲(chóng)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 447 次瀏覽 ? 2020-06-23 08:01
在一個(gè)理想的世界里,你須要的所有數據都將以公開(kāi)而文檔完備的格式清晰地詮釋?zhuān)憧梢暂p松地下載并在任何你須要的地方使用。
然而,在真實(shí)世界里,數據是零亂的,極少被打包成你須要的樣子,要么常常是過(guò)期的。
你所須要的信息常常是埋藏在一個(gè)網(wǎng)站里。相比一些清晰地、有調養地呈現數據的網(wǎng)站,更多的網(wǎng)站則不是這樣的。爬取數據crawling、挖掘數據scraping、加工數據、整理數據那些是獲取整個(gè)網(wǎng)站結構來(lái)勾畫(huà)網(wǎng)站拓撲來(lái)搜集數據所必須的活動(dòng),這些可以是以網(wǎng)站的格式存儲的或則是存放在一個(gè)專(zhuān)有數據庫中。
也許在不久的將來(lái),你須要通過(guò)爬取和挖掘來(lái)獲得一些你須要的數據,當然你幾乎肯定須要進(jìn)行一點(diǎn)點(diǎn)的編程來(lái)正確的獲取。你要如何做取決于你自己,但是我發(fā)覺(jué) Python 社區是一個(gè)挺好的提供者,它提供了工具、框架以及文檔來(lái)幫助你從網(wǎng)站上獲取數據。
在我們進(jìn)行之前,這里有一個(gè)小小的懇求:在你做事情之前請思索,以及請耐心。抓取這件事情并不簡(jiǎn)單。不要把網(wǎng)站爬出來(lái)只是復制一遍,并其它人的工作當作是你自己的東西(當然,沒(méi)有許可)。要注意版權和許可,以及你所爬行的內容應用哪一個(gè)標準。尊重 robots.txt 文件。不要頻繁的針對一個(gè)網(wǎng)站,這將造成真實(shí)的訪(fǎng)問(wèn)者會(huì )碰到訪(fǎng)問(wèn)困難的問(wèn)題。
在知曉那些警告過(guò)后,這里有一些太棒的 Python 網(wǎng)站爬蟲(chóng)工具,你可以拿來(lái)獲得你須要的數據。
讓我們先從 pyspider 開(kāi)始介紹。這是一個(gè)帶有 web 界面的網(wǎng)路爬蟲(chóng),讓與讓之容易跟蹤多個(gè)爬蟲(chóng)。其具有擴展性,支持多個(gè)前端數據庫和消息隊列。它還具有一些便捷的特點(diǎn),從優(yōu)先級到再度訪(fǎng)問(wèn)抓取失敗的頁(yè)面linux 爬蟲(chóng)軟件,此外還有通過(guò)時(shí)間次序來(lái)爬取和其他的一些特點(diǎn)。Pyspider 同時(shí)支持 Python 2 和 Python 3。為了實(shí)現一個(gè)更快的爬取,你可以在分布式的環(huán)境下一次使用多個(gè)爬蟲(chóng)進(jìn)行爬取。
Pyspyder 的基本用法都有良好的 文檔說(shuō)明 ,包括簡(jiǎn)單的代碼片斷。你能通過(guò)查看一個(gè) 在線(xiàn)的樣例 來(lái)體驗用戶(hù)界面。它在 Apache 2 許可證下開(kāi)源,Pyspyder 仍然在 GitHub 上積極地開(kāi)發(fā)。
MechanicalSoup 是一個(gè)基于非常流行而異常多能的 HTML 解析庫 Beautiful Soup 建立的爬蟲(chóng)庫。如果你的爬蟲(chóng)須要相當的簡(jiǎn)單,但是又要求檢測一些選擇框或則輸入一些文字,而你又不想為這個(gè)任務(wù)單獨寫(xiě)一個(gè)爬蟲(chóng),那么這會(huì )是一個(gè)值得考慮的選擇。
MechanicalSoup 在 MIT 許可證下開(kāi)源。查看 GitHub 上該項目的 example.py 樣例文件來(lái)獲得更多的用法。不幸的是,到目前為止,這個(gè)項目還沒(méi)有一個(gè)挺好的文檔。
Scrapy 是一個(gè)有著(zhù)活躍社區支持的抓取框架,在那里你可以建造自己的抓取工具。除了爬取和解析工具,它能夠將它搜集的數據以 JSON 或者 CSV 之類(lèi)的格式輕松輸出,并儲存在一個(gè)你選擇的前端數據庫。它還有許多外置的任務(wù)擴充linux 爬蟲(chóng)軟件,例如 cookie 處理、代理誤導、限制爬取深度等等,同時(shí)還可以構建你自己附加的 API。
要了解 Scrapy,你可以查看網(wǎng)上的文檔或則是訪(fǎng)問(wèn)它眾多的社區資源,包括一個(gè) IRC 頻道、Reddit 子版塊以及關(guān)注她們的 StackOverflow 標簽。Scrapy 的代碼在 3 句版 BSD 許可證下開(kāi)源,你可以在 GitHub 上找到它們。
如果你完全不熟悉編程,Portia 提供了一個(gè)易用的可視化的界面。 則提供一個(gè)托管的版本。
這遠不是一個(gè)完整的列表,當然,如果你是一個(gè)編程專(zhuān)家,你可以選擇采取你自己的方式而不是使用這種框架中的一個(gè)?;蛘吣惆l(fā)覺(jué)一個(gè)用其他語(yǔ)言編撰的替代品。例如 Python 編程者可能更喜歡 Python 附帶的Selenium,它可以在不使用實(shí)際瀏覽器的情況下進(jìn)行爬取。如果你有喜歡的爬取和挖掘工具,請在下邊評論使我們曉得。
?。}圖:You as a Machine. Modified by Rikki Endsley. CC BY-SA 2.0)
via: /resources/python/web-scraper-crawler 查看全部
運用這種太棒的 Python 爬蟲(chóng)工具來(lái)獲取你須要的數據。
在一個(gè)理想的世界里,你須要的所有數據都將以公開(kāi)而文檔完備的格式清晰地詮釋?zhuān)憧梢暂p松地下載并在任何你須要的地方使用。
然而,在真實(shí)世界里,數據是零亂的,極少被打包成你須要的樣子,要么常常是過(guò)期的。
你所須要的信息常常是埋藏在一個(gè)網(wǎng)站里。相比一些清晰地、有調養地呈現數據的網(wǎng)站,更多的網(wǎng)站則不是這樣的。爬取數據crawling、挖掘數據scraping、加工數據、整理數據那些是獲取整個(gè)網(wǎng)站結構來(lái)勾畫(huà)網(wǎng)站拓撲來(lái)搜集數據所必須的活動(dòng),這些可以是以網(wǎng)站的格式存儲的或則是存放在一個(gè)專(zhuān)有數據庫中。
也許在不久的將來(lái),你須要通過(guò)爬取和挖掘來(lái)獲得一些你須要的數據,當然你幾乎肯定須要進(jìn)行一點(diǎn)點(diǎn)的編程來(lái)正確的獲取。你要如何做取決于你自己,但是我發(fā)覺(jué) Python 社區是一個(gè)挺好的提供者,它提供了工具、框架以及文檔來(lái)幫助你從網(wǎng)站上獲取數據。
在我們進(jìn)行之前,這里有一個(gè)小小的懇求:在你做事情之前請思索,以及請耐心。抓取這件事情并不簡(jiǎn)單。不要把網(wǎng)站爬出來(lái)只是復制一遍,并其它人的工作當作是你自己的東西(當然,沒(méi)有許可)。要注意版權和許可,以及你所爬行的內容應用哪一個(gè)標準。尊重 robots.txt 文件。不要頻繁的針對一個(gè)網(wǎng)站,這將造成真實(shí)的訪(fǎng)問(wèn)者會(huì )碰到訪(fǎng)問(wèn)困難的問(wèn)題。
在知曉那些警告過(guò)后,這里有一些太棒的 Python 網(wǎng)站爬蟲(chóng)工具,你可以拿來(lái)獲得你須要的數據。
讓我們先從 pyspider 開(kāi)始介紹。這是一個(gè)帶有 web 界面的網(wǎng)路爬蟲(chóng),讓與讓之容易跟蹤多個(gè)爬蟲(chóng)。其具有擴展性,支持多個(gè)前端數據庫和消息隊列。它還具有一些便捷的特點(diǎn),從優(yōu)先級到再度訪(fǎng)問(wèn)抓取失敗的頁(yè)面linux 爬蟲(chóng)軟件,此外還有通過(guò)時(shí)間次序來(lái)爬取和其他的一些特點(diǎn)。Pyspider 同時(shí)支持 Python 2 和 Python 3。為了實(shí)現一個(gè)更快的爬取,你可以在分布式的環(huán)境下一次使用多個(gè)爬蟲(chóng)進(jìn)行爬取。
Pyspyder 的基本用法都有良好的 文檔說(shuō)明 ,包括簡(jiǎn)單的代碼片斷。你能通過(guò)查看一個(gè) 在線(xiàn)的樣例 來(lái)體驗用戶(hù)界面。它在 Apache 2 許可證下開(kāi)源,Pyspyder 仍然在 GitHub 上積極地開(kāi)發(fā)。
MechanicalSoup 是一個(gè)基于非常流行而異常多能的 HTML 解析庫 Beautiful Soup 建立的爬蟲(chóng)庫。如果你的爬蟲(chóng)須要相當的簡(jiǎn)單,但是又要求檢測一些選擇框或則輸入一些文字,而你又不想為這個(gè)任務(wù)單獨寫(xiě)一個(gè)爬蟲(chóng),那么這會(huì )是一個(gè)值得考慮的選擇。
MechanicalSoup 在 MIT 許可證下開(kāi)源。查看 GitHub 上該項目的 example.py 樣例文件來(lái)獲得更多的用法。不幸的是,到目前為止,這個(gè)項目還沒(méi)有一個(gè)挺好的文檔。
Scrapy 是一個(gè)有著(zhù)活躍社區支持的抓取框架,在那里你可以建造自己的抓取工具。除了爬取和解析工具,它能夠將它搜集的數據以 JSON 或者 CSV 之類(lèi)的格式輕松輸出,并儲存在一個(gè)你選擇的前端數據庫。它還有許多外置的任務(wù)擴充linux 爬蟲(chóng)軟件,例如 cookie 處理、代理誤導、限制爬取深度等等,同時(shí)還可以構建你自己附加的 API。
要了解 Scrapy,你可以查看網(wǎng)上的文檔或則是訪(fǎng)問(wèn)它眾多的社區資源,包括一個(gè) IRC 頻道、Reddit 子版塊以及關(guān)注她們的 StackOverflow 標簽。Scrapy 的代碼在 3 句版 BSD 許可證下開(kāi)源,你可以在 GitHub 上找到它們。
如果你完全不熟悉編程,Portia 提供了一個(gè)易用的可視化的界面。 則提供一個(gè)托管的版本。
這遠不是一個(gè)完整的列表,當然,如果你是一個(gè)編程專(zhuān)家,你可以選擇采取你自己的方式而不是使用這種框架中的一個(gè)?;蛘吣惆l(fā)覺(jué)一個(gè)用其他語(yǔ)言編撰的替代品。例如 Python 編程者可能更喜歡 Python 附帶的Selenium,它可以在不使用實(shí)際瀏覽器的情況下進(jìn)行爬取。如果你有喜歡的爬取和挖掘工具,請在下邊評論使我們曉得。
?。}圖:You as a Machine. Modified by Rikki Endsley. CC BY-SA 2.0)
via: /resources/python/web-scraper-crawler
手把手教你寫(xiě)網(wǎng)絡(luò )爬蟲(chóng)(2):迷你爬蟲(chóng)構架-通用網(wǎng)路爬蟲(chóng)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 373 次瀏覽 ? 2020-06-20 08:00
介紹
大家好!回顧上一期,我們在介紹了爬蟲(chóng)的基本概念以后,就借助各類(lèi)工具橫沖直撞的完成了一個(gè)小爬蟲(chóng),目的就是猛、糙、快,方便初學(xué)者上手,建立信心。對于有一定基礎的讀者,請不要著(zhù)急,以后我們會(huì )學(xué)習主流的開(kāi)源框架,打造出一個(gè)強悍專(zhuān)業(yè)的爬蟲(chóng)系統!不過(guò)在此之前,要繼續打好基礎,本期我們先介紹爬蟲(chóng)的種類(lèi),然后選定最典型的通用網(wǎng)路爬蟲(chóng),為其設計一個(gè)迷你框架。有了自己對框架的思索后爬蟲(chóng)結構,再學(xué)習復雜的開(kāi)源框架就有頭緒了。
今天我們會(huì )把更多的時(shí)間用在思索上,而不是一根筋的coding。用80%的時(shí)間思索,20%的時(shí)間敲按鍵,這樣更有利于進(jìn)步。
語(yǔ)言&環(huán)境
語(yǔ)言:帶足彈藥,繼續用Python開(kāi)路!
一個(gè)迷你框架
下面以比較典型的通用爬蟲(chóng)為例爬蟲(chóng)結構,分析其工程要點(diǎn),設計并實(shí)現一個(gè)迷你框架。架構圖如下:
代碼結構:
config_load.py 配置文件加載
crawl_thread.py 爬取線(xiàn)程
mini_spider.py 主線(xiàn)程
spider.conf 配置文件
url_table.py url隊列、url表
urls.txt 種子url集合
webpage_parse.py 網(wǎng)頁(yè)剖析
webpage_save.py 網(wǎng)頁(yè)儲存
看看配置文件里有哪些內容:
spider.conf
url_table.py
Step 3. 記錄什么網(wǎng)頁(yè)早已下載過(guò)的小筆記本——URL表。
在互聯(lián)網(wǎng)上,一個(gè)網(wǎng)頁(yè)可能被多個(gè)網(wǎng)頁(yè)中的超鏈接所指向。這樣在遍歷互聯(lián)網(wǎng)這張圖的時(shí)侯,這個(gè)網(wǎng)頁(yè)可能被多次訪(fǎng)問(wèn)到。為了避免一個(gè)網(wǎng)頁(yè)被下載和解析多次,需要一個(gè)URL表記錄什么網(wǎng)頁(yè)早已下載過(guò)。再碰到這個(gè)網(wǎng)頁(yè)的時(shí)侯,我們就可以跳過(guò)它。
crawl_thread.py
Step 5. 頁(yè)面剖析模塊
從網(wǎng)頁(yè)中解析出URLs或則其他有用的數據。這個(gè)是下期重點(diǎn)介紹的,可以參考之前的代碼。
Step 6. 頁(yè)面儲存模塊
保存頁(yè)面的模塊,目前將文件保存為文件,以后可以擴充出多種儲存方法,如mysql,mongodb,hbase等等。
webpage_save.py
寫(xiě)到這兒,整個(gè)框架早已清晰的呈如今大伙眼前了,千萬(wàn)不要小看它,不管多么復雜的框架都是在這種基本要素上擴充下來(lái)的。
下一步
基礎知識的學(xué)習暫時(shí)告一段落,希望還能幫助你們打下一定的基礎。下期開(kāi)始為你們介紹強悍成熟的爬蟲(chóng)框架Scrapy,它提供了好多強悍的特點(diǎn)來(lái)促使爬取更為簡(jiǎn)單高效,更多精彩,敬請期盼!
【編輯推薦】
如何用Python來(lái)找你喜歡的女生?初識Python:全局、局部和非局部變量(帶示例)教你用Python解決非平衡數據問(wèn)題(附代碼)調查顯示:你是否是一個(gè)合格的Python開(kāi)發(fā)者?手把手教你寫(xiě)網(wǎng)絡(luò )爬蟲(chóng)(1):網(wǎng)易云音樂(lè )歌單 查看全部

介紹
大家好!回顧上一期,我們在介紹了爬蟲(chóng)的基本概念以后,就借助各類(lèi)工具橫沖直撞的完成了一個(gè)小爬蟲(chóng),目的就是猛、糙、快,方便初學(xué)者上手,建立信心。對于有一定基礎的讀者,請不要著(zhù)急,以后我們會(huì )學(xué)習主流的開(kāi)源框架,打造出一個(gè)強悍專(zhuān)業(yè)的爬蟲(chóng)系統!不過(guò)在此之前,要繼續打好基礎,本期我們先介紹爬蟲(chóng)的種類(lèi),然后選定最典型的通用網(wǎng)路爬蟲(chóng),為其設計一個(gè)迷你框架。有了自己對框架的思索后爬蟲(chóng)結構,再學(xué)習復雜的開(kāi)源框架就有頭緒了。
今天我們會(huì )把更多的時(shí)間用在思索上,而不是一根筋的coding。用80%的時(shí)間思索,20%的時(shí)間敲按鍵,這樣更有利于進(jìn)步。

語(yǔ)言&環(huán)境
語(yǔ)言:帶足彈藥,繼續用Python開(kāi)路!






一個(gè)迷你框架
下面以比較典型的通用爬蟲(chóng)為例爬蟲(chóng)結構,分析其工程要點(diǎn),設計并實(shí)現一個(gè)迷你框架。架構圖如下:

代碼結構:

config_load.py 配置文件加載
crawl_thread.py 爬取線(xiàn)程
mini_spider.py 主線(xiàn)程
spider.conf 配置文件
url_table.py url隊列、url表
urls.txt 種子url集合
webpage_parse.py 網(wǎng)頁(yè)剖析
webpage_save.py 網(wǎng)頁(yè)儲存
看看配置文件里有哪些內容:
spider.conf





url_table.py

Step 3. 記錄什么網(wǎng)頁(yè)早已下載過(guò)的小筆記本——URL表。
在互聯(lián)網(wǎng)上,一個(gè)網(wǎng)頁(yè)可能被多個(gè)網(wǎng)頁(yè)中的超鏈接所指向。這樣在遍歷互聯(lián)網(wǎng)這張圖的時(shí)侯,這個(gè)網(wǎng)頁(yè)可能被多次訪(fǎng)問(wèn)到。為了避免一個(gè)網(wǎng)頁(yè)被下載和解析多次,需要一個(gè)URL表記錄什么網(wǎng)頁(yè)早已下載過(guò)。再碰到這個(gè)網(wǎng)頁(yè)的時(shí)侯,我們就可以跳過(guò)它。
crawl_thread.py




Step 5. 頁(yè)面剖析模塊
從網(wǎng)頁(yè)中解析出URLs或則其他有用的數據。這個(gè)是下期重點(diǎn)介紹的,可以參考之前的代碼。
Step 6. 頁(yè)面儲存模塊
保存頁(yè)面的模塊,目前將文件保存為文件,以后可以擴充出多種儲存方法,如mysql,mongodb,hbase等等。
webpage_save.py

寫(xiě)到這兒,整個(gè)框架早已清晰的呈如今大伙眼前了,千萬(wàn)不要小看它,不管多么復雜的框架都是在這種基本要素上擴充下來(lái)的。
下一步
基礎知識的學(xué)習暫時(shí)告一段落,希望還能幫助你們打下一定的基礎。下期開(kāi)始為你們介紹強悍成熟的爬蟲(chóng)框架Scrapy,它提供了好多強悍的特點(diǎn)來(lái)促使爬取更為簡(jiǎn)單高效,更多精彩,敬請期盼!
【編輯推薦】
如何用Python來(lái)找你喜歡的女生?初識Python:全局、局部和非局部變量(帶示例)教你用Python解決非平衡數據問(wèn)題(附代碼)調查顯示:你是否是一個(gè)合格的Python開(kāi)發(fā)者?手把手教你寫(xiě)網(wǎng)絡(luò )爬蟲(chóng)(1):網(wǎng)易云音樂(lè )歌單
一份Python爬蟲(chóng)電子書(shū)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 300 次瀏覽 ? 2020-06-19 08:01
Python爬蟲(chóng)現如今早已越來(lái)越吃香了,隨意打開(kāi)一個(gè)急聘網(wǎng)站從工資水平來(lái)看,入門(mén)的爬蟲(chóng)工程師都能領(lǐng)到15k以上,爬蟲(chóng)構架相關(guān)的都能領(lǐng)到30k以上,我們還有什么理由去拒絕爬蟲(chóng)呢?當然,除非你跟錢(qián)過(guò)意不去。
所以秉承使更多想改行學(xué)習Python爬蟲(chóng)的的朋友快速學(xué)習、讓更多的小伙伴領(lǐng)到高薪我整理了一份十分健全的Python爬蟲(chóng)的電子書(shū)。
之前在知乎寫(xiě)分享早已有一年多,一直有同學(xué)說(shuō)我的回答和文章能整理成書(shū)籍了仍然偷懶沒(méi)做,也有出版社的小伙伴找我把這種內容弄成書(shū)都被我拒絕了。所以也是借著(zhù)這個(gè)機會(huì )仔細整理了知乎上的回答和文章另外也添加了一些新的內容,完成了幾本小小的電子書(shū),這一本比較小一部分是有關(guān)于Python方面的,主要內容還是Python爬蟲(chóng)。
這本書(shū)主要內容是Python入門(mén)爬蟲(chóng)飼養書(shū),以及Python爬蟲(chóng)入門(mén)和Python爬蟲(chóng)進(jìn)階,以下這是這本電子書(shū)的一個(gè)主要的目錄:
這本書(shū)不僅一些自己的學(xué)習、面試感受之外,還有好多包括書(shū)籍方面的資源、教程方面的學(xué)習資源,為了克服選擇困難癥,我在選擇教程或則書(shū)籍的時(shí)侯盡量保證了資源少而且精準,能用最少最精華的教程使你們快速入門(mén)Python以及比較熟悉的使用Python爬蟲(chóng)。
如果你能用心用2-3個(gè)月的時(shí)間認真通讀這本電子書(shū)爬蟲(chóng)飼養書(shū),并且學(xué)習這本書(shū)上推薦的一些教程和書(shū)籍,相信你一定能找到一份不錯的Python爬蟲(chóng)工作。 查看全部

Python爬蟲(chóng)現如今早已越來(lái)越吃香了,隨意打開(kāi)一個(gè)急聘網(wǎng)站從工資水平來(lái)看,入門(mén)的爬蟲(chóng)工程師都能領(lǐng)到15k以上,爬蟲(chóng)構架相關(guān)的都能領(lǐng)到30k以上,我們還有什么理由去拒絕爬蟲(chóng)呢?當然,除非你跟錢(qián)過(guò)意不去。

所以秉承使更多想改行學(xué)習Python爬蟲(chóng)的的朋友快速學(xué)習、讓更多的小伙伴領(lǐng)到高薪我整理了一份十分健全的Python爬蟲(chóng)的電子書(shū)。
之前在知乎寫(xiě)分享早已有一年多,一直有同學(xué)說(shuō)我的回答和文章能整理成書(shū)籍了仍然偷懶沒(méi)做,也有出版社的小伙伴找我把這種內容弄成書(shū)都被我拒絕了。所以也是借著(zhù)這個(gè)機會(huì )仔細整理了知乎上的回答和文章另外也添加了一些新的內容,完成了幾本小小的電子書(shū),這一本比較小一部分是有關(guān)于Python方面的,主要內容還是Python爬蟲(chóng)。
這本書(shū)主要內容是Python入門(mén)爬蟲(chóng)飼養書(shū),以及Python爬蟲(chóng)入門(mén)和Python爬蟲(chóng)進(jìn)階,以下這是這本電子書(shū)的一個(gè)主要的目錄:

這本書(shū)不僅一些自己的學(xué)習、面試感受之外,還有好多包括書(shū)籍方面的資源、教程方面的學(xué)習資源,為了克服選擇困難癥,我在選擇教程或則書(shū)籍的時(shí)侯盡量保證了資源少而且精準,能用最少最精華的教程使你們快速入門(mén)Python以及比較熟悉的使用Python爬蟲(chóng)。
如果你能用心用2-3個(gè)月的時(shí)間認真通讀這本電子書(shū)爬蟲(chóng)飼養書(shū),并且學(xué)習這本書(shū)上推薦的一些教程和書(shū)籍,相信你一定能找到一份不錯的Python爬蟲(chóng)工作。
Python網(wǎng)絡(luò )爬蟲(chóng)實(shí)戰項目代碼大全(長(cháng)期更新,歡迎補充)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 840 次瀏覽 ? 2020-06-14 08:02
WechatSogou[1]- 微信公眾號爬蟲(chóng)?;谒压肺⑿潘阉鞯奈⑿殴娞柵老x(chóng)插口,可以擴充成基于搜狗搜索的爬蟲(chóng),返回結果是列表,每一項均是公眾號具體信息字典。[1]:
DouBanSpider[2]- 豆瓣讀書(shū)爬蟲(chóng)??梢耘老露拱曜x書(shū)標簽下的所有圖書(shū),按評分排行依次儲存,存儲到Excel中,可便捷你們篩選搜羅,比如篩選評價(jià)人數>1000的高分書(shū)籍;可根據不同的主題儲存到Excel不同的Sheet ,采用User Agent偽裝為瀏覽器進(jìn)行爬取,并加入隨機延時(shí)來(lái)更好的模仿瀏覽器行為,避免爬蟲(chóng)被封。[2]:
zhihu_spider[3]- 知乎爬蟲(chóng)。此項目的功能是爬取知乎用戶(hù)信息以及人際拓撲關(guān)系,爬蟲(chóng)框架使用scrapy,數據儲存使用mongodb。[3]:
bilibili-user[4]- Bilibili用戶(hù)爬蟲(chóng)??倲祿担?0119918,抓取數組:用戶(hù)id,昵稱(chēng),性別,頭像,等級,經(jīng)驗值,粉絲數,生日,地址,注冊時(shí)間,簽名,等級與經(jīng)驗值等。抓取然后生成B站用戶(hù)數據報告。[4]:
SinaSpider[5]- 新浪微博爬蟲(chóng)。主要爬取新浪微博用戶(hù)的個(gè)人信息、微博信息、粉絲和關(guān)注。代碼獲取新浪微博Cookie進(jìn)行登陸,可通過(guò)多帳號登入來(lái)避免新浪的反扒。主要使用 scrapy 爬蟲(chóng)框架。[5]:
distribute_crawler[6]- 小說(shuō)下載分布式爬蟲(chóng)。使用scrapy,redis, mongodb,graphite實(shí)現的一個(gè)分布式網(wǎng)路爬蟲(chóng),底層儲存mongodb集群,分布式使用redis實(shí)現,爬蟲(chóng)狀態(tài)顯示使用graphite實(shí)現網(wǎng)絡(luò )爬蟲(chóng) 代碼,主要針對一個(gè)小說(shuō)站點(diǎn)。[6]:
CnkiSpider[7]- 中國知網(wǎng)爬蟲(chóng)。設置檢索條件后,執行src/CnkiSpider.py抓取數據,抓取數據儲存在/data目錄下,每個(gè)數據文件的第一行為數組名稱(chēng)。[7]:
LianJiaSpider[8]- 鏈家網(wǎng)爬蟲(chóng)。爬取北京地區鏈家歷年二手房成交記錄。涵蓋鏈家爬蟲(chóng)一文的全部代碼,包括鏈家模擬登陸代碼。[8]:
scrapy_jingdong[9]- 京東爬蟲(chóng)?;趕crapy的易迅網(wǎng)站爬蟲(chóng),保存格式為csv。[9]:
QQ-Groups-Spider[10]- QQ 群爬蟲(chóng)。批量抓取 QQ 群信息,包括群名稱(chēng)、群號、群人數、群主、群簡(jiǎn)介等內容,最終生成 XLS(X) / CSV 結果文件。[10]:
wooyun_public[11]-烏云爬蟲(chóng)。 烏云公開(kāi)漏洞、知識庫爬蟲(chóng)和搜索。全部公開(kāi)漏洞的列表和每位漏洞的文本內容存在mongodb中,大概約2G內容;如果整站爬全部文本和圖片作為離線(xiàn)查詢(xún),大概須要10G空間、2小時(shí)(10M聯(lián)通帶寬);爬取全部知識庫網(wǎng)絡(luò )爬蟲(chóng) 代碼,總共約500M空間。漏洞搜索使用了Flask作為web server,bootstrap作為后端。[11]:
2016.9.11補充:
QunarSpider[12]- 去哪兒網(wǎng)爬蟲(chóng)。 網(wǎng)絡(luò )爬蟲(chóng)之Selenium使用代理登錄:爬取去哪兒網(wǎng)站,使用selenium模擬瀏覽器登錄,獲取翻頁(yè)操作。代理可以存入一個(gè)文件,程序讀取并使用。支持多進(jìn)程抓取。[12]:
findtrip[13]- 機票爬蟲(chóng)(去哪兒和攜程網(wǎng))。Findtrip是一個(gè)基于Scrapy的機票爬蟲(chóng),目前整合了國外兩大機票網(wǎng)站(去哪兒 + 攜程)。[13]:
163spider[14] - 基于requests、MySQLdb、torndb的網(wǎng)易客戶(hù)端內容爬蟲(chóng)。[14]:
doubanspiders[15]- 豆瓣影片、書(shū)籍、小組、相冊、東西等爬蟲(chóng)集。[15]:
QQSpider[16]- QQ空間爬蟲(chóng),包括日志、說(shuō)說(shuō)、個(gè)人信息等,一天可抓取 400 萬(wàn)條數據。[16]:
baidu-music-spider[17]- 百度mp3全站爬蟲(chóng),使用redis支持斷點(diǎn)續傳。[17]:
tbcrawler[18]- 淘寶和淘寶的爬蟲(chóng),可以按照搜索關(guān)鍵詞,物品id來(lái)抓去頁(yè)面的信息,數據儲存在mongodb。[18]:
stockholm[19]- 一個(gè)股票數據(滬深)爬蟲(chóng)和選股策略測試框架。根據選取的日期范圍抓取所有滬深兩縣股票的行情數據。支持使用表達式定義選股策略。支持多線(xiàn)程處理。保存數據到JSON文件、CSV文件。[19]
--------------------------
本項目收錄各類(lèi)Python網(wǎng)路爬蟲(chóng)實(shí)戰開(kāi)源代碼,并常年更新,歡迎補充。
更多Python干貨歡迎掃碼關(guān)注:
微信公眾號:Python英文社區
知乎專(zhuān)欄:Python英文社區 <;
Python QQ交流群 :273186166
--------------------------
微信公眾號:Python英文社區
Python英文社區 QQ交流群:
--------------------------
Python開(kāi)發(fā)基礎教學(xué)視頻百度網(wǎng)盤(pán)下載地址: 查看全部

WechatSogou[1]- 微信公眾號爬蟲(chóng)?;谒压肺⑿潘阉鞯奈⑿殴娞柵老x(chóng)插口,可以擴充成基于搜狗搜索的爬蟲(chóng),返回結果是列表,每一項均是公眾號具體信息字典。[1]:
DouBanSpider[2]- 豆瓣讀書(shū)爬蟲(chóng)??梢耘老露拱曜x書(shū)標簽下的所有圖書(shū),按評分排行依次儲存,存儲到Excel中,可便捷你們篩選搜羅,比如篩選評價(jià)人數>1000的高分書(shū)籍;可根據不同的主題儲存到Excel不同的Sheet ,采用User Agent偽裝為瀏覽器進(jìn)行爬取,并加入隨機延時(shí)來(lái)更好的模仿瀏覽器行為,避免爬蟲(chóng)被封。[2]:
zhihu_spider[3]- 知乎爬蟲(chóng)。此項目的功能是爬取知乎用戶(hù)信息以及人際拓撲關(guān)系,爬蟲(chóng)框架使用scrapy,數據儲存使用mongodb。[3]:
bilibili-user[4]- Bilibili用戶(hù)爬蟲(chóng)??倲祿担?0119918,抓取數組:用戶(hù)id,昵稱(chēng),性別,頭像,等級,經(jīng)驗值,粉絲數,生日,地址,注冊時(shí)間,簽名,等級與經(jīng)驗值等。抓取然后生成B站用戶(hù)數據報告。[4]:
SinaSpider[5]- 新浪微博爬蟲(chóng)。主要爬取新浪微博用戶(hù)的個(gè)人信息、微博信息、粉絲和關(guān)注。代碼獲取新浪微博Cookie進(jìn)行登陸,可通過(guò)多帳號登入來(lái)避免新浪的反扒。主要使用 scrapy 爬蟲(chóng)框架。[5]:
distribute_crawler[6]- 小說(shuō)下載分布式爬蟲(chóng)。使用scrapy,redis, mongodb,graphite實(shí)現的一個(gè)分布式網(wǎng)路爬蟲(chóng),底層儲存mongodb集群,分布式使用redis實(shí)現,爬蟲(chóng)狀態(tài)顯示使用graphite實(shí)現網(wǎng)絡(luò )爬蟲(chóng) 代碼,主要針對一個(gè)小說(shuō)站點(diǎn)。[6]:
CnkiSpider[7]- 中國知網(wǎng)爬蟲(chóng)。設置檢索條件后,執行src/CnkiSpider.py抓取數據,抓取數據儲存在/data目錄下,每個(gè)數據文件的第一行為數組名稱(chēng)。[7]:
LianJiaSpider[8]- 鏈家網(wǎng)爬蟲(chóng)。爬取北京地區鏈家歷年二手房成交記錄。涵蓋鏈家爬蟲(chóng)一文的全部代碼,包括鏈家模擬登陸代碼。[8]:
scrapy_jingdong[9]- 京東爬蟲(chóng)?;趕crapy的易迅網(wǎng)站爬蟲(chóng),保存格式為csv。[9]:
QQ-Groups-Spider[10]- QQ 群爬蟲(chóng)。批量抓取 QQ 群信息,包括群名稱(chēng)、群號、群人數、群主、群簡(jiǎn)介等內容,最終生成 XLS(X) / CSV 結果文件。[10]:
wooyun_public[11]-烏云爬蟲(chóng)。 烏云公開(kāi)漏洞、知識庫爬蟲(chóng)和搜索。全部公開(kāi)漏洞的列表和每位漏洞的文本內容存在mongodb中,大概約2G內容;如果整站爬全部文本和圖片作為離線(xiàn)查詢(xún),大概須要10G空間、2小時(shí)(10M聯(lián)通帶寬);爬取全部知識庫網(wǎng)絡(luò )爬蟲(chóng) 代碼,總共約500M空間。漏洞搜索使用了Flask作為web server,bootstrap作為后端。[11]:
2016.9.11補充:
QunarSpider[12]- 去哪兒網(wǎng)爬蟲(chóng)。 網(wǎng)絡(luò )爬蟲(chóng)之Selenium使用代理登錄:爬取去哪兒網(wǎng)站,使用selenium模擬瀏覽器登錄,獲取翻頁(yè)操作。代理可以存入一個(gè)文件,程序讀取并使用。支持多進(jìn)程抓取。[12]:
findtrip[13]- 機票爬蟲(chóng)(去哪兒和攜程網(wǎng))。Findtrip是一個(gè)基于Scrapy的機票爬蟲(chóng),目前整合了國外兩大機票網(wǎng)站(去哪兒 + 攜程)。[13]:
163spider[14] - 基于requests、MySQLdb、torndb的網(wǎng)易客戶(hù)端內容爬蟲(chóng)。[14]:
doubanspiders[15]- 豆瓣影片、書(shū)籍、小組、相冊、東西等爬蟲(chóng)集。[15]:
QQSpider[16]- QQ空間爬蟲(chóng),包括日志、說(shuō)說(shuō)、個(gè)人信息等,一天可抓取 400 萬(wàn)條數據。[16]:
baidu-music-spider[17]- 百度mp3全站爬蟲(chóng),使用redis支持斷點(diǎn)續傳。[17]:
tbcrawler[18]- 淘寶和淘寶的爬蟲(chóng),可以按照搜索關(guān)鍵詞,物品id來(lái)抓去頁(yè)面的信息,數據儲存在mongodb。[18]:
stockholm[19]- 一個(gè)股票數據(滬深)爬蟲(chóng)和選股策略測試框架。根據選取的日期范圍抓取所有滬深兩縣股票的行情數據。支持使用表達式定義選股策略。支持多線(xiàn)程處理。保存數據到JSON文件、CSV文件。[19]
--------------------------
本項目收錄各類(lèi)Python網(wǎng)路爬蟲(chóng)實(shí)戰開(kāi)源代碼,并常年更新,歡迎補充。
更多Python干貨歡迎掃碼關(guān)注:
微信公眾號:Python英文社區
知乎專(zhuān)欄:Python英文社區 <;
Python QQ交流群 :273186166
--------------------------
微信公眾號:Python英文社區
Python英文社區 QQ交流群:
--------------------------
Python開(kāi)發(fā)基礎教學(xué)視頻百度網(wǎng)盤(pán)下載地址:
python爬蟲(chóng)入門(mén)教程(一)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 260 次瀏覽 ? 2020-06-12 08:01
1、Python能做哪些
2、網(wǎng)絡(luò )爬蟲(chóng)簡(jiǎn)介
3、網(wǎng)絡(luò )爬蟲(chóng)能做哪些
4、開(kāi)發(fā)爬蟲(chóng)的打算工作
5、推薦的python爬蟲(chóng)學(xué)習書(shū)籍
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Python能做哪些
網(wǎng)絡(luò )爬蟲(chóng)簡(jiǎn)介
網(wǎng)絡(luò )爬蟲(chóng),也叫網(wǎng)路蜘蛛(Web Spider)。爬蟲(chóng)是依照網(wǎng)頁(yè)地址(URL)爬取網(wǎng)頁(yè)上的內容,這里說(shuō)的網(wǎng)頁(yè)地址(URL)就是我們在瀏覽器中輸入的網(wǎng)站鏈接。例如:/,這就是一個(gè)URL。
爬蟲(chóng)是在某個(gè)URL頁(yè)面入手,抓取到這個(gè)頁(yè)面的內容網(wǎng)絡(luò )爬蟲(chóng) 教程,從當前的頁(yè)面中找到其他的鏈接地址,然后從這地址再度爬到下一個(gè)網(wǎng)站頁(yè)面,這樣仍然不停的抓取到有用的信息,所以可以說(shuō)網(wǎng)絡(luò )爬蟲(chóng)是不停的抓取獲得頁(yè)面上想要的信息的程序。
網(wǎng)絡(luò )爬蟲(chóng)能做哪些
例如:我關(guān)注的找工作的網(wǎng)站會(huì )不定期的發(fā)布急聘信息,我不信每晚都耗費自己的精力去點(diǎn)擊網(wǎng)站查看信息,但是我又想在有新的通知時(shí),能夠及時(shí)曉得信息并看見(jiàn)這個(gè)信息。
此時(shí),我就須要爬蟲(chóng)來(lái)幫助我,這個(gè)爬蟲(chóng)程序會(huì )手動(dòng)在一定的時(shí)間模擬人去訪(fǎng)問(wèn)官網(wǎng),檢查是否有新的通知發(fā)布,如果沒(méi)有就不進(jìn)行任何操作,如果有通知,那么就將通知從網(wǎng)頁(yè)中提取下來(lái),保存到指定的位置,然后發(fā)送郵件或則電郵告知我即可。
開(kāi)發(fā)爬蟲(chóng)的打算工作
編程語(yǔ)言:Python
IDE的話(huà),推薦使用Pycharm。windows、linux、macos多平臺支持網(wǎng)絡(luò )爬蟲(chóng) 教程,非常好用。
開(kāi)發(fā)環(huán)境:Win7+Python 2.7 64bit+PyCharm :環(huán)境配置方式自行百度
推薦的python爬蟲(chóng)學(xué)習書(shū)籍
1.米切爾 (Ryan Mitchell) (作者), 陶俊杰 (譯者), 陳小莉 (譯者)的Python網(wǎng)路數據采集
2.范傳輝 (作者)的Python爬蟲(chóng)開(kāi)發(fā)與項目實(shí)戰 查看全部
目錄:
1、Python能做哪些
2、網(wǎng)絡(luò )爬蟲(chóng)簡(jiǎn)介
3、網(wǎng)絡(luò )爬蟲(chóng)能做哪些
4、開(kāi)發(fā)爬蟲(chóng)的打算工作
5、推薦的python爬蟲(chóng)學(xué)習書(shū)籍
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Python能做哪些
網(wǎng)絡(luò )爬蟲(chóng)簡(jiǎn)介
網(wǎng)絡(luò )爬蟲(chóng),也叫網(wǎng)路蜘蛛(Web Spider)。爬蟲(chóng)是依照網(wǎng)頁(yè)地址(URL)爬取網(wǎng)頁(yè)上的內容,這里說(shuō)的網(wǎng)頁(yè)地址(URL)就是我們在瀏覽器中輸入的網(wǎng)站鏈接。例如:/,這就是一個(gè)URL。
爬蟲(chóng)是在某個(gè)URL頁(yè)面入手,抓取到這個(gè)頁(yè)面的內容網(wǎng)絡(luò )爬蟲(chóng) 教程,從當前的頁(yè)面中找到其他的鏈接地址,然后從這地址再度爬到下一個(gè)網(wǎng)站頁(yè)面,這樣仍然不停的抓取到有用的信息,所以可以說(shuō)網(wǎng)絡(luò )爬蟲(chóng)是不停的抓取獲得頁(yè)面上想要的信息的程序。
網(wǎng)絡(luò )爬蟲(chóng)能做哪些
例如:我關(guān)注的找工作的網(wǎng)站會(huì )不定期的發(fā)布急聘信息,我不信每晚都耗費自己的精力去點(diǎn)擊網(wǎng)站查看信息,但是我又想在有新的通知時(shí),能夠及時(shí)曉得信息并看見(jiàn)這個(gè)信息。
此時(shí),我就須要爬蟲(chóng)來(lái)幫助我,這個(gè)爬蟲(chóng)程序會(huì )手動(dòng)在一定的時(shí)間模擬人去訪(fǎng)問(wèn)官網(wǎng),檢查是否有新的通知發(fā)布,如果沒(méi)有就不進(jìn)行任何操作,如果有通知,那么就將通知從網(wǎng)頁(yè)中提取下來(lái),保存到指定的位置,然后發(fā)送郵件或則電郵告知我即可。
開(kāi)發(fā)爬蟲(chóng)的打算工作
編程語(yǔ)言:Python
IDE的話(huà),推薦使用Pycharm。windows、linux、macos多平臺支持網(wǎng)絡(luò )爬蟲(chóng) 教程,非常好用。
開(kāi)發(fā)環(huán)境:Win7+Python 2.7 64bit+PyCharm :環(huán)境配置方式自行百度
推薦的python爬蟲(chóng)學(xué)習書(shū)籍
1.米切爾 (Ryan Mitchell) (作者), 陶俊杰 (譯者), 陳小莉 (譯者)的Python網(wǎng)路數據采集
2.范傳輝 (作者)的Python爬蟲(chóng)開(kāi)發(fā)與項目實(shí)戰
python爬蟲(chóng)入門(mén)到精通必備的書(shū)籍
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 366 次瀏覽 ? 2020-06-09 10:25
3、《笨辦法學(xué) Python》這并不是關(guān)于親子關(guān)系的編程書(shū), 而是一本正兒八經(jīng) Python 編程入 門(mén)書(shū),只是以這些寓教于樂(lè )的方式闡釋編程,顯得更輕松愉快一些。4、《深入淺出 Python》Head First 系列的書(shū)籍仍然遭受稱(chēng)贊,這本也不例外。Head First Python 主要述說(shuō)了 Python 3 的基礎句型知識以及怎樣使用 Python八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 快速地進(jìn)行 Web、手機上的開(kāi)發(fā)。5、《像計算機科學(xué)家一樣思索 python》內容講解清楚明白python爬蟲(chóng)經(jīng)典書(shū)籍,非常適宜 python 入門(mén)用,但對于學(xué)習過(guò)其他編 程語(yǔ)言的讀者來(lái)說(shuō)可能會(huì )認為進(jìn)度比較慢, 但作者的思路和看法確實(shí) 給人好多啟發(fā),對于新手來(lái)說(shuō)利潤頗豐,書(shū)中好多反例還是有一定難 度的python爬蟲(chóng)經(jīng)典書(shū)籍,完全吃透也不容易。6、《Python 編程:入門(mén)到實(shí)踐》厚厚的一本書(shū),本書(shū)的內容基礎并且全面,適合純小白看。Python 學(xué)習進(jìn)階書(shū)籍1、《Python 學(xué)習指南》 本書(shū)解釋詳盡,例子豐富;關(guān)于 Python 語(yǔ)言本身的講解全面詳細而八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 又循序漸進(jìn)不斷重復,同時(shí)闡述語(yǔ)言現象背后的機制和原理;除語(yǔ)言 本身,還包含編程實(shí)踐和設計以及中級主題。
2、《Python 核心編程第 3 版》 本書(shū)的內容實(shí)際上就是大致介紹了一下部份 python 標準庫里的模塊 和一些第三方模塊,并且主要是網(wǎng)路方向。適合學(xué)習完 python 語(yǔ)法 知識后進(jìn)階閱讀,簡(jiǎn)單但又囊括了開(kāi)發(fā)所用到的一些基本的庫,引起 你繼續學(xué)習的興趣。3、《編寫(xiě)高質(zhì)量 Python 代碼的 59 個(gè)有效方式》關(guān)于庫,引用,生產(chǎn)環(huán)境這種知識倘若只是埋頭寫(xiě)代碼,很多時(shí)侯都 不會(huì )涉及到, 但是這本書(shū)里關(guān)于這種東西的條目比較簡(jiǎn)約的把前因后 果理清楚了,感覺(jué)太有幫助。4、《Python CookBook》這本書(shū)不太適宜從頭到尾閱讀,適合當一本參考書(shū)或是字典書(shū),遇到八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 了總是上來(lái)查查,看看有沒(méi)有取巧的辦法。書(shū)中把一些小技巧按章節 集合上去,可以節約不少 google 的時(shí)間。5、《流暢的 Python》 本書(shū)是極好的 Python 進(jìn)階書(shū)籍,詳細解釋了魔術(shù)技巧、生成器、協(xié) 程、元編程等概念,值得反復閱讀。以上是進(jìn)階書(shū)籍最終要的還是要多動(dòng)手,找項目實(shí)踐,從實(shí)際應用場(chǎng) 景出發(fā),用程序解決手頭的一些冗長(cháng)復雜問(wèn)題。二、HTTP 入門(mén)書(shū)籍 1、《圖解 HTTP》本書(shū)詳盡介紹了 HTTP 的常用的知識,大部分內容以圖文的形式展 示,易于讀者理解,避免了去啃厚厚的《HTTP 權威指南》和 RFC 文檔。
同時(shí)作者邏輯清晰,沒(méi)有介紹過(guò)分深奧的知識,滿(mǎn)足了讀者對 HTTP 基礎的需求。八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 三、數據庫入門(mén)書(shū)籍 1、《MySQL 必知必會(huì )》 對入門(mén)者太照料的一本書(shū),與其說(shuō)是一本書(shū)不如說(shuō)是一本小冊子,不 到 250 頁(yè)的小冊子,實(shí)踐性太強,基本沒(méi)有哪些理論的拼湊,完完 全全就是一本實(shí)踐手冊, 教會(huì )你如何用 SQL 語(yǔ)句操作 MySQL??赐?這本書(shū)基本就可以說(shuō)是入門(mén)了。 四、正則表達式入門(mén)書(shū)籍 1、《精通正則表達式》 本書(shū)面向的讀者是:1) 會(huì )用正則表達式;2) 愿意從一個(gè)代碼工人向 專(zhuān)家進(jìn)化的;3) 對技術(shù)有狂熱的追求的;本書(shū)注重講解關(guān)于正則表 達式匹配原理、優(yōu)化方式和使用方法,讀完以后你會(huì )感覺(jué)豁然開(kāi)朗, 沒(méi)想到正則表達式還有這樣一片天空。 五、爬蟲(chóng)相關(guān)書(shū)籍 1、《用 Python 寫(xiě)網(wǎng)絡(luò )爬蟲(chóng)》 本書(shū)適宜早已熟悉 python 且熟悉大多數模塊的人。 作者對爬蟲(chóng)的編 寫(xiě)考慮較為全面,且有相關(guān)練習網(wǎng)頁(yè)可以實(shí)操。八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 2、《Python 爬蟲(chóng)開(kāi)發(fā)與項目實(shí)戰》這本書(shū)從爬蟲(chóng)會(huì )涉及的多線(xiàn)程,多進(jìn)程講起,然后介紹 web 前端的 基礎知識,然后是數據儲存,網(wǎng)絡(luò )合同,再就是綜合的爬蟲(chóng)項目。
這本書(shū)不適宜沒(méi)有任何 Python 基礎的人閱讀, 因為這本書(shū)根本沒(méi)有 提到任何 Python 的基礎知識。但是對于想要進(jìn)階 Python 爬蟲(chóng)的人 來(lái)說(shuō)是非常好的。相關(guān)閱讀:百度地圖數據采集: 58 同城信息采集: 黃頁(yè) 88 企業(yè)名錄數據采集: 天貓買(mǎi)家秀圖片采集詳細教程:八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 八爪魚(yú)采集原理(7.0 版本): 微信公眾號文章正文采集: 八爪魚(yú)——90 萬(wàn)用戶(hù)選擇的網(wǎng)頁(yè)數據采集器。 1、操作簡(jiǎn)單,任何人都可以用:無(wú)需技術(shù)背景,會(huì )上網(wǎng)才能采集。完全可視化 流程,點(diǎn)擊滑鼠完成操作,2 分鐘即可快速入門(mén)。 2、功能強悍,任何網(wǎng)站都可以采:對于點(diǎn)擊、登陸、翻頁(yè)、識別驗證碼、瀑布 流、Ajax 腳本異步加載數據的網(wǎng)頁(yè),均可經(jīng)過(guò)簡(jiǎn)單設置進(jìn)行采集。 3、云采集,關(guān)機也可以。配置好采集任務(wù)后可死機,任務(wù)可在云端執行。龐大 云采集集群 24*7 不間斷運行,不用害怕 IP 被封,網(wǎng)絡(luò )中斷。 4、功能免費+增值服務(wù),可按需選擇。免費版具備所有功能,能夠滿(mǎn)足用戶(hù)的 基本采集需求。同時(shí)設置了一些增值服務(wù)(如私有云),滿(mǎn)足低端付費企業(yè)用戶(hù) 的須要。 查看全部
八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 python 爬蟲(chóng)入門(mén)到精通必備的書(shū)籍python 是一種常見(jiàn)的網(wǎng)路爬蟲(chóng)語(yǔ)言,學(xué)習 python 爬蟲(chóng),需要理論 與實(shí)踐相結合,Python 生態(tài)中的爬蟲(chóng)庫多如牛毛,urllib、urllib2、 requests、beautifulsoup、scrapy、pyspider 都是爬蟲(chóng)相關(guān)的庫, 但是假如沒(méi)有理論知識, 純粹地學(xué)習怎么使用這種 API 如何調用是不 會(huì )有提高的。所以,在學(xué)習這種庫的同時(shí),需要去系統的學(xué)習爬蟲(chóng)的 相關(guān)原理。你須要懂的技術(shù)包括 Python 編程語(yǔ)言、HTTP 協(xié)議、數 據庫、 Linux 等知識。 這樣能夠做到真正從入門(mén) python 爬蟲(chóng)到精通, 下面推薦幾本精典的書(shū)籍。1、Python 語(yǔ)言入門(mén)的書(shū)籍:適合沒(méi)有編程基礎的,入門(mén) Python 的書(shū)籍1、《簡(jiǎn)明 Python 教程》本書(shū)采用知識共享合同免費分發(fā),意味著(zhù)任何人都可以免費獲取,這八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 本書(shū)走過(guò)了 11 個(gè)年頭,最新版以 Python3 為基礎同時(shí)也會(huì )兼具到 Python2 的一些東西,內容十分精簡(jiǎn)。2、《父與子的編程之旅》一本正兒八經(jīng) Python 編程入門(mén)書(shū),以寓教于樂(lè )的方式闡釋編程,顯 得更輕松愉快一些。
3、《笨辦法學(xué) Python》這并不是關(guān)于親子關(guān)系的編程書(shū), 而是一本正兒八經(jīng) Python 編程入 門(mén)書(shū),只是以這些寓教于樂(lè )的方式闡釋編程,顯得更輕松愉快一些。4、《深入淺出 Python》Head First 系列的書(shū)籍仍然遭受稱(chēng)贊,這本也不例外。Head First Python 主要述說(shuō)了 Python 3 的基礎句型知識以及怎樣使用 Python八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 快速地進(jìn)行 Web、手機上的開(kāi)發(fā)。5、《像計算機科學(xué)家一樣思索 python》內容講解清楚明白python爬蟲(chóng)經(jīng)典書(shū)籍,非常適宜 python 入門(mén)用,但對于學(xué)習過(guò)其他編 程語(yǔ)言的讀者來(lái)說(shuō)可能會(huì )認為進(jìn)度比較慢, 但作者的思路和看法確實(shí) 給人好多啟發(fā),對于新手來(lái)說(shuō)利潤頗豐,書(shū)中好多反例還是有一定難 度的python爬蟲(chóng)經(jīng)典書(shū)籍,完全吃透也不容易。6、《Python 編程:入門(mén)到實(shí)踐》厚厚的一本書(shū),本書(shū)的內容基礎并且全面,適合純小白看。Python 學(xué)習進(jìn)階書(shū)籍1、《Python 學(xué)習指南》 本書(shū)解釋詳盡,例子豐富;關(guān)于 Python 語(yǔ)言本身的講解全面詳細而八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 又循序漸進(jìn)不斷重復,同時(shí)闡述語(yǔ)言現象背后的機制和原理;除語(yǔ)言 本身,還包含編程實(shí)踐和設計以及中級主題。
2、《Python 核心編程第 3 版》 本書(shū)的內容實(shí)際上就是大致介紹了一下部份 python 標準庫里的模塊 和一些第三方模塊,并且主要是網(wǎng)路方向。適合學(xué)習完 python 語(yǔ)法 知識后進(jìn)階閱讀,簡(jiǎn)單但又囊括了開(kāi)發(fā)所用到的一些基本的庫,引起 你繼續學(xué)習的興趣。3、《編寫(xiě)高質(zhì)量 Python 代碼的 59 個(gè)有效方式》關(guān)于庫,引用,生產(chǎn)環(huán)境這種知識倘若只是埋頭寫(xiě)代碼,很多時(shí)侯都 不會(huì )涉及到, 但是這本書(shū)里關(guān)于這種東西的條目比較簡(jiǎn)約的把前因后 果理清楚了,感覺(jué)太有幫助。4、《Python CookBook》這本書(shū)不太適宜從頭到尾閱讀,適合當一本參考書(shū)或是字典書(shū),遇到八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 了總是上來(lái)查查,看看有沒(méi)有取巧的辦法。書(shū)中把一些小技巧按章節 集合上去,可以節約不少 google 的時(shí)間。5、《流暢的 Python》 本書(shū)是極好的 Python 進(jìn)階書(shū)籍,詳細解釋了魔術(shù)技巧、生成器、協(xié) 程、元編程等概念,值得反復閱讀。以上是進(jìn)階書(shū)籍最終要的還是要多動(dòng)手,找項目實(shí)踐,從實(shí)際應用場(chǎng) 景出發(fā),用程序解決手頭的一些冗長(cháng)復雜問(wèn)題。二、HTTP 入門(mén)書(shū)籍 1、《圖解 HTTP》本書(shū)詳盡介紹了 HTTP 的常用的知識,大部分內容以圖文的形式展 示,易于讀者理解,避免了去啃厚厚的《HTTP 權威指南》和 RFC 文檔。
同時(shí)作者邏輯清晰,沒(méi)有介紹過(guò)分深奧的知識,滿(mǎn)足了讀者對 HTTP 基礎的需求。八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 三、數據庫入門(mén)書(shū)籍 1、《MySQL 必知必會(huì )》 對入門(mén)者太照料的一本書(shū),與其說(shuō)是一本書(shū)不如說(shuō)是一本小冊子,不 到 250 頁(yè)的小冊子,實(shí)踐性太強,基本沒(méi)有哪些理論的拼湊,完完 全全就是一本實(shí)踐手冊, 教會(huì )你如何用 SQL 語(yǔ)句操作 MySQL??赐?這本書(shū)基本就可以說(shuō)是入門(mén)了。 四、正則表達式入門(mén)書(shū)籍 1、《精通正則表達式》 本書(shū)面向的讀者是:1) 會(huì )用正則表達式;2) 愿意從一個(gè)代碼工人向 專(zhuān)家進(jìn)化的;3) 對技術(shù)有狂熱的追求的;本書(shū)注重講解關(guān)于正則表 達式匹配原理、優(yōu)化方式和使用方法,讀完以后你會(huì )感覺(jué)豁然開(kāi)朗, 沒(méi)想到正則表達式還有這樣一片天空。 五、爬蟲(chóng)相關(guān)書(shū)籍 1、《用 Python 寫(xiě)網(wǎng)絡(luò )爬蟲(chóng)》 本書(shū)適宜早已熟悉 python 且熟悉大多數模塊的人。 作者對爬蟲(chóng)的編 寫(xiě)考慮較為全面,且有相關(guān)練習網(wǎng)頁(yè)可以實(shí)操。八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 2、《Python 爬蟲(chóng)開(kāi)發(fā)與項目實(shí)戰》這本書(shū)從爬蟲(chóng)會(huì )涉及的多線(xiàn)程,多進(jìn)程講起,然后介紹 web 前端的 基礎知識,然后是數據儲存,網(wǎng)絡(luò )合同,再就是綜合的爬蟲(chóng)項目。
這本書(shū)不適宜沒(méi)有任何 Python 基礎的人閱讀, 因為這本書(shū)根本沒(méi)有 提到任何 Python 的基礎知識。但是對于想要進(jìn)階 Python 爬蟲(chóng)的人 來(lái)說(shuō)是非常好的。相關(guān)閱讀:百度地圖數據采集: 58 同城信息采集: 黃頁(yè) 88 企業(yè)名錄數據采集: 天貓買(mǎi)家秀圖片采集詳細教程:八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 八爪魚(yú)采集原理(7.0 版本): 微信公眾號文章正文采集: 八爪魚(yú)——90 萬(wàn)用戶(hù)選擇的網(wǎng)頁(yè)數據采集器。 1、操作簡(jiǎn)單,任何人都可以用:無(wú)需技術(shù)背景,會(huì )上網(wǎng)才能采集。完全可視化 流程,點(diǎn)擊滑鼠完成操作,2 分鐘即可快速入門(mén)。 2、功能強悍,任何網(wǎng)站都可以采:對于點(diǎn)擊、登陸、翻頁(yè)、識別驗證碼、瀑布 流、Ajax 腳本異步加載數據的網(wǎng)頁(yè),均可經(jīng)過(guò)簡(jiǎn)單設置進(jìn)行采集。 3、云采集,關(guān)機也可以。配置好采集任務(wù)后可死機,任務(wù)可在云端執行。龐大 云采集集群 24*7 不間斷運行,不用害怕 IP 被封,網(wǎng)絡(luò )中斷。 4、功能免費+增值服務(wù),可按需選擇。免費版具備所有功能,能夠滿(mǎn)足用戶(hù)的 基本采集需求。同時(shí)設置了一些增值服務(wù)(如私有云),滿(mǎn)足低端付費企業(yè)用戶(hù) 的須要。
Python爬蟲(chóng)實(shí)戰(1):爬取Drupal峰會(huì )貼子列表
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 370 次瀏覽 ? 2020-06-09 10:24
在《Python即時(shí)網(wǎng)路爬蟲(chóng)項目: 內容提取器的定義》一文我們定義了一個(gè)通用的python網(wǎng)路爬蟲(chóng)類(lèi),期望通過(guò)這個(gè)項目節約程序員一半以上的時(shí)間。本文將用一個(gè)實(shí)例講解如何使用這個(gè)爬蟲(chóng)類(lèi)。我們將爬集搜客老版峰會(huì ),是一個(gè)用Drupal做的峰會(huì )。
我們在多個(gè)文章都在說(shuō):節省程序員的時(shí)間。關(guān)鍵是市去編撰提取規則的時(shí)間,尤其是調試規則的正確性太花時(shí)間。在《1分鐘快速生成用于網(wǎng)頁(yè)內容提取的xslt》演示了如何快速生成提取規則網(wǎng)絡(luò )爬蟲(chóng)論壇,接下來(lái)我們再通過(guò)GooSeeker的api插口實(shí)時(shí)獲得提取規則,對網(wǎng)頁(yè)進(jìn)行抓取。本示例主要有如下兩個(gè)技術(shù)要點(diǎn):
通過(guò)GooSeeker API實(shí)時(shí)獲取用于頁(yè)面提取的xslt
使用GooSeeker提取器gsExtractor從網(wǎng)頁(yè)上一次提取多個(gè)數組內容。
# _*_coding:utf8_*_
# crawler_gooseeker_bbs.py
# 版本: V1.0
from urllib import request
from lxml import etree
from gooseeker import GsExtractor
# 訪(fǎng)問(wèn)并讀取網(wǎng)頁(yè)內容
url = ""
conn = request.urlopen(url)
doc = etree.HTML(conn.read())
bbsExtra = GsExtractor()
bbsExtra.setXsltFromAPI("31d24931e043e2d5364d03b8ff9cc77e" , "gooseeker_bbs_xslt") # 設置xslt抓取規則,第一個(gè)參數是app key,請到會(huì )員中心申請
result = bbsExtra.extract(doc) # 調用extract方法提取所需內容
print(str(result))
源代碼下載位置請看文章末尾的GitHub源。
運行上節的代碼,即可在控制臺復印出提取結果,是一個(gè)xml文件,如果加上換行縮進(jìn),內容如下圖:
/img/bVwAyA
1網(wǎng)絡(luò )爬蟲(chóng)論壇, Python即時(shí)網(wǎng)路爬蟲(chóng)項目: 內容提取器的定義
1, GooSeeker開(kāi)源Python網(wǎng)絡(luò )爬蟲(chóng)GitHub源 查看全部
/img/bVxTdG
在《Python即時(shí)網(wǎng)路爬蟲(chóng)項目: 內容提取器的定義》一文我們定義了一個(gè)通用的python網(wǎng)路爬蟲(chóng)類(lèi),期望通過(guò)這個(gè)項目節約程序員一半以上的時(shí)間。本文將用一個(gè)實(shí)例講解如何使用這個(gè)爬蟲(chóng)類(lèi)。我們將爬集搜客老版峰會(huì ),是一個(gè)用Drupal做的峰會(huì )。
我們在多個(gè)文章都在說(shuō):節省程序員的時(shí)間。關(guān)鍵是市去編撰提取規則的時(shí)間,尤其是調試規則的正確性太花時(shí)間。在《1分鐘快速生成用于網(wǎng)頁(yè)內容提取的xslt》演示了如何快速生成提取規則網(wǎng)絡(luò )爬蟲(chóng)論壇,接下來(lái)我們再通過(guò)GooSeeker的api插口實(shí)時(shí)獲得提取規則,對網(wǎng)頁(yè)進(jìn)行抓取。本示例主要有如下兩個(gè)技術(shù)要點(diǎn):
通過(guò)GooSeeker API實(shí)時(shí)獲取用于頁(yè)面提取的xslt
使用GooSeeker提取器gsExtractor從網(wǎng)頁(yè)上一次提取多個(gè)數組內容。
# _*_coding:utf8_*_
# crawler_gooseeker_bbs.py
# 版本: V1.0
from urllib import request
from lxml import etree
from gooseeker import GsExtractor
# 訪(fǎng)問(wèn)并讀取網(wǎng)頁(yè)內容
url = ""
conn = request.urlopen(url)
doc = etree.HTML(conn.read())
bbsExtra = GsExtractor()
bbsExtra.setXsltFromAPI("31d24931e043e2d5364d03b8ff9cc77e" , "gooseeker_bbs_xslt") # 設置xslt抓取規則,第一個(gè)參數是app key,請到會(huì )員中心申請
result = bbsExtra.extract(doc) # 調用extract方法提取所需內容
print(str(result))
源代碼下載位置請看文章末尾的GitHub源。
運行上節的代碼,即可在控制臺復印出提取結果,是一個(gè)xml文件,如果加上換行縮進(jìn),內容如下圖:
/img/bVwAyA
1網(wǎng)絡(luò )爬蟲(chóng)論壇, Python即時(shí)網(wǎng)路爬蟲(chóng)項目: 內容提取器的定義
1, GooSeeker開(kāi)源Python網(wǎng)絡(luò )爬蟲(chóng)GitHub源
讓你從零開(kāi)始學(xué)會(huì )寫(xiě)爬蟲(chóng)的5個(gè)教程(Python)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 279 次瀏覽 ? 2020-06-09 08:02
其實(shí)懂了以后,寫(xiě)個(gè)爬蟲(chóng)腳本是很簡(jiǎn)單的,但是對于菜鳥(niǎo)來(lái)說(shuō)卻并不是這么容易。實(shí)驗樓就給這些想學(xué)寫(xiě)爬蟲(chóng),卻苦于沒(méi)有詳盡教程的小伙伴推薦5個(gè)爬蟲(chóng)教程,都是基于Python語(yǔ)言開(kāi)發(fā)的,因此可能更適宜有一定Python基礎的人進(jìn)行學(xué)習。
首先介紹這個(gè)教程,比較簡(jiǎn)單,也容易上手,只要有Python基礎的人都可以跟隨教程去寫(xiě)天氣數據爬蟲(chóng)。先跟隨教程動(dòng)手敲一遍再說(shuō),畢竟先講一大堆理論知識,是太枯燥無(wú)味的。
學(xué)完第一個(gè)教程以后,就可以學(xué)習這個(gè)教程了,因為有第一個(gè)教程的基礎python爬蟲(chóng)教程,對爬蟲(chóng)有了一個(gè)大約的認知,但對其中的一些原理還不太清楚,那么學(xué)習這個(gè)教程就太必要啦,這個(gè)教程十分詳盡的介紹了爬蟲(chóng)的原理等一些基礎知識,最后教你用爬蟲(chóng)爬名模相片。
前面寫(xiě)了兩個(gè)爬蟲(chóng)腳本,理論和實(shí)踐都有了,這個(gè)時(shí)侯可以再找個(gè)項目練練手,熟悉一下,這個(gè)項目就是教你一步步實(shí)現一個(gè)天貓女郎圖片搜集爬蟲(chóng)。
當然爬蟲(chóng)也是有很多種的,這個(gè)教程就介紹幾種實(shí)現爬蟲(chóng)的方式,從傳統的線(xiàn)程池到使用解釋器,每節課實(shí)現一個(gè)小爬蟲(chóng)。另外學(xué)習解釋器的時(shí)侯,會(huì )從原理入手,以ayncio協(xié)程庫為原型,實(shí)現一個(gè)簡(jiǎn)單的異步編程模型。
課程注重爬蟲(chóng)原理的講解以及python爬蟲(chóng)代碼的實(shí)現。
當然,爬蟲(chóng)的應用地方好多,而不只是便捷自己,比如可以寫(xiě)一個(gè)聊天機器人,用爬蟲(chóng)爬網(wǎng)路上的笑話(huà),然后按照用戶(hù)的問(wèn)題回復相應的笑話(huà)內容,是一個(gè)很實(shí)用和常見(jiàn)的一個(gè)功能,學(xué)會(huì )將爬蟲(chóng)應用到實(shí)際的項目中是十分便捷的。 查看全部
寫(xiě)爬蟲(chóng)總是十分吸引IT學(xué)習者,畢竟光聽(tīng)上去就太拉風(fēng)極客,我也曉得很多人學(xué)完基礎知識以后python爬蟲(chóng)教程,第一個(gè)項目開(kāi)發(fā)就是自己寫(xiě)一個(gè)爬蟲(chóng)玩兒。
其實(shí)懂了以后,寫(xiě)個(gè)爬蟲(chóng)腳本是很簡(jiǎn)單的,但是對于菜鳥(niǎo)來(lái)說(shuō)卻并不是這么容易。實(shí)驗樓就給這些想學(xué)寫(xiě)爬蟲(chóng),卻苦于沒(méi)有詳盡教程的小伙伴推薦5個(gè)爬蟲(chóng)教程,都是基于Python語(yǔ)言開(kāi)發(fā)的,因此可能更適宜有一定Python基礎的人進(jìn)行學(xué)習。
首先介紹這個(gè)教程,比較簡(jiǎn)單,也容易上手,只要有Python基礎的人都可以跟隨教程去寫(xiě)天氣數據爬蟲(chóng)。先跟隨教程動(dòng)手敲一遍再說(shuō),畢竟先講一大堆理論知識,是太枯燥無(wú)味的。
學(xué)完第一個(gè)教程以后,就可以學(xué)習這個(gè)教程了,因為有第一個(gè)教程的基礎python爬蟲(chóng)教程,對爬蟲(chóng)有了一個(gè)大約的認知,但對其中的一些原理還不太清楚,那么學(xué)習這個(gè)教程就太必要啦,這個(gè)教程十分詳盡的介紹了爬蟲(chóng)的原理等一些基礎知識,最后教你用爬蟲(chóng)爬名模相片。
前面寫(xiě)了兩個(gè)爬蟲(chóng)腳本,理論和實(shí)踐都有了,這個(gè)時(shí)侯可以再找個(gè)項目練練手,熟悉一下,這個(gè)項目就是教你一步步實(shí)現一個(gè)天貓女郎圖片搜集爬蟲(chóng)。
當然爬蟲(chóng)也是有很多種的,這個(gè)教程就介紹幾種實(shí)現爬蟲(chóng)的方式,從傳統的線(xiàn)程池到使用解釋器,每節課實(shí)現一個(gè)小爬蟲(chóng)。另外學(xué)習解釋器的時(shí)侯,會(huì )從原理入手,以ayncio協(xié)程庫為原型,實(shí)現一個(gè)簡(jiǎn)單的異步編程模型。
課程注重爬蟲(chóng)原理的講解以及python爬蟲(chóng)代碼的實(shí)現。
當然,爬蟲(chóng)的應用地方好多,而不只是便捷自己,比如可以寫(xiě)一個(gè)聊天機器人,用爬蟲(chóng)爬網(wǎng)路上的笑話(huà),然后按照用戶(hù)的問(wèn)題回復相應的笑話(huà)內容,是一個(gè)很實(shí)用和常見(jiàn)的一個(gè)功能,學(xué)會(huì )將爬蟲(chóng)應用到實(shí)際的項目中是十分便捷的。
【蘋(píng)果IP代理】 8大高效的Python爬蟲(chóng)框架,你用過(guò)幾個(gè)?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 279 次瀏覽 ? 2020-06-09 08:01
4.Portia Portia 是一個(gè)開(kāi)源可視化爬蟲(chóng)工具,可使您在不需要任何編程知識的情況下爬取網(wǎng)站!簡(jiǎn)單地注釋您感興趣的頁(yè)面爬蟲(chóng)代理軟件爬蟲(chóng)代理軟件,Portia 將創(chuàng )建一個(gè)蜘蛛來(lái)從類(lèi)似的頁(yè)面提取數據。5.Newspaper Newspaper 可以拿來(lái)提取新聞、文章和內容剖析。使用多線(xiàn) 程,支持 10 多種語(yǔ)言等。 6.Beautiful Soup Beautiful Soup 是一個(gè)可以從 HTML 或 XML 文件中提取數據 的 Python 庫.它還能通過(guò)你喜歡的轉換器實(shí)現慣用的文檔導航, 查找,修改文檔的方法.Beautiful Soup 會(huì )幫你節約數小時(shí)甚至數天 的工作時(shí)間。 7.Grab Grab 是一個(gè)用于建立 Web 刮板的 Python 框架。借助 Grab, 您可以建立各類(lèi)復雜的網(wǎng)頁(yè)抓取工具,從簡(jiǎn)單的 5 行腳本到處理 數百萬(wàn)個(gè)網(wǎng)頁(yè)的復雜異步網(wǎng)站抓取工具。Grab 提供一個(gè) API 用于 執行網(wǎng)路懇求和處理接收到的內容,例如與 HTML 文檔的 DOM 樹(shù)進(jìn)行交互。 8.Cola Cola 是一個(gè)分布式的爬蟲(chóng)框架,對于用戶(hù)來(lái)說(shuō),只需編撰幾 個(gè)特定的函數,而無(wú)需關(guān)注分布式運行的細節。任務(wù)會(huì )手動(dòng)分配 到多臺機器上,整個(gè)過(guò)程對用戶(hù)是透明的。 查看全部
【蘋(píng)果 IP 代理】8 大高效的 Python 爬蟲(chóng)框架,你用過(guò)幾個(gè)? 【蘋(píng)果 IP 代理】大數據時(shí)代下,數據采集推動(dòng)著(zhù)數據剖析, 數據剖析加快發(fā)展。但是在這個(gè)過(guò)程中會(huì )出現好多問(wèn)題。拿最簡(jiǎn) 單最基礎的爬蟲(chóng)采集數據為例,過(guò)程中還會(huì )面臨,IP 被封,爬取 受限、違法操作等多種問(wèn)題,所以在爬取數據之前,一定要了解 好預爬網(wǎng)站是否涉及違規操作,找到合適的代理 IP 訪(fǎng)問(wèn)網(wǎng)站等 一系列問(wèn)題。今天我們就來(lái)講講這些高效的爬蟲(chóng)框架。 1.Scrapy Scrapy 是一個(gè)為了爬取網(wǎng)站數據,提取結構性數據而編撰的 應用框架。 可以應用在包括數據挖掘,信息處理或儲存歷史數 據等一系列的程序中。。用這個(gè)框架可以輕松爬出來(lái)如亞馬遜商 品信息之類(lèi)的數據。 2.PySpider pyspider 是一個(gè)用 python 實(shí)現的功能強悍的網(wǎng)路爬蟲(chóng)系統, 能在瀏覽器界面上進(jìn)行腳本的編撰,功能的調度和爬取結果的實(shí) 時(shí)查看,后端使用常用的數據庫進(jìn)行爬取結果的儲存,還能定時(shí) 設置任務(wù)與任務(wù)優(yōu)先級等。 3.Crawley Crawley 可以高速爬取對應網(wǎng)站的內容,支持關(guān)系和非關(guān)系 數據庫,數據可以導入為 JSON、XML 等。
4.Portia Portia 是一個(gè)開(kāi)源可視化爬蟲(chóng)工具,可使您在不需要任何編程知識的情況下爬取網(wǎng)站!簡(jiǎn)單地注釋您感興趣的頁(yè)面爬蟲(chóng)代理軟件爬蟲(chóng)代理軟件,Portia 將創(chuàng )建一個(gè)蜘蛛來(lái)從類(lèi)似的頁(yè)面提取數據。5.Newspaper Newspaper 可以拿來(lái)提取新聞、文章和內容剖析。使用多線(xiàn) 程,支持 10 多種語(yǔ)言等。 6.Beautiful Soup Beautiful Soup 是一個(gè)可以從 HTML 或 XML 文件中提取數據 的 Python 庫.它還能通過(guò)你喜歡的轉換器實(shí)現慣用的文檔導航, 查找,修改文檔的方法.Beautiful Soup 會(huì )幫你節約數小時(shí)甚至數天 的工作時(shí)間。 7.Grab Grab 是一個(gè)用于建立 Web 刮板的 Python 框架。借助 Grab, 您可以建立各類(lèi)復雜的網(wǎng)頁(yè)抓取工具,從簡(jiǎn)單的 5 行腳本到處理 數百萬(wàn)個(gè)網(wǎng)頁(yè)的復雜異步網(wǎng)站抓取工具。Grab 提供一個(gè) API 用于 執行網(wǎng)路懇求和處理接收到的內容,例如與 HTML 文檔的 DOM 樹(shù)進(jìn)行交互。 8.Cola Cola 是一個(gè)分布式的爬蟲(chóng)框架,對于用戶(hù)來(lái)說(shuō),只需編撰幾 個(gè)特定的函數,而無(wú)需關(guān)注分布式運行的細節。任務(wù)會(huì )手動(dòng)分配 到多臺機器上,整個(gè)過(guò)程對用戶(hù)是透明的。
終于知曉python網(wǎng)路爬蟲(chóng)的作用
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 281 次瀏覽 ? 2020-06-08 08:00
python網(wǎng)路爬蟲(chóng)的作用
1.做為通用搜索引擎網(wǎng)頁(yè)收集器。
2.做垂直搜索引擎.
3.科學(xué)研究:在線(xiàn)人類(lèi)行為,在線(xiàn)社群演變,人類(lèi)動(dòng)力學(xué)研究,計量社會(huì )學(xué),復雜網(wǎng)路,數據挖掘,等領(lǐng)域的實(shí)證研究都須要大量數據,網(wǎng)絡(luò )爬蟲(chóng)是搜集相關(guān)數據的神器。
4.偷窺,hacking,發(fā)垃圾郵件……
request懇求包含哪些
當我們通過(guò)瀏覽器向服務(wù)器發(fā)送request懇求時(shí),這個(gè)request包含了一些哪些信息呢?我們可以通過(guò)chrome的開(kāi)發(fā)者工具進(jìn)行說(shuō)明(如果不知道怎樣使用看本篇備注)。
請求方法:最常用的懇求方法包括get懇求和post懇求。post懇求在開(kāi)發(fā)中最常見(jiàn)的是通過(guò)表單進(jìn)行遞交,從用戶(hù)角度來(lái)講網(wǎng)絡(luò )爬蟲(chóng) 作用,最常見(jiàn)的就是登入驗證。當你須要輸入一些信息進(jìn)行登陸的時(shí)侯,這次懇求即為post懇求。
url統一資源定位符:一個(gè)網(wǎng)址,一張圖片,一個(gè)視頻等都可以用url去定義。當我們懇求一個(gè)網(wǎng)頁(yè)時(shí),我們可以查看network標簽網(wǎng)絡(luò )爬蟲(chóng) 作用,第一個(gè)一般是一個(gè)document,也就是說(shuō)這個(gè)document是一個(gè)未加外部圖片、css、js等渲染的html代碼,在這個(gè)document的下邊我們會(huì )聽(tīng)到一系列的jpg,js等,這是瀏覽器按照html代碼發(fā)起的一次又一次的懇求,而懇求的地址,即為html文檔中圖片、js等的url地址
request headers:請求頭,包括此次懇求的懇求類(lèi)型,cookie信息以及瀏覽器類(lèi)型等。 這個(gè)懇求頭在我們進(jìn)行網(wǎng)頁(yè)抓取的時(shí)侯還是有些作用的,服務(wù)器會(huì )通過(guò)解析懇求頭來(lái)進(jìn)行信息的初審,判斷此次懇求是一次合法的懇求。所以當我們通過(guò)程序偽裝瀏覽器進(jìn)行懇求的時(shí)侯,就可以設置一下懇求頭的信息。
請求體:post懇求會(huì )把用戶(hù)信息包裝在form-data上面進(jìn)行遞交,因此相比于get懇求,post懇求的Headers標簽的內容會(huì )多出Form Data這個(gè)信息包。get懇求可以簡(jiǎn)單的理解為普通的搜索回車(chē),信息將會(huì )以?間隔添加在url的旁邊。
為什么python適宜寫(xiě)爬蟲(chóng)
1)抓取網(wǎng)頁(yè)本身的插口
相比與其他靜態(tài)編程語(yǔ)言,如java,c#,C++,python抓取網(wǎng)頁(yè)文檔的插口更簡(jiǎn)約;相比其他動(dòng)態(tài)腳本語(yǔ)言,如perl,shell,python的urllib2包提供了較為完整的訪(fǎng)問(wèn)網(wǎng)頁(yè)文檔的API。(當然ruby也是挺好的選擇)
此外,抓取網(wǎng)頁(yè)有時(shí)候須要模擬瀏覽器的行為,很多網(wǎng)站對于死板的爬蟲(chóng)抓取都是封殺的。這是我們須要模擬user agent的行為構造合適的懇求,譬如模擬用戶(hù)登錄、模擬session/cookie的儲存和設置。在python里都有特別優(yōu)秀的第三方包幫你搞定,如Requests,mechanize
2)網(wǎng)頁(yè)抓取后的處理
抓取的網(wǎng)頁(yè)一般須要處理,比如過(guò)濾html標簽,提取文本等。python的beautifulsoap提供了簡(jiǎn)約的文檔處理功能,能用極短的代碼完成大部分文檔的處理。
其實(shí)以上功能好多語(yǔ)言和工具都能做,但是用python才能干得最快,最干凈。Life is short, u need python.
聚焦爬蟲(chóng)過(guò)濾方式
1.淺聚焦爬蟲(chóng)
選取符合目標主題的種子URL,例如我們定義抓取的信息為急聘信息,我們便可將急聘網(wǎng)站的URL(拉勾網(wǎng)、大街網(wǎng)等)作為種子URL,這樣便保證了抓取內容與我們定義的主題的一致性。
2.深聚焦爬蟲(chóng)
一般有兩種,一是針對內容二是針對URL。其中針對內容的如頁(yè)面中絕大部分超鏈接都是帶有錨文本的,我們可以依據錨文本進(jìn)行篩選。 查看全部
python網(wǎng)路爬蟲(chóng)的作用
1.做為通用搜索引擎網(wǎng)頁(yè)收集器。
2.做垂直搜索引擎.
3.科學(xué)研究:在線(xiàn)人類(lèi)行為,在線(xiàn)社群演變,人類(lèi)動(dòng)力學(xué)研究,計量社會(huì )學(xué),復雜網(wǎng)路,數據挖掘,等領(lǐng)域的實(shí)證研究都須要大量數據,網(wǎng)絡(luò )爬蟲(chóng)是搜集相關(guān)數據的神器。
4.偷窺,hacking,發(fā)垃圾郵件……
request懇求包含哪些
當我們通過(guò)瀏覽器向服務(wù)器發(fā)送request懇求時(shí),這個(gè)request包含了一些哪些信息呢?我們可以通過(guò)chrome的開(kāi)發(fā)者工具進(jìn)行說(shuō)明(如果不知道怎樣使用看本篇備注)。
請求方法:最常用的懇求方法包括get懇求和post懇求。post懇求在開(kāi)發(fā)中最常見(jiàn)的是通過(guò)表單進(jìn)行遞交,從用戶(hù)角度來(lái)講網(wǎng)絡(luò )爬蟲(chóng) 作用,最常見(jiàn)的就是登入驗證。當你須要輸入一些信息進(jìn)行登陸的時(shí)侯,這次懇求即為post懇求。
url統一資源定位符:一個(gè)網(wǎng)址,一張圖片,一個(gè)視頻等都可以用url去定義。當我們懇求一個(gè)網(wǎng)頁(yè)時(shí),我們可以查看network標簽網(wǎng)絡(luò )爬蟲(chóng) 作用,第一個(gè)一般是一個(gè)document,也就是說(shuō)這個(gè)document是一個(gè)未加外部圖片、css、js等渲染的html代碼,在這個(gè)document的下邊我們會(huì )聽(tīng)到一系列的jpg,js等,這是瀏覽器按照html代碼發(fā)起的一次又一次的懇求,而懇求的地址,即為html文檔中圖片、js等的url地址
request headers:請求頭,包括此次懇求的懇求類(lèi)型,cookie信息以及瀏覽器類(lèi)型等。 這個(gè)懇求頭在我們進(jìn)行網(wǎng)頁(yè)抓取的時(shí)侯還是有些作用的,服務(wù)器會(huì )通過(guò)解析懇求頭來(lái)進(jìn)行信息的初審,判斷此次懇求是一次合法的懇求。所以當我們通過(guò)程序偽裝瀏覽器進(jìn)行懇求的時(shí)侯,就可以設置一下懇求頭的信息。
請求體:post懇求會(huì )把用戶(hù)信息包裝在form-data上面進(jìn)行遞交,因此相比于get懇求,post懇求的Headers標簽的內容會(huì )多出Form Data這個(gè)信息包。get懇求可以簡(jiǎn)單的理解為普通的搜索回車(chē),信息將會(huì )以?間隔添加在url的旁邊。
為什么python適宜寫(xiě)爬蟲(chóng)
1)抓取網(wǎng)頁(yè)本身的插口
相比與其他靜態(tài)編程語(yǔ)言,如java,c#,C++,python抓取網(wǎng)頁(yè)文檔的插口更簡(jiǎn)約;相比其他動(dòng)態(tài)腳本語(yǔ)言,如perl,shell,python的urllib2包提供了較為完整的訪(fǎng)問(wèn)網(wǎng)頁(yè)文檔的API。(當然ruby也是挺好的選擇)
此外,抓取網(wǎng)頁(yè)有時(shí)候須要模擬瀏覽器的行為,很多網(wǎng)站對于死板的爬蟲(chóng)抓取都是封殺的。這是我們須要模擬user agent的行為構造合適的懇求,譬如模擬用戶(hù)登錄、模擬session/cookie的儲存和設置。在python里都有特別優(yōu)秀的第三方包幫你搞定,如Requests,mechanize
2)網(wǎng)頁(yè)抓取后的處理
抓取的網(wǎng)頁(yè)一般須要處理,比如過(guò)濾html標簽,提取文本等。python的beautifulsoap提供了簡(jiǎn)約的文檔處理功能,能用極短的代碼完成大部分文檔的處理。
其實(shí)以上功能好多語(yǔ)言和工具都能做,但是用python才能干得最快,最干凈。Life is short, u need python.
聚焦爬蟲(chóng)過(guò)濾方式
1.淺聚焦爬蟲(chóng)
選取符合目標主題的種子URL,例如我們定義抓取的信息為急聘信息,我們便可將急聘網(wǎng)站的URL(拉勾網(wǎng)、大街網(wǎng)等)作為種子URL,這樣便保證了抓取內容與我們定義的主題的一致性。
2.深聚焦爬蟲(chóng)
一般有兩種,一是針對內容二是針對URL。其中針對內容的如頁(yè)面中絕大部分超鏈接都是帶有錨文本的,我們可以依據錨文本進(jìn)行篩選。
使用Python編撰多線(xiàn)程爬蟲(chóng)抓取百度貼吧郵箱與手機號
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 502 次瀏覽 ? 2020-07-05 08:00
本爬蟲(chóng)主要是對百度貼吧中各類(lèi)貼子的內容進(jìn)行抓取,并且剖析貼子內容將其中的手機號和郵箱地址抓取下來(lái)。主要流程在代碼注釋中有詳盡解釋。
代碼在Windows7 64bit,python 2.7 64bit(安裝mysqldb擴充)以及centos 6.5,python 2.7(帶mysqldb擴充)環(huán)境下測試通過(guò)
工欲善其事必先利其器,大家可以從截圖看出我的環(huán)境是Windows 7 + PyCharm。我的Python環(huán)境是Python 2.7 64bit。這是比較適宜菜鳥(niǎo)使用的開(kāi)發(fā)環(huán)境。然后我再建議你們安裝一個(gè)easy_install,聽(tīng)名子就曉得這是一個(gè)安裝器,它是拿來(lái)安裝一些擴充包的,比如說(shuō)在python中假如我們要操作mysql數據庫的話(huà),python原生是不支持的,我們必須安裝mysqldb包來(lái)讓python可以操作mysql數據庫,如果有easy_install的話(huà)我們只須要一行命令就可以快速安裝號mysqldb擴充包,他如同php中的composer,centos中的yum,Ubuntu中的apt-get一樣便捷。
相關(guān)工具可在我的github中找到:cw1997/python-tools,其中easy_install的安裝只須要在python命令行下運行哪個(gè)py腳本之后稍等片刻即可郵箱爬蟲(chóng)軟件,他會(huì )手動(dòng)加入Windows的環(huán)境變量,在Windows命令行下假如輸入easy_install有回顯說(shuō)明安裝成功。
至于電腦硬件其實(shí)是越快越好,內存至少8G起步,因為爬蟲(chóng)本身須要大量?jì)Υ婧徒馕鲋虚g數據,尤其是多線(xiàn)程爬蟲(chóng),在遇到抓取帶有分頁(yè)的列表和詳情頁(yè),并且抓取數據量很大的情況下使用queue隊列分配抓取任務(wù)會(huì )特別占顯存。包括有的時(shí)候我們抓取的數據是使用json,如果使用mongodb等nosql數據庫儲存,也會(huì )太占顯存。
網(wǎng)絡(luò )聯(lián)接建議使用有線(xiàn)網(wǎng),因為市面上一些劣質(zhì)的無(wú)線(xiàn)路由器和普通的民用無(wú)線(xiàn)網(wǎng)卡在線(xiàn)程開(kāi)的比較大的情況下會(huì )出現間歇性斷網(wǎng)或則數據遺失,掉包等情況,這個(gè)我親有感受。
至于操作系統和python其實(shí)肯定是選擇64位。如果你使用的是32位的操作系統,那么難以使用大顯存。如果你使用的是32位的python,可能在小規模抓取數據的時(shí)侯覺(jué)得不出有哪些問(wèn)題,但是當數據量變大的時(shí)侯,比如說(shuō)某個(gè)列表,隊列,字典上面儲存了大量數據,導致python的顯存占用超過(guò)2g的時(shí)侯會(huì )報顯存溢出錯誤。原因在我以前segmentfault上提過(guò)的問(wèn)題中依云的回答有解釋?zhuān)╦ava – python只要占用顯存達到1.9G以后httplib模塊就開(kāi)始報內存溢出錯誤 – SegmentFault)
如果你打算使用mysql儲存數據,建議使用mysql5.5之后的版本,因為mysql5.5版本支持json數據類(lèi)型,這樣的話(huà)可以?huà)仐塵ongodb了。(有人說(shuō)mysql會(huì )比mongodb穩定一點(diǎn),這個(gè)我不確定。)
至于現今python都早已出了3.x版本了,為什么我這兒還使用的是python2.7?我個(gè)人選擇2.7版本的緣由是自己當年很早曾經(jīng)買(mǎi)的python核心編程這本書(shū)是第二版的,仍然以2.7為示例版本。并且目前網(wǎng)上一直有大量的教程資料是以2.7為版本講解,2.7在個(gè)別方面與3.x還是有很大差異,如果我們沒(méi)有學(xué)過(guò)2.7,可能對于一些細微的句型差異不是太懂會(huì )導致我們理解上出現誤差,或者看不懂demo代碼。而且如今還是有部份依賴(lài)包只兼容2.7版本。我的建議是假如你是打算急著(zhù)學(xué)python之后去公司工作,并且公司沒(méi)有老代碼須要維護,那么可以考慮直接上手3.x,如果你有比較充沛的時(shí)間,并且沒(méi)有太系統的大牛帶,只能借助網(wǎng)上零零散散的博客文章來(lái)學(xué)習,那么還是先學(xué)2.7在學(xué)3.x,畢竟學(xué)會(huì )了2.7以后3.x上手也很快。
其實(shí)對于任何軟件項目而言,我們但凡想知道編撰這個(gè)項目須要哪些知識點(diǎn),我們都可以觀(guān)察一下這個(gè)項目的主要入口文件都導出了什么包。
現在來(lái)看一下我們這個(gè)項目,作為一個(gè)剛接觸python的人,可能有一些包幾乎都沒(méi)有用過(guò),那么我們在本小節就來(lái)簡(jiǎn)單的談?wù)勥@種包起哪些作用,要把握她們分別會(huì )涉及到哪些知識點(diǎn),這些知識點(diǎn)的關(guān)鍵詞是哪些。這篇文章并不會(huì )耗費長(cháng)篇大論來(lái)從基礎講起,因此我們要學(xué)會(huì )善用百度,搜索那些知識點(diǎn)的關(guān)鍵詞來(lái)自學(xué)。下面就來(lái)一一剖析一下這種知識點(diǎn)。
我們的爬蟲(chóng)抓取數據本質(zhì)上就是不停的發(fā)起http請求,獲取http響應,將其存入我們的筆記本中。了解http協(xié)議有助于我們在抓取數據的時(shí)侯對一些才能加速抓取速率的參數才能精準的控制,比如說(shuō)keep-alive等。
我們平常編撰的程序都是單線(xiàn)程程序,我們寫(xiě)的代碼都在主線(xiàn)程上面運行,這個(gè)主線(xiàn)程又運行在python進(jìn)程中。關(guān)于線(xiàn)程和進(jìn)程的解釋可以參考阮一峰的博客:進(jìn)程與線(xiàn)程的一個(gè)簡(jiǎn)單解釋 – 阮一峰的網(wǎng)路日志
在python中實(shí)現多線(xiàn)程是通過(guò)一個(gè)名子稱(chēng)作threading的模塊來(lái)實(shí)現。之前還有thread模塊,但是threading對于線(xiàn)程的控制更強,因此我們后來(lái)都改用threading來(lái)實(shí)現多線(xiàn)程編程了。
關(guān)于threading多線(xiàn)程的一些用法,我認為這篇文章不錯:[python] 專(zhuān)題八.多線(xiàn)程編程之thread和threading 大家可以參考參考。
簡(jiǎn)單來(lái)說(shuō),使用threading模塊編撰多線(xiàn)程程序,就是先自己定義一個(gè)類(lèi),然后這個(gè)類(lèi)要承繼threading.Thread,并且把每位線(xiàn)程要做的工作代碼講到一個(gè)類(lèi)的run方式中,當然若果線(xiàn)程本身在創(chuàng )建的時(shí)侯假如要做一些初始化工作,那么就要在他的__init__方法中編撰好初始化工作所要執行的代碼,這個(gè)方式如同php,java中的構造方式一樣。
這里還要額外講的一點(diǎn)就是線(xiàn)程安全這個(gè)概念。通常情況下我們單線(xiàn)程情況下每位時(shí)刻只有一個(gè)線(xiàn)程在對資源(文件,變量)操作,所以不可能會(huì )出現沖突。但是當多線(xiàn)程的情況下,可能會(huì )出現同一個(gè)時(shí)刻兩個(gè)線(xiàn)程在操作同一個(gè)資源,導致資源受損,所以我們須要一種機制來(lái)解決這些沖突帶來(lái)的破壞,通常有加鎖等操作,比如說(shuō)mysql數據庫的innodb表引擎有行級鎖等,文件操作有讀取鎖等等,這些都是她們的程序底層幫我們完成了。所以我們一般只要曉得這些操作,或者這些程序對于線(xiàn)程安全問(wèn)題做了處理,然后就可以在多線(xiàn)程編程中去使用它們了。而這些考慮到線(xiàn)程安全問(wèn)題的程序通常就叫做“線(xiàn)程安全版本”,比如說(shuō)php就有TS版本,這個(gè)TS就是Thread Safety線(xiàn)程安全的意思。下面我們要提到的Queue模塊就是一種線(xiàn)程安全的隊列數據結構,所以我們可以放心的在多線(xiàn)程編程中使用它。
***我們就要來(lái)講講至關(guān)重要的線(xiàn)程阻塞這個(gè)概念了。當我們詳盡學(xué)習完threading模塊以后,大概就曉得怎樣創(chuàng )建和啟動(dòng)線(xiàn)程了。但是假如我們把線(xiàn)程創(chuàng )建好了,然后調用了start方式,那么我們會(huì )發(fā)覺(jué)似乎整個(gè)程序立刻就結束了,這是如何回事呢?其實(shí)這是因為我們在主線(xiàn)程中只有負責啟動(dòng)子線(xiàn)程的代碼,也就意味著(zhù)主線(xiàn)程只有啟動(dòng)子線(xiàn)程的功能,至于子線(xiàn)程執行的這些代碼,他們本質(zhì)上只是寫(xiě)在類(lèi)上面的一個(gè)方式,并沒(méi)在主線(xiàn)程上面真正去執行他,所以主線(xiàn)程啟動(dòng)完子線(xiàn)程以后他的本職工作就早已全部完成了,已經(jīng)光榮離場(chǎng)了。既然主線(xiàn)程都離場(chǎng)了,那么python進(jìn)程就跟隨結束了,那么其他線(xiàn)程也就沒(méi)有顯存空間繼續執行了。所以我們應當是要使主線(xiàn)程大嬸等到所有的子線(xiàn)程鄙人全部執行完畢再光榮離場(chǎng),那么在線(xiàn)程對象中有哪些方式才能把主線(xiàn)程卡住呢?thread.sleep嘛?這確實(shí)是個(gè)辦法,但是到底應當使主線(xiàn)程sleep多久呢?我們并不能確切曉得執行完一個(gè)任務(wù)要多久時(shí)間,肯定不能用這個(gè)辦法。所以我們這個(gè)時(shí)侯應當上網(wǎng)查詢(xún)一下有哪些辦法才能使子線(xiàn)程“卡住”主線(xiàn)程呢?“卡住”這個(gè)詞似乎很粗俗了,其實(shí)說(shuō)專(zhuān)業(yè)一點(diǎn),應該稱(chēng)作“阻塞”,所以我們可以查詢(xún)“python 子線(xiàn)程阻塞主線(xiàn)程”,如果我們會(huì )正確使用搜索引擎的話(huà),應該會(huì )查到一個(gè)方式稱(chēng)作join(),沒(méi)錯,這個(gè)join()方法就是子線(xiàn)程用于阻塞主線(xiàn)程的方式,當子線(xiàn)程還未執行完畢的時(shí)侯,主線(xiàn)程運行到富含join()方法的這一行都會(huì )卡在那里,直到所有線(xiàn)程都執行完畢才能執行join()方法前面的代碼。
假設有一個(gè)這樣的場(chǎng)景,我們須要抓取一個(gè)人的博客,我們曉得這個(gè)人的博客有兩個(gè)頁(yè)面,一個(gè)list.php頁(yè)面顯示的是此博客的所有文章鏈接,還有一個(gè)view.php頁(yè)面顯示的是一篇文章的具體內容。
如果我們要把這個(gè)人的博客上面所有文章內容抓取出來(lái),編寫(xiě)單線(xiàn)程爬蟲(chóng)的思路是:先用正則表達式把這個(gè)list.php頁(yè)面的所有鏈接a標簽的href屬性抓取出來(lái),存入一個(gè)名子稱(chēng)作article_list的鏈表(在python中不叫鏈表,叫做list,中文名列表),然后再用一個(gè)for循環(huán)遍歷這個(gè)article_list鏈表,用各類(lèi)抓取網(wǎng)頁(yè)內容的函數把內容抓取出來(lái)之后存入數據庫。
如果我們要編撰一個(gè)多線(xiàn)程爬蟲(chóng)來(lái)完成這個(gè)任務(wù)的話(huà),就假定我們的程序用10個(gè)線(xiàn)程把,那么我們就要想辦法把之前抓取的article_list平均分成10份,分別把每一份分配給其中一個(gè)子線(xiàn)程。
但是問(wèn)題來(lái)了,如果我們的article_list鏈表寬度不是10的倍數,也就是文章數量并不是10的整數倍,那么***一個(gè)線(xiàn)程都會(huì )比別的線(xiàn)程少分配到一些任務(wù),那么它將會(huì )更快的結束。
如果僅僅是抓取這些只有幾千字的博客文章這看似沒(méi)哪些問(wèn)題,但是假如我們一個(gè)任務(wù)(不一定是抓取網(wǎng)頁(yè)的任務(wù),有可能是物理估算,或者圖形渲染等等歷時(shí)任務(wù))的運行時(shí)間太長(cháng),那么這將導致極大地資源和時(shí)間浪費。我們多線(xiàn)程的目的就是盡可能的借助一切估算資源而且估算時(shí)間,所以我們要想辦法使任務(wù)才能愈發(fā)科學(xué)合理的分配。
并且我還要考慮一種情況,就是文章數量很大的情況下,我們要既能快速抓取到文章內容,又能盡早的看見(jiàn)我們早已抓取到的內容,這種需求在好多CMS采集站上常常會(huì )彰顯下來(lái)。
比如說(shuō)我們如今要抓取的目標博客,有幾千萬(wàn)篇文章,通常這些情況下博客還會(huì )做分頁(yè)處理,那么我們若果根據前面的傳統思路先抓取完list.php的所有頁(yè)面至少就要幾個(gè)小時(shí)甚至幾天,老板假如希望你還能早日顯示出抓取內容,并且盡早將早已抓取到的內容詮釋到我們的CMS采集站上,那么我們就要實(shí)現一邊抓取list.php而且把早已抓取到的數據丟入一個(gè)article_list鏈表,一邊用另一個(gè)線(xiàn)程從article_list鏈表中提取早已抓取到的文章URL地址,然后這個(gè)線(xiàn)程再去對應的URL地址中用正則表達式取到博客文章內容。如何實(shí)現這個(gè)功能呢?
我們就須要同時(shí)開(kāi)啟兩類(lèi)線(xiàn)程,一類(lèi)線(xiàn)程專(zhuān)門(mén)負責抓取list.php中的url之后丟入article_list鏈表,另外一類(lèi)線(xiàn)程專(zhuān)門(mén)負責從article_list中提取出url之后從對應的view.php頁(yè)面中抓取出對應的博客內容。
但是我們是否還記得上面提及過(guò)線(xiàn)程安全這個(gè)概念?前一類(lèi)線(xiàn)程一邊往article_list字段中寫(xiě)入數據,另外那一類(lèi)的線(xiàn)程從article_list中讀取數據但是刪掉早已讀取完畢的數據。但是python中list并不是線(xiàn)程安全版本的數據結構,因此這樣操作會(huì )導致不可預想的錯誤。所以我們可以嘗試使用一個(gè)愈發(fā)便捷且線(xiàn)程安全的數據結構,這就是我們的子標題中所提及的Queue隊列數據結構。
同樣Queue也有一個(gè)join()方法,這個(gè)join()方法雖然和上一個(gè)小節所提到的threading中join()方法差不多,只不過(guò)在Queue中,join()的阻塞條件是當隊列不為空空的時(shí)侯才阻塞,否則繼續執行join()后面的代碼。在這個(gè)爬蟲(chóng)中我便使用了這些技巧來(lái)阻塞主線(xiàn)程而不是直接通過(guò)線(xiàn)程的join方法來(lái)阻塞主線(xiàn)程,這樣的用處是可以不用寫(xiě)一個(gè)死循環(huán)來(lái)判定當前任務(wù)隊列中是否還有未執行完的任務(wù),讓程序運行愈發(fā)高效,也使代碼愈發(fā)柔美。
還有一個(gè)細節就是在python2.7中隊列模塊的名子是Queue,而在python3.x中早已更名為queue,就是首字母大小寫(xiě)的區別,大家假如是復制網(wǎng)上的代碼,要記得這個(gè)小區別。
如果你們學(xué)過(guò)c語(yǔ)言的話(huà),對這個(gè)模塊應當會(huì )太熟悉,他就是一個(gè)負責從命令行中的命令上面提取出附送參數的模塊。比如說(shuō)我們一般在命令行中操作mysql數據庫,就是輸入mysql -h127.0.0.1 -uroot -p,其中mysql前面的“-h127.0.0.1 -uroot -p”就是可以獲取的參數部份。
我們平常在編撰爬蟲(chóng)的時(shí)侯,有一些參數是須要用戶(hù)自己自動(dòng)輸入的,比如說(shuō)mysql的主機IP,用戶(hù)名密碼等等。為了使我們的程序愈加友好通用,有一些配置項是不需要硬編碼在代碼上面,而是在執行他的時(shí)侯我們動(dòng)態(tài)傳入,結合getopt模塊我們就可以實(shí)現這個(gè)功能。
哈希本質(zhì)上就是一類(lèi)物理算法的集合,這種物理算法有個(gè)特點(diǎn)就是你給定一個(gè)參數,他就能輸出另外一個(gè)結果,雖然這個(gè)結果太短,但是他可以近似覺(jué)得是***的。比如說(shuō)我們平常聽(tīng)過(guò)的md5,sha-1等等,他們都屬于哈希算法。他們可以把一些文件,文字經(jīng)過(guò)一系列的物理運算然后弄成短短不到一百位的一段數字中文混和的字符串。
python中的hashlib模塊就為我們封裝好了這種物理運算函數,我們只須要簡(jiǎn)單的調用它就可以完成哈希運算。
為什么在我這個(gè)爬蟲(chóng)中用到了這個(gè)包呢?因為在一些插口懇求中,服務(wù)器須要帶上一些校驗碼,保證插口懇求的數據沒(méi)有被篡改或則遺失,這些校驗碼通常都是hash算法,所以我們須要用到這個(gè)模塊來(lái)完成這些運算。
很多時(shí)侯我們抓取到的數據不是html,而是一些json數據,json本質(zhì)上只是一段富含通配符對的字符串,如果我們須要提取出其中特定的字符串,那么我們須要json這個(gè)模塊來(lái)將這個(gè)json字符串轉換為dict類(lèi)型便捷我們操作。
有的時(shí)侯我們抓取到了一些網(wǎng)頁(yè)內容,但是我們須要將網(wǎng)頁(yè)中的一些特定格式的內容提取下來(lái),比如說(shuō)電子郵箱的格式通常都是上面幾位英語(yǔ)數字字母加一個(gè)@符號加的域名,而要象計算機語(yǔ)言描述這些格式,我們可以使用一種稱(chēng)作正則表達式的表達式來(lái)抒發(fā)出這些格式,并且使計算機手動(dòng)從一大段字符串上將符合這些特定格式的文字匹配下來(lái)。
這個(gè)模塊主要用于處理一些系統方面的事情,在這個(gè)爬蟲(chóng)中我用他來(lái)解決輸出編碼問(wèn)題。
稍微學(xué)過(guò)一點(diǎn)法語(yǔ)的人都還能猜下來(lái)這個(gè)模塊用于處理時(shí)間,在這個(gè)爬蟲(chóng)中我用它來(lái)獲取當前時(shí)間戳,然后通過(guò)在主線(xiàn)程末尾用當前時(shí)間戳除以程序開(kāi)始運行時(shí)的時(shí)間戳,得到程序的運行時(shí)間。
如圖所示,開(kāi)50個(gè)線(xiàn)程抓取100頁(yè)(每頁(yè)30個(gè)貼子,相當于抓取了3000個(gè)貼子)貼吧貼子內容而且從中提取出手機郵箱這個(gè)步驟共歷時(shí)330秒。
這兩個(gè)模塊都是用于處理一些http請求,以及url低格方面的事情。我的爬蟲(chóng)http請求部份的核心代碼就是使用這個(gè)模塊完成的。
這是一個(gè)第三方模塊,用于在python中操作mysql數據庫。
這里我們要注意一個(gè)細節問(wèn)題:mysqldb模塊并不是線(xiàn)程安全版本,意味著(zhù)我們不能在多線(xiàn)程中共享同一個(gè)mysql聯(lián)接句柄。所以你們可以在我的代碼中聽(tīng)到,我在每位線(xiàn)程的構造函數中都傳入了一個(gè)新的mysql聯(lián)接句柄。因此每位子線(xiàn)程只會(huì )用自己獨立的mysql聯(lián)接句柄。
這也是一個(gè)第三方模塊,網(wǎng)上還能找到相關(guān)代碼,這個(gè)模塊主要用于向命令行中輸出彩色字符串。比如說(shuō)我們一般爬蟲(chóng)出現錯誤,要輸出黃色的字體會(huì )比較醒目,就要使用到這個(gè)模塊。
如果你們在網(wǎng)路質(zhì)量不是挺好的環(huán)境下使用該爬蟲(chóng),會(huì )發(fā)覺(jué)有的時(shí)侯會(huì )報如圖所示的異常,這是我為了偷懶并沒(méi)有寫(xiě)各類(lèi)異常處理的邏輯。
通常情況下我們假如要編撰高度自動(dòng)化的爬蟲(chóng),那么就須要意料到我們的爬蟲(chóng)可能會(huì )遇見(jiàn)的所有異常情況郵箱爬蟲(chóng)軟件,針對這種異常情況做處理。
比如說(shuō)如圖所示的錯誤,我們就應當把當時(shí)正在處理的任務(wù)重新伸入任務(wù)隊列,否則我們還會(huì )出現遺漏信息的情況。這也是爬蟲(chóng)編撰的一個(gè)復雜點(diǎn)。
其實(shí)多線(xiàn)程爬蟲(chóng)的編撰也不復雜,多看示例代碼,多自己動(dòng)手嘗試,多去社區,論壇交流,很多精典的書(shū)上對多線(xiàn)程編程也有特別詳盡的解釋。這篇文章本質(zhì)上主要還是一篇科普文章,內容講解的都不是太深入,大家還須要課外自己多結合網(wǎng)上各類(lèi)資料自己學(xué)習。
【編輯推薦】
Python程序員都該用的一個(gè)庫Python正則表達式re模塊簡(jiǎn)明筆記這種方式推動(dòng)Python開(kāi)發(fā)者提升效率Python并發(fā)編程之線(xiàn)程池/進(jìn)程池Python黑魔法之描述符 查看全部
不知道你們春節都是如何過(guò)的,反正欄主是在家睡了三天,醒來(lái)的時(shí)侯登QQ發(fā)覺(jué)有人找我要一份帖吧爬蟲(chóng)的源代碼,想起之前練手的時(shí)侯寫(xiě)過(guò)一個(gè)抓取百度貼吧發(fā)貼記錄中的郵箱與手機號的爬蟲(chóng),于是開(kāi)源分享給你們學(xué)習與參考。
本爬蟲(chóng)主要是對百度貼吧中各類(lèi)貼子的內容進(jìn)行抓取,并且剖析貼子內容將其中的手機號和郵箱地址抓取下來(lái)。主要流程在代碼注釋中有詳盡解釋。
代碼在Windows7 64bit,python 2.7 64bit(安裝mysqldb擴充)以及centos 6.5,python 2.7(帶mysqldb擴充)環(huán)境下測試通過(guò)


工欲善其事必先利其器,大家可以從截圖看出我的環(huán)境是Windows 7 + PyCharm。我的Python環(huán)境是Python 2.7 64bit。這是比較適宜菜鳥(niǎo)使用的開(kāi)發(fā)環(huán)境。然后我再建議你們安裝一個(gè)easy_install,聽(tīng)名子就曉得這是一個(gè)安裝器,它是拿來(lái)安裝一些擴充包的,比如說(shuō)在python中假如我們要操作mysql數據庫的話(huà),python原生是不支持的,我們必須安裝mysqldb包來(lái)讓python可以操作mysql數據庫,如果有easy_install的話(huà)我們只須要一行命令就可以快速安裝號mysqldb擴充包,他如同php中的composer,centos中的yum,Ubuntu中的apt-get一樣便捷。
相關(guān)工具可在我的github中找到:cw1997/python-tools,其中easy_install的安裝只須要在python命令行下運行哪個(gè)py腳本之后稍等片刻即可郵箱爬蟲(chóng)軟件,他會(huì )手動(dòng)加入Windows的環(huán)境變量,在Windows命令行下假如輸入easy_install有回顯說(shuō)明安裝成功。
至于電腦硬件其實(shí)是越快越好,內存至少8G起步,因為爬蟲(chóng)本身須要大量?jì)Υ婧徒馕鲋虚g數據,尤其是多線(xiàn)程爬蟲(chóng),在遇到抓取帶有分頁(yè)的列表和詳情頁(yè),并且抓取數據量很大的情況下使用queue隊列分配抓取任務(wù)會(huì )特別占顯存。包括有的時(shí)候我們抓取的數據是使用json,如果使用mongodb等nosql數據庫儲存,也會(huì )太占顯存。
網(wǎng)絡(luò )聯(lián)接建議使用有線(xiàn)網(wǎng),因為市面上一些劣質(zhì)的無(wú)線(xiàn)路由器和普通的民用無(wú)線(xiàn)網(wǎng)卡在線(xiàn)程開(kāi)的比較大的情況下會(huì )出現間歇性斷網(wǎng)或則數據遺失,掉包等情況,這個(gè)我親有感受。
至于操作系統和python其實(shí)肯定是選擇64位。如果你使用的是32位的操作系統,那么難以使用大顯存。如果你使用的是32位的python,可能在小規模抓取數據的時(shí)侯覺(jué)得不出有哪些問(wèn)題,但是當數據量變大的時(shí)侯,比如說(shuō)某個(gè)列表,隊列,字典上面儲存了大量數據,導致python的顯存占用超過(guò)2g的時(shí)侯會(huì )報顯存溢出錯誤。原因在我以前segmentfault上提過(guò)的問(wèn)題中依云的回答有解釋?zhuān)╦ava – python只要占用顯存達到1.9G以后httplib模塊就開(kāi)始報內存溢出錯誤 – SegmentFault)
如果你打算使用mysql儲存數據,建議使用mysql5.5之后的版本,因為mysql5.5版本支持json數據類(lèi)型,這樣的話(huà)可以?huà)仐塵ongodb了。(有人說(shuō)mysql會(huì )比mongodb穩定一點(diǎn),這個(gè)我不確定。)
至于現今python都早已出了3.x版本了,為什么我這兒還使用的是python2.7?我個(gè)人選擇2.7版本的緣由是自己當年很早曾經(jīng)買(mǎi)的python核心編程這本書(shū)是第二版的,仍然以2.7為示例版本。并且目前網(wǎng)上一直有大量的教程資料是以2.7為版本講解,2.7在個(gè)別方面與3.x還是有很大差異,如果我們沒(méi)有學(xué)過(guò)2.7,可能對于一些細微的句型差異不是太懂會(huì )導致我們理解上出現誤差,或者看不懂demo代碼。而且如今還是有部份依賴(lài)包只兼容2.7版本。我的建議是假如你是打算急著(zhù)學(xué)python之后去公司工作,并且公司沒(méi)有老代碼須要維護,那么可以考慮直接上手3.x,如果你有比較充沛的時(shí)間,并且沒(méi)有太系統的大牛帶,只能借助網(wǎng)上零零散散的博客文章來(lái)學(xué)習,那么還是先學(xué)2.7在學(xué)3.x,畢竟學(xué)會(huì )了2.7以后3.x上手也很快。
其實(shí)對于任何軟件項目而言,我們但凡想知道編撰這個(gè)項目須要哪些知識點(diǎn),我們都可以觀(guān)察一下這個(gè)項目的主要入口文件都導出了什么包。

現在來(lái)看一下我們這個(gè)項目,作為一個(gè)剛接觸python的人,可能有一些包幾乎都沒(méi)有用過(guò),那么我們在本小節就來(lái)簡(jiǎn)單的談?wù)勥@種包起哪些作用,要把握她們分別會(huì )涉及到哪些知識點(diǎn),這些知識點(diǎn)的關(guān)鍵詞是哪些。這篇文章并不會(huì )耗費長(cháng)篇大論來(lái)從基礎講起,因此我們要學(xué)會(huì )善用百度,搜索那些知識點(diǎn)的關(guān)鍵詞來(lái)自學(xué)。下面就來(lái)一一剖析一下這種知識點(diǎn)。
我們的爬蟲(chóng)抓取數據本質(zhì)上就是不停的發(fā)起http請求,獲取http響應,將其存入我們的筆記本中。了解http協(xié)議有助于我們在抓取數據的時(shí)侯對一些才能加速抓取速率的參數才能精準的控制,比如說(shuō)keep-alive等。
我們平常編撰的程序都是單線(xiàn)程程序,我們寫(xiě)的代碼都在主線(xiàn)程上面運行,這個(gè)主線(xiàn)程又運行在python進(jìn)程中。關(guān)于線(xiàn)程和進(jìn)程的解釋可以參考阮一峰的博客:進(jìn)程與線(xiàn)程的一個(gè)簡(jiǎn)單解釋 – 阮一峰的網(wǎng)路日志
在python中實(shí)現多線(xiàn)程是通過(guò)一個(gè)名子稱(chēng)作threading的模塊來(lái)實(shí)現。之前還有thread模塊,但是threading對于線(xiàn)程的控制更強,因此我們后來(lái)都改用threading來(lái)實(shí)現多線(xiàn)程編程了。
關(guān)于threading多線(xiàn)程的一些用法,我認為這篇文章不錯:[python] 專(zhuān)題八.多線(xiàn)程編程之thread和threading 大家可以參考參考。
簡(jiǎn)單來(lái)說(shuō),使用threading模塊編撰多線(xiàn)程程序,就是先自己定義一個(gè)類(lèi),然后這個(gè)類(lèi)要承繼threading.Thread,并且把每位線(xiàn)程要做的工作代碼講到一個(gè)類(lèi)的run方式中,當然若果線(xiàn)程本身在創(chuàng )建的時(shí)侯假如要做一些初始化工作,那么就要在他的__init__方法中編撰好初始化工作所要執行的代碼,這個(gè)方式如同php,java中的構造方式一樣。
這里還要額外講的一點(diǎn)就是線(xiàn)程安全這個(gè)概念。通常情況下我們單線(xiàn)程情況下每位時(shí)刻只有一個(gè)線(xiàn)程在對資源(文件,變量)操作,所以不可能會(huì )出現沖突。但是當多線(xiàn)程的情況下,可能會(huì )出現同一個(gè)時(shí)刻兩個(gè)線(xiàn)程在操作同一個(gè)資源,導致資源受損,所以我們須要一種機制來(lái)解決這些沖突帶來(lái)的破壞,通常有加鎖等操作,比如說(shuō)mysql數據庫的innodb表引擎有行級鎖等,文件操作有讀取鎖等等,這些都是她們的程序底層幫我們完成了。所以我們一般只要曉得這些操作,或者這些程序對于線(xiàn)程安全問(wèn)題做了處理,然后就可以在多線(xiàn)程編程中去使用它們了。而這些考慮到線(xiàn)程安全問(wèn)題的程序通常就叫做“線(xiàn)程安全版本”,比如說(shuō)php就有TS版本,這個(gè)TS就是Thread Safety線(xiàn)程安全的意思。下面我們要提到的Queue模塊就是一種線(xiàn)程安全的隊列數據結構,所以我們可以放心的在多線(xiàn)程編程中使用它。
***我們就要來(lái)講講至關(guān)重要的線(xiàn)程阻塞這個(gè)概念了。當我們詳盡學(xué)習完threading模塊以后,大概就曉得怎樣創(chuàng )建和啟動(dòng)線(xiàn)程了。但是假如我們把線(xiàn)程創(chuàng )建好了,然后調用了start方式,那么我們會(huì )發(fā)覺(jué)似乎整個(gè)程序立刻就結束了,這是如何回事呢?其實(shí)這是因為我們在主線(xiàn)程中只有負責啟動(dòng)子線(xiàn)程的代碼,也就意味著(zhù)主線(xiàn)程只有啟動(dòng)子線(xiàn)程的功能,至于子線(xiàn)程執行的這些代碼,他們本質(zhì)上只是寫(xiě)在類(lèi)上面的一個(gè)方式,并沒(méi)在主線(xiàn)程上面真正去執行他,所以主線(xiàn)程啟動(dòng)完子線(xiàn)程以后他的本職工作就早已全部完成了,已經(jīng)光榮離場(chǎng)了。既然主線(xiàn)程都離場(chǎng)了,那么python進(jìn)程就跟隨結束了,那么其他線(xiàn)程也就沒(méi)有顯存空間繼續執行了。所以我們應當是要使主線(xiàn)程大嬸等到所有的子線(xiàn)程鄙人全部執行完畢再光榮離場(chǎng),那么在線(xiàn)程對象中有哪些方式才能把主線(xiàn)程卡住呢?thread.sleep嘛?這確實(shí)是個(gè)辦法,但是到底應當使主線(xiàn)程sleep多久呢?我們并不能確切曉得執行完一個(gè)任務(wù)要多久時(shí)間,肯定不能用這個(gè)辦法。所以我們這個(gè)時(shí)侯應當上網(wǎng)查詢(xún)一下有哪些辦法才能使子線(xiàn)程“卡住”主線(xiàn)程呢?“卡住”這個(gè)詞似乎很粗俗了,其實(shí)說(shuō)專(zhuān)業(yè)一點(diǎn),應該稱(chēng)作“阻塞”,所以我們可以查詢(xún)“python 子線(xiàn)程阻塞主線(xiàn)程”,如果我們會(huì )正確使用搜索引擎的話(huà),應該會(huì )查到一個(gè)方式稱(chēng)作join(),沒(méi)錯,這個(gè)join()方法就是子線(xiàn)程用于阻塞主線(xiàn)程的方式,當子線(xiàn)程還未執行完畢的時(shí)侯,主線(xiàn)程運行到富含join()方法的這一行都會(huì )卡在那里,直到所有線(xiàn)程都執行完畢才能執行join()方法前面的代碼。
假設有一個(gè)這樣的場(chǎng)景,我們須要抓取一個(gè)人的博客,我們曉得這個(gè)人的博客有兩個(gè)頁(yè)面,一個(gè)list.php頁(yè)面顯示的是此博客的所有文章鏈接,還有一個(gè)view.php頁(yè)面顯示的是一篇文章的具體內容。
如果我們要把這個(gè)人的博客上面所有文章內容抓取出來(lái),編寫(xiě)單線(xiàn)程爬蟲(chóng)的思路是:先用正則表達式把這個(gè)list.php頁(yè)面的所有鏈接a標簽的href屬性抓取出來(lái),存入一個(gè)名子稱(chēng)作article_list的鏈表(在python中不叫鏈表,叫做list,中文名列表),然后再用一個(gè)for循環(huán)遍歷這個(gè)article_list鏈表,用各類(lèi)抓取網(wǎng)頁(yè)內容的函數把內容抓取出來(lái)之后存入數據庫。
如果我們要編撰一個(gè)多線(xiàn)程爬蟲(chóng)來(lái)完成這個(gè)任務(wù)的話(huà),就假定我們的程序用10個(gè)線(xiàn)程把,那么我們就要想辦法把之前抓取的article_list平均分成10份,分別把每一份分配給其中一個(gè)子線(xiàn)程。
但是問(wèn)題來(lái)了,如果我們的article_list鏈表寬度不是10的倍數,也就是文章數量并不是10的整數倍,那么***一個(gè)線(xiàn)程都會(huì )比別的線(xiàn)程少分配到一些任務(wù),那么它將會(huì )更快的結束。
如果僅僅是抓取這些只有幾千字的博客文章這看似沒(méi)哪些問(wèn)題,但是假如我們一個(gè)任務(wù)(不一定是抓取網(wǎng)頁(yè)的任務(wù),有可能是物理估算,或者圖形渲染等等歷時(shí)任務(wù))的運行時(shí)間太長(cháng),那么這將導致極大地資源和時(shí)間浪費。我們多線(xiàn)程的目的就是盡可能的借助一切估算資源而且估算時(shí)間,所以我們要想辦法使任務(wù)才能愈發(fā)科學(xué)合理的分配。
并且我還要考慮一種情況,就是文章數量很大的情況下,我們要既能快速抓取到文章內容,又能盡早的看見(jiàn)我們早已抓取到的內容,這種需求在好多CMS采集站上常常會(huì )彰顯下來(lái)。
比如說(shuō)我們如今要抓取的目標博客,有幾千萬(wàn)篇文章,通常這些情況下博客還會(huì )做分頁(yè)處理,那么我們若果根據前面的傳統思路先抓取完list.php的所有頁(yè)面至少就要幾個(gè)小時(shí)甚至幾天,老板假如希望你還能早日顯示出抓取內容,并且盡早將早已抓取到的內容詮釋到我們的CMS采集站上,那么我們就要實(shí)現一邊抓取list.php而且把早已抓取到的數據丟入一個(gè)article_list鏈表,一邊用另一個(gè)線(xiàn)程從article_list鏈表中提取早已抓取到的文章URL地址,然后這個(gè)線(xiàn)程再去對應的URL地址中用正則表達式取到博客文章內容。如何實(shí)現這個(gè)功能呢?
我們就須要同時(shí)開(kāi)啟兩類(lèi)線(xiàn)程,一類(lèi)線(xiàn)程專(zhuān)門(mén)負責抓取list.php中的url之后丟入article_list鏈表,另外一類(lèi)線(xiàn)程專(zhuān)門(mén)負責從article_list中提取出url之后從對應的view.php頁(yè)面中抓取出對應的博客內容。
但是我們是否還記得上面提及過(guò)線(xiàn)程安全這個(gè)概念?前一類(lèi)線(xiàn)程一邊往article_list字段中寫(xiě)入數據,另外那一類(lèi)的線(xiàn)程從article_list中讀取數據但是刪掉早已讀取完畢的數據。但是python中list并不是線(xiàn)程安全版本的數據結構,因此這樣操作會(huì )導致不可預想的錯誤。所以我們可以嘗試使用一個(gè)愈發(fā)便捷且線(xiàn)程安全的數據結構,這就是我們的子標題中所提及的Queue隊列數據結構。
同樣Queue也有一個(gè)join()方法,這個(gè)join()方法雖然和上一個(gè)小節所提到的threading中join()方法差不多,只不過(guò)在Queue中,join()的阻塞條件是當隊列不為空空的時(shí)侯才阻塞,否則繼續執行join()后面的代碼。在這個(gè)爬蟲(chóng)中我便使用了這些技巧來(lái)阻塞主線(xiàn)程而不是直接通過(guò)線(xiàn)程的join方法來(lái)阻塞主線(xiàn)程,這樣的用處是可以不用寫(xiě)一個(gè)死循環(huán)來(lái)判定當前任務(wù)隊列中是否還有未執行完的任務(wù),讓程序運行愈發(fā)高效,也使代碼愈發(fā)柔美。
還有一個(gè)細節就是在python2.7中隊列模塊的名子是Queue,而在python3.x中早已更名為queue,就是首字母大小寫(xiě)的區別,大家假如是復制網(wǎng)上的代碼,要記得這個(gè)小區別。
如果你們學(xué)過(guò)c語(yǔ)言的話(huà),對這個(gè)模塊應當會(huì )太熟悉,他就是一個(gè)負責從命令行中的命令上面提取出附送參數的模塊。比如說(shuō)我們一般在命令行中操作mysql數據庫,就是輸入mysql -h127.0.0.1 -uroot -p,其中mysql前面的“-h127.0.0.1 -uroot -p”就是可以獲取的參數部份。
我們平常在編撰爬蟲(chóng)的時(shí)侯,有一些參數是須要用戶(hù)自己自動(dòng)輸入的,比如說(shuō)mysql的主機IP,用戶(hù)名密碼等等。為了使我們的程序愈加友好通用,有一些配置項是不需要硬編碼在代碼上面,而是在執行他的時(shí)侯我們動(dòng)態(tài)傳入,結合getopt模塊我們就可以實(shí)現這個(gè)功能。
哈希本質(zhì)上就是一類(lèi)物理算法的集合,這種物理算法有個(gè)特點(diǎn)就是你給定一個(gè)參數,他就能輸出另外一個(gè)結果,雖然這個(gè)結果太短,但是他可以近似覺(jué)得是***的。比如說(shuō)我們平常聽(tīng)過(guò)的md5,sha-1等等,他們都屬于哈希算法。他們可以把一些文件,文字經(jīng)過(guò)一系列的物理運算然后弄成短短不到一百位的一段數字中文混和的字符串。
python中的hashlib模塊就為我們封裝好了這種物理運算函數,我們只須要簡(jiǎn)單的調用它就可以完成哈希運算。
為什么在我這個(gè)爬蟲(chóng)中用到了這個(gè)包呢?因為在一些插口懇求中,服務(wù)器須要帶上一些校驗碼,保證插口懇求的數據沒(méi)有被篡改或則遺失,這些校驗碼通常都是hash算法,所以我們須要用到這個(gè)模塊來(lái)完成這些運算。
很多時(shí)侯我們抓取到的數據不是html,而是一些json數據,json本質(zhì)上只是一段富含通配符對的字符串,如果我們須要提取出其中特定的字符串,那么我們須要json這個(gè)模塊來(lái)將這個(gè)json字符串轉換為dict類(lèi)型便捷我們操作。
有的時(shí)侯我們抓取到了一些網(wǎng)頁(yè)內容,但是我們須要將網(wǎng)頁(yè)中的一些特定格式的內容提取下來(lái),比如說(shuō)電子郵箱的格式通常都是上面幾位英語(yǔ)數字字母加一個(gè)@符號加的域名,而要象計算機語(yǔ)言描述這些格式,我們可以使用一種稱(chēng)作正則表達式的表達式來(lái)抒發(fā)出這些格式,并且使計算機手動(dòng)從一大段字符串上將符合這些特定格式的文字匹配下來(lái)。
這個(gè)模塊主要用于處理一些系統方面的事情,在這個(gè)爬蟲(chóng)中我用他來(lái)解決輸出編碼問(wèn)題。
稍微學(xué)過(guò)一點(diǎn)法語(yǔ)的人都還能猜下來(lái)這個(gè)模塊用于處理時(shí)間,在這個(gè)爬蟲(chóng)中我用它來(lái)獲取當前時(shí)間戳,然后通過(guò)在主線(xiàn)程末尾用當前時(shí)間戳除以程序開(kāi)始運行時(shí)的時(shí)間戳,得到程序的運行時(shí)間。

如圖所示,開(kāi)50個(gè)線(xiàn)程抓取100頁(yè)(每頁(yè)30個(gè)貼子,相當于抓取了3000個(gè)貼子)貼吧貼子內容而且從中提取出手機郵箱這個(gè)步驟共歷時(shí)330秒。
這兩個(gè)模塊都是用于處理一些http請求,以及url低格方面的事情。我的爬蟲(chóng)http請求部份的核心代碼就是使用這個(gè)模塊完成的。
這是一個(gè)第三方模塊,用于在python中操作mysql數據庫。
這里我們要注意一個(gè)細節問(wèn)題:mysqldb模塊并不是線(xiàn)程安全版本,意味著(zhù)我們不能在多線(xiàn)程中共享同一個(gè)mysql聯(lián)接句柄。所以你們可以在我的代碼中聽(tīng)到,我在每位線(xiàn)程的構造函數中都傳入了一個(gè)新的mysql聯(lián)接句柄。因此每位子線(xiàn)程只會(huì )用自己獨立的mysql聯(lián)接句柄。
這也是一個(gè)第三方模塊,網(wǎng)上還能找到相關(guān)代碼,這個(gè)模塊主要用于向命令行中輸出彩色字符串。比如說(shuō)我們一般爬蟲(chóng)出現錯誤,要輸出黃色的字體會(huì )比較醒目,就要使用到這個(gè)模塊。

如果你們在網(wǎng)路質(zhì)量不是挺好的環(huán)境下使用該爬蟲(chóng),會(huì )發(fā)覺(jué)有的時(shí)侯會(huì )報如圖所示的異常,這是我為了偷懶并沒(méi)有寫(xiě)各類(lèi)異常處理的邏輯。
通常情況下我們假如要編撰高度自動(dòng)化的爬蟲(chóng),那么就須要意料到我們的爬蟲(chóng)可能會(huì )遇見(jiàn)的所有異常情況郵箱爬蟲(chóng)軟件,針對這種異常情況做處理。
比如說(shuō)如圖所示的錯誤,我們就應當把當時(shí)正在處理的任務(wù)重新伸入任務(wù)隊列,否則我們還會(huì )出現遺漏信息的情況。這也是爬蟲(chóng)編撰的一個(gè)復雜點(diǎn)。
其實(shí)多線(xiàn)程爬蟲(chóng)的編撰也不復雜,多看示例代碼,多自己動(dòng)手嘗試,多去社區,論壇交流,很多精典的書(shū)上對多線(xiàn)程編程也有特別詳盡的解釋。這篇文章本質(zhì)上主要還是一篇科普文章,內容講解的都不是太深入,大家還須要課外自己多結合網(wǎng)上各類(lèi)資料自己學(xué)習。
【編輯推薦】
Python程序員都該用的一個(gè)庫Python正則表達式re模塊簡(jiǎn)明筆記這種方式推動(dòng)Python開(kāi)發(fā)者提升效率Python并發(fā)編程之線(xiàn)程池/進(jìn)程池Python黑魔法之描述符
Python爬蟲(chóng)借助cookie實(shí)現模擬登錄實(shí)例解讀
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 464 次瀏覽 ? 2020-07-05 08:00
舉個(gè)事例,某些網(wǎng)站是須要登陸后就能得到你想要的信息的,不登錄只能是旅客模式,那么我們可以借助Urllib2庫保存我們曾經(jīng)登陸過(guò)的Cookie,之后載入cookie獲取我們想要的頁(yè)面,然后再進(jìn)行抓取。理解cookie主要是為我們快捷模擬登陸抓取目標網(wǎng)頁(yè)作出打算。
我之前的貼子中使用過(guò)urlopen()這個(gè)函數來(lái)打開(kāi)網(wǎng)頁(yè)進(jìn)行抓取,這僅僅只是一個(gè)簡(jiǎn)單的Python網(wǎng)頁(yè)打開(kāi)器,其參數也僅有urlopen(url,data,timeout),這三個(gè)參數對于我們獲取目標網(wǎng)頁(yè)的cookie是遠遠不夠的。這時(shí)候我們就要借助到另外一種Opener——CookieJar。
cookielib也是Python進(jìn)行爬蟲(chóng)的一個(gè)重要模塊python爬蟲(chóng)模擬登錄python爬蟲(chóng)模擬登錄,他能與urllib2互相結合一起爬取想要的內容。該模塊的CookieJar類(lèi)的對象可以捕獲cookie并在后續聯(lián)接懇求時(shí)重新發(fā)送,這樣就可以實(shí)現我們所須要的模擬登陸功能。
這里非常說(shuō)明一下,cookielib是在py2.7中自帶的模塊,無(wú)需重新安裝,想要查看其自帶模塊可以查看Python目錄下的Lib文件夾,里面有所有安裝的模塊。我一開(kāi)始沒(méi)想起來(lái),在pycharm中居然沒(méi)有搜到cookielib,使用了快捷安裝也報錯:Couldn't find index page for 'Cookielib' (maybe misspelled?)
之后才想起來(lái)是不是自帶的就有,沒(méi)想到去lib文件夾一看還真有,白白浪費半個(gè)小時(shí)各類(lèi)瞎折騰~~
下面我們就來(lái)介紹一下這個(gè)模塊,該模塊主要的對象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
它們的關(guān)系:CookieJar —-派生—->FileCookieJar —-派生—–>MozillaCookieJar和LWPCookieJar 主要用法,我們下邊也會(huì )提到。urllib2.urlopen()函數不支持驗證、cookie或則其它HTTP中級功能。要支持這種功能,必須使用build_opener()(可以用于使python程序模擬瀏覽器進(jìn)行訪(fǎng)問(wèn),作用你懂得~)函數創(chuàng )建自定義Opener對象。
1、首先我們就來(lái)獲取一下網(wǎng)站的cookie
例子:
#coding=utf-8
import cookielib
import urllib2
mycookie = cookielib.CookieJar() #聲明一個(gè)CookieJar的類(lèi)對象保存cookie(注意CookieJar的大小寫(xiě)問(wèn)題)
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2庫中的HTTPCookieProcessor來(lái)聲明一個(gè)處理cookie的處理器
opener = urllib2.build_opener(handler) #利用handler來(lái)構造opener,opener的用法和urlopen()類(lèi)似
response = opener.open("http://www.baidu.com") #opener返回的一個(gè)應答對象response
for item in my.cookie:
print"name="+item.name
print"value="+item.value
結果:
name=BAIDUID
value=73BD718962A6EA0DAD4CB9578A08FDD0:FG=1
name=BIDUPSID
value=73BD718962A6EA0DAD4CB9578A08FDD0
name=H_PS_PSSID
value=1450_19035_21122_17001_21454_21409_21394_21377_21526_21189_21398
name=PSTM
value=1478834132
name=BDSVRTM
value=0
name=BD_HOME
value=0
這樣我們就得到了一個(gè)最簡(jiǎn)單的cookie。
2、將cookie保存到文件
上面我們得到了cookie,下面我們學(xué)習怎么保存cookie。在這里我們使用它的泛型MozillaCookieJar來(lái)實(shí)現Cookie的保存
例子:
#coding=utf-8
import cookielib
import urllib2
mycookie = cookielib.MozillaCookieJar() #聲明一個(gè)MozillaCookieJar的類(lèi)對象保存cookie(注意MozillaCookieJar的大小寫(xiě)問(wèn)題)
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2庫中的HTTPCookieProcessor來(lái)聲明一個(gè)處理cookie的處理器
opener = urllib2.build_opener(handler) #利用handler來(lái)構造opener,opener的用法和urlopen()類(lèi)似
response = opener.open("http://www.baidu.com") #opener返回的一個(gè)應答對象response
for item in mycookie:
print"name="+item.name
print"value="+item.value
filename='mycookie.txt'#設定保存的文件名
mycookie.save(filename,ignore_discard=True, ignore_expires=True)
將里面的事例簡(jiǎn)單變型就可以得到本例,使用了CookieJar的泛型MozillaCookiJar,為什么呢?我們將MozillaCookiJar換成CookieJar試試,下面一張圖你能夠明白:
CookieJar是沒(méi)有保存save屬性的~
save()這個(gè)方式中:ignore_discard的意思是雖然cookies將被遺棄也將它保存出來(lái),ignore_expires的意思是假如在該文件中cookies早已存在,則覆蓋原文件寫(xiě)入,在這里,我們將這兩個(gè)全部設置為T(mén)rue。運行以后,cookies將被保存到cookie.txt文件中,我們查看一下內容:
這樣我們就成功保存了我們想要的cookie
3、從文件中獲取cookie并訪(fǎng)問(wèn) 查看全部
Cookie,指個(gè)別網(wǎng)站為了分辨用戶(hù)身分、進(jìn)行session跟蹤而存儲在用戶(hù)本地終端上的數據(通常經(jīng)過(guò)加密)。
舉個(gè)事例,某些網(wǎng)站是須要登陸后就能得到你想要的信息的,不登錄只能是旅客模式,那么我們可以借助Urllib2庫保存我們曾經(jīng)登陸過(guò)的Cookie,之后載入cookie獲取我們想要的頁(yè)面,然后再進(jìn)行抓取。理解cookie主要是為我們快捷模擬登陸抓取目標網(wǎng)頁(yè)作出打算。
我之前的貼子中使用過(guò)urlopen()這個(gè)函數來(lái)打開(kāi)網(wǎng)頁(yè)進(jìn)行抓取,這僅僅只是一個(gè)簡(jiǎn)單的Python網(wǎng)頁(yè)打開(kāi)器,其參數也僅有urlopen(url,data,timeout),這三個(gè)參數對于我們獲取目標網(wǎng)頁(yè)的cookie是遠遠不夠的。這時(shí)候我們就要借助到另外一種Opener——CookieJar。
cookielib也是Python進(jìn)行爬蟲(chóng)的一個(gè)重要模塊python爬蟲(chóng)模擬登錄python爬蟲(chóng)模擬登錄,他能與urllib2互相結合一起爬取想要的內容。該模塊的CookieJar類(lèi)的對象可以捕獲cookie并在后續聯(lián)接懇求時(shí)重新發(fā)送,這樣就可以實(shí)現我們所須要的模擬登陸功能。
這里非常說(shuō)明一下,cookielib是在py2.7中自帶的模塊,無(wú)需重新安裝,想要查看其自帶模塊可以查看Python目錄下的Lib文件夾,里面有所有安裝的模塊。我一開(kāi)始沒(méi)想起來(lái),在pycharm中居然沒(méi)有搜到cookielib,使用了快捷安裝也報錯:Couldn't find index page for 'Cookielib' (maybe misspelled?)

之后才想起來(lái)是不是自帶的就有,沒(méi)想到去lib文件夾一看還真有,白白浪費半個(gè)小時(shí)各類(lèi)瞎折騰~~
下面我們就來(lái)介紹一下這個(gè)模塊,該模塊主要的對象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
它們的關(guān)系:CookieJar —-派生—->FileCookieJar —-派生—–>MozillaCookieJar和LWPCookieJar 主要用法,我們下邊也會(huì )提到。urllib2.urlopen()函數不支持驗證、cookie或則其它HTTP中級功能。要支持這種功能,必須使用build_opener()(可以用于使python程序模擬瀏覽器進(jìn)行訪(fǎng)問(wèn),作用你懂得~)函數創(chuàng )建自定義Opener對象。
1、首先我們就來(lái)獲取一下網(wǎng)站的cookie
例子:
#coding=utf-8
import cookielib
import urllib2
mycookie = cookielib.CookieJar() #聲明一個(gè)CookieJar的類(lèi)對象保存cookie(注意CookieJar的大小寫(xiě)問(wèn)題)
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2庫中的HTTPCookieProcessor來(lái)聲明一個(gè)處理cookie的處理器
opener = urllib2.build_opener(handler) #利用handler來(lái)構造opener,opener的用法和urlopen()類(lèi)似
response = opener.open("http://www.baidu.com") #opener返回的一個(gè)應答對象response
for item in my.cookie:
print"name="+item.name
print"value="+item.value
結果:
name=BAIDUID
value=73BD718962A6EA0DAD4CB9578A08FDD0:FG=1
name=BIDUPSID
value=73BD718962A6EA0DAD4CB9578A08FDD0
name=H_PS_PSSID
value=1450_19035_21122_17001_21454_21409_21394_21377_21526_21189_21398
name=PSTM
value=1478834132
name=BDSVRTM
value=0
name=BD_HOME
value=0
這樣我們就得到了一個(gè)最簡(jiǎn)單的cookie。
2、將cookie保存到文件
上面我們得到了cookie,下面我們學(xué)習怎么保存cookie。在這里我們使用它的泛型MozillaCookieJar來(lái)實(shí)現Cookie的保存
例子:
#coding=utf-8
import cookielib
import urllib2
mycookie = cookielib.MozillaCookieJar() #聲明一個(gè)MozillaCookieJar的類(lèi)對象保存cookie(注意MozillaCookieJar的大小寫(xiě)問(wèn)題)
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2庫中的HTTPCookieProcessor來(lái)聲明一個(gè)處理cookie的處理器
opener = urllib2.build_opener(handler) #利用handler來(lái)構造opener,opener的用法和urlopen()類(lèi)似
response = opener.open("http://www.baidu.com") #opener返回的一個(gè)應答對象response
for item in mycookie:
print"name="+item.name
print"value="+item.value
filename='mycookie.txt'#設定保存的文件名
mycookie.save(filename,ignore_discard=True, ignore_expires=True)
將里面的事例簡(jiǎn)單變型就可以得到本例,使用了CookieJar的泛型MozillaCookiJar,為什么呢?我們將MozillaCookiJar換成CookieJar試試,下面一張圖你能夠明白:

CookieJar是沒(méi)有保存save屬性的~
save()這個(gè)方式中:ignore_discard的意思是雖然cookies將被遺棄也將它保存出來(lái),ignore_expires的意思是假如在該文件中cookies早已存在,則覆蓋原文件寫(xiě)入,在這里,我們將這兩個(gè)全部設置為T(mén)rue。運行以后,cookies將被保存到cookie.txt文件中,我們查看一下內容:

這樣我們就成功保存了我們想要的cookie
3、從文件中獲取cookie并訪(fǎng)問(wèn)
從python基礎到爬蟲(chóng)的書(shū)有哪些值得推薦
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 498 次瀏覽 ? 2020-07-04 08:00
第一個(gè)
個(gè)人覺(jué)得《Python學(xué)習手冊:第3版》是學(xué)習語(yǔ)言基礎比較好的書(shū)了.
《Python學(xué)習手冊(第3版)》講述了:Python可移植、功能強悍、易于使用,是編撰獨立應用程序和腳本應用程序的理想選擇。無(wú)論你是剛接觸編程或則剛接觸Python,通過(guò)學(xué)習《Python學(xué)習手冊(第3版)》,你可以迅速高效地精通核心Python語(yǔ)言基礎。讀完《Python學(xué)習手冊(第3版)》,你會(huì )對這門(mén)語(yǔ)言有足夠的了解,從而可以在你所從事的任何應用領(lǐng)域中使用它。
《Python學(xué)習手冊(第3版)》是作者依據過(guò)去10年用于教學(xué)而廣為人知的培訓課程的材料編撰而成的。除了有許多詳盡說(shuō)明和每章小結之外,每章還包括一個(gè)頭腦風(fēng)暴:這是《Python學(xué)習手冊(第3版)》獨特的一部分,配合以實(shí)用的練習題和復習題,讓讀者練習新學(xué)的方法并測試自己的理解程度。
《Python學(xué)習手冊(第3版)》包括:
類(lèi)型和操作——深入討論Python主要的外置對象類(lèi)型:數字、列表和字典等。
語(yǔ)句和句型——在Python中輸入代碼來(lái)構建并處理對象,以及Python通常的句型模型。
函數——Python基本的面向過(guò)程工具,用于組織代碼和重用。
模塊——封裝句子、函數以及其他工具,從而可以組織成較大的組件。
類(lèi)和OOP——Python可選的面向對象編程工具,可用于組織程序代碼因而實(shí)現訂制和重用。
異常和工具——異常處理模型和句子,并介紹編撰更大程序的開(kāi)發(fā)工具。
討論Python 3.0。
《Python學(xué)習手冊(第3版)》讓你對Python語(yǔ)言有深入而完整的了解,從而幫助你理解今后碰到的任何Python應用程序實(shí)例。如果你打算探求Google和YouTube為何選中了Python,《Python學(xué)習手冊(第3版)》就是你入門(mén)的最佳手冊。
第二個(gè)
《Python基礎教程(第2版·修訂版)》也是精典的Python入門(mén)教程,層次鮮明,結構嚴謹,內容詳實(shí),特別是最后幾章,作者將上面述說(shuō)的內容應用到10個(gè)引人入勝的項目中,并以模板的方式介紹了項目的開(kāi)發(fā)過(guò)程,手把手院長(cháng)Python開(kāi)發(fā),讓讀者從項目中展現Python的真正魅力。這本書(shū)既適宜初學(xué)者筑牢基礎,又能幫助Python程序員提高技能,即使是Python方面的技術(shù)專(zhuān)家,也能從書(shū)里找到耳目一新的內容。
第三個(gè)
《“笨辦法”學(xué)Python(第3版)》是一本Python入門(mén)書(shū)籍,適合對計算機了解不多,沒(méi)有學(xué)過(guò)編程,但對編程感興趣的初學(xué)者使用。這本書(shū)結構十分簡(jiǎn)單,其中覆蓋了輸入/輸出、變量和函數三個(gè)主題,以及一些比較中級的話(huà)題,如條件判定、循環(huán)、類(lèi)和對象、代碼測試及項目的實(shí)現等。每一章的格式基本相同,以代碼習題開(kāi)始,按照說(shuō)明編撰代碼,運行并檢測結果,然后再做附加練習。這本書(shū)以習題的方法引導讀者一步一步學(xué)習編程,從簡(jiǎn)單的復印仍然講授到完整項目的實(shí)現,讓初學(xué)者從基礎的編程技術(shù)入手,最終體驗到軟件開(kāi)發(fā)的基本過(guò)程。
【大牛評價(jià)】hardway(笨辦法)比較適宜起步編程,作為Python的入門(mén)挺不錯。
第四個(gè)
在這里給你們推薦最后一本《集體智慧編程》
本書(shū)以機器學(xué)習與估算統計為主題背景,專(zhuān)門(mén)述說(shuō)怎么挖掘和剖析Web上的數據和資源,如何剖析用戶(hù)體驗、市場(chǎng)營(yíng)銷(xiāo)、個(gè)人品位等眾多信息,并得出有用的推論python爬蟲(chóng)數據書(shū)籍,通過(guò)復雜的算法來(lái)從Web網(wǎng)站獲取、收集并剖析用戶(hù)的數據和反饋信息,以便創(chuàng )造新的用戶(hù)價(jià)值和商業(yè)價(jià)值。
全書(shū)內容詳實(shí),包括協(xié)作過(guò)濾技術(shù)(實(shí)現關(guān)聯(lián)產(chǎn)品推薦功能)、集群數據剖析(在大規模數據集中開(kāi)掘相像的數據子集)、搜索引擎核心技術(shù)(爬蟲(chóng)、索引、查詢(xún)引擎、PageRank算法等)、搜索海量信息并進(jìn)行剖析統計得出結論的優(yōu)化算法、貝葉斯過(guò)濾技術(shù)(垃圾郵件過(guò)濾、文本過(guò)濾)、用決策樹(shù)技術(shù)實(shí)現預測和決策建模功能、社交網(wǎng)絡(luò )的信息匹配技術(shù)、機器學(xué)習和人工智能應用等。
本書(shū)是Web開(kāi)發(fā)者、架構師、應用工程師等的極佳選擇。
“太棒了!對于初學(xué)這種算法的開(kāi)發(fā)者而言,我想不出有比這本書(shū)更好的選擇了,而對于象我這樣學(xué)過(guò)Al的道友而言,我也想不出還有什么更好的辦法才能使自己重溫這種知識的細節?!?br /> ——Dan Russell,資深技術(shù)總監,Google
“Toby的這本書(shū)十分成功地將機器學(xué)習算法這一復雜的議程分拆成了一個(gè)個(gè)既實(shí)用又易懂的事例,我們可以直接借助那些反例來(lái)剖析當前網(wǎng)路上的社會(huì )化交互作用。假如我早三年讀過(guò)這本書(shū),就會(huì )省去許多寶貴的時(shí)間python爬蟲(chóng)數據書(shū)籍,也不至于走那么多的彎路了?!?br /> ——Tim Wolters,CTO,Collective Intellect
第五個(gè)
其實(shí)我認為很多人也在看《Python核心編程:第2版》.在我自己看來(lái),我并不喜歡這本書(shū).
這本書(shū)的原書(shū)的勘誤表就有夠長(cháng)的,翻譯時(shí)卻幾乎沒(méi)有參考勘誤表,把原書(shū)的所有低級錯誤都搬進(jìn)去了。這本書(shū)的原書(shū)質(zhì)量也并不好,書(shū)的結構組織并不合理,不適宜初學(xué)者閱讀。有人說(shuō),這本書(shū)適宜進(jìn)階閱讀,我認為也不盡然。這本書(shū)好多地方都寫(xiě)的欲言又止的,看得人很郁悶。 查看全部
于我個(gè)人而言,我很喜歡2113Python,當然我也5261有很多的理由推薦你去學(xué)python.我只4102說(shuō)兩點(diǎn).一是簡(jiǎn)單,二是寫(xiě)python工資高1653.我感覺(jué)這倆理由就夠了,對不對.買(mǎi)本書(shū),裝上pycharm,把書(shū)里面的事例習題都敲一遍.再用flask,web.py等框架搭個(gè)小網(wǎng)站.. 完美...(小伙伴們有問(wèn)到該學(xué)python2.7還是3.X,那我的答案是:目前大多數實(shí)際開(kāi)發(fā),都是用2.7的,因為實(shí)際項目開(kāi)發(fā)有很多依賴(lài)的包,都只支持到2.7,你用3.X干不了活.那你能怎樣辦.所以不需要苦惱.等3.X普及,你寫(xiě)的2.7代碼,都可以無(wú)痛移植,妥妥的不用害怕.)
第一個(gè)
個(gè)人覺(jué)得《Python學(xué)習手冊:第3版》是學(xué)習語(yǔ)言基礎比較好的書(shū)了.
《Python學(xué)習手冊(第3版)》講述了:Python可移植、功能強悍、易于使用,是編撰獨立應用程序和腳本應用程序的理想選擇。無(wú)論你是剛接觸編程或則剛接觸Python,通過(guò)學(xué)習《Python學(xué)習手冊(第3版)》,你可以迅速高效地精通核心Python語(yǔ)言基礎。讀完《Python學(xué)習手冊(第3版)》,你會(huì )對這門(mén)語(yǔ)言有足夠的了解,從而可以在你所從事的任何應用領(lǐng)域中使用它。
《Python學(xué)習手冊(第3版)》是作者依據過(guò)去10年用于教學(xué)而廣為人知的培訓課程的材料編撰而成的。除了有許多詳盡說(shuō)明和每章小結之外,每章還包括一個(gè)頭腦風(fēng)暴:這是《Python學(xué)習手冊(第3版)》獨特的一部分,配合以實(shí)用的練習題和復習題,讓讀者練習新學(xué)的方法并測試自己的理解程度。
《Python學(xué)習手冊(第3版)》包括:
類(lèi)型和操作——深入討論Python主要的外置對象類(lèi)型:數字、列表和字典等。
語(yǔ)句和句型——在Python中輸入代碼來(lái)構建并處理對象,以及Python通常的句型模型。
函數——Python基本的面向過(guò)程工具,用于組織代碼和重用。
模塊——封裝句子、函數以及其他工具,從而可以組織成較大的組件。
類(lèi)和OOP——Python可選的面向對象編程工具,可用于組織程序代碼因而實(shí)現訂制和重用。
異常和工具——異常處理模型和句子,并介紹編撰更大程序的開(kāi)發(fā)工具。
討論Python 3.0。
《Python學(xué)習手冊(第3版)》讓你對Python語(yǔ)言有深入而完整的了解,從而幫助你理解今后碰到的任何Python應用程序實(shí)例。如果你打算探求Google和YouTube為何選中了Python,《Python學(xué)習手冊(第3版)》就是你入門(mén)的最佳手冊。
第二個(gè)
《Python基礎教程(第2版·修訂版)》也是精典的Python入門(mén)教程,層次鮮明,結構嚴謹,內容詳實(shí),特別是最后幾章,作者將上面述說(shuō)的內容應用到10個(gè)引人入勝的項目中,并以模板的方式介紹了項目的開(kāi)發(fā)過(guò)程,手把手院長(cháng)Python開(kāi)發(fā),讓讀者從項目中展現Python的真正魅力。這本書(shū)既適宜初學(xué)者筑牢基礎,又能幫助Python程序員提高技能,即使是Python方面的技術(shù)專(zhuān)家,也能從書(shū)里找到耳目一新的內容。
第三個(gè)
《“笨辦法”學(xué)Python(第3版)》是一本Python入門(mén)書(shū)籍,適合對計算機了解不多,沒(méi)有學(xué)過(guò)編程,但對編程感興趣的初學(xué)者使用。這本書(shū)結構十分簡(jiǎn)單,其中覆蓋了輸入/輸出、變量和函數三個(gè)主題,以及一些比較中級的話(huà)題,如條件判定、循環(huán)、類(lèi)和對象、代碼測試及項目的實(shí)現等。每一章的格式基本相同,以代碼習題開(kāi)始,按照說(shuō)明編撰代碼,運行并檢測結果,然后再做附加練習。這本書(shū)以習題的方法引導讀者一步一步學(xué)習編程,從簡(jiǎn)單的復印仍然講授到完整項目的實(shí)現,讓初學(xué)者從基礎的編程技術(shù)入手,最終體驗到軟件開(kāi)發(fā)的基本過(guò)程。
【大牛評價(jià)】hardway(笨辦法)比較適宜起步編程,作為Python的入門(mén)挺不錯。
第四個(gè)
在這里給你們推薦最后一本《集體智慧編程》
本書(shū)以機器學(xué)習與估算統計為主題背景,專(zhuān)門(mén)述說(shuō)怎么挖掘和剖析Web上的數據和資源,如何剖析用戶(hù)體驗、市場(chǎng)營(yíng)銷(xiāo)、個(gè)人品位等眾多信息,并得出有用的推論python爬蟲(chóng)數據書(shū)籍,通過(guò)復雜的算法來(lái)從Web網(wǎng)站獲取、收集并剖析用戶(hù)的數據和反饋信息,以便創(chuàng )造新的用戶(hù)價(jià)值和商業(yè)價(jià)值。
全書(shū)內容詳實(shí),包括協(xié)作過(guò)濾技術(shù)(實(shí)現關(guān)聯(lián)產(chǎn)品推薦功能)、集群數據剖析(在大規模數據集中開(kāi)掘相像的數據子集)、搜索引擎核心技術(shù)(爬蟲(chóng)、索引、查詢(xún)引擎、PageRank算法等)、搜索海量信息并進(jìn)行剖析統計得出結論的優(yōu)化算法、貝葉斯過(guò)濾技術(shù)(垃圾郵件過(guò)濾、文本過(guò)濾)、用決策樹(shù)技術(shù)實(shí)現預測和決策建模功能、社交網(wǎng)絡(luò )的信息匹配技術(shù)、機器學(xué)習和人工智能應用等。
本書(shū)是Web開(kāi)發(fā)者、架構師、應用工程師等的極佳選擇。
“太棒了!對于初學(xué)這種算法的開(kāi)發(fā)者而言,我想不出有比這本書(shū)更好的選擇了,而對于象我這樣學(xué)過(guò)Al的道友而言,我也想不出還有什么更好的辦法才能使自己重溫這種知識的細節?!?br /> ——Dan Russell,資深技術(shù)總監,Google
“Toby的這本書(shū)十分成功地將機器學(xué)習算法這一復雜的議程分拆成了一個(gè)個(gè)既實(shí)用又易懂的事例,我們可以直接借助那些反例來(lái)剖析當前網(wǎng)路上的社會(huì )化交互作用。假如我早三年讀過(guò)這本書(shū),就會(huì )省去許多寶貴的時(shí)間python爬蟲(chóng)數據書(shū)籍,也不至于走那么多的彎路了?!?br /> ——Tim Wolters,CTO,Collective Intellect
第五個(gè)
其實(shí)我認為很多人也在看《Python核心編程:第2版》.在我自己看來(lái),我并不喜歡這本書(shū).
這本書(shū)的原書(shū)的勘誤表就有夠長(cháng)的,翻譯時(shí)卻幾乎沒(méi)有參考勘誤表,把原書(shū)的所有低級錯誤都搬進(jìn)去了。這本書(shū)的原書(shū)質(zhì)量也并不好,書(shū)的結構組織并不合理,不適宜初學(xué)者閱讀。有人說(shuō),這本書(shū)適宜進(jìn)階閱讀,我認為也不盡然。這本書(shū)好多地方都寫(xiě)的欲言又止的,看得人很郁悶。
Python爬蟲(chóng)的用途
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 371 次瀏覽 ? 2020-06-30 08:01
Python 爬蟲(chóng)的用途 Python 爬蟲(chóng)是用 Python 編程語(yǔ)言實(shí)現的網(wǎng)路爬蟲(chóng),主要用于網(wǎng)路數據的抓取和處理,相比于其他語(yǔ)言,Python 是一門(mén)特別適宜開(kāi)發(fā)網(wǎng)路爬蟲(chóng)的編程語(yǔ)言,大量外置包,可以輕松實(shí)現網(wǎng)路爬蟲(chóng)功能。 Python 爬蟲(chóng)可以做的事情好多,如搜索引擎、采集數據、廣告過(guò)濾等,Python爬蟲(chóng)還可以用于數據剖析,在數據的抓取方面可以作用巨大! n Python 爬蟲(chóng)構架組成 1. URL 管理器:管理待爬取的 url 集合和已爬取的 url 集合,傳送待爬取的 url 給網(wǎng)頁(yè)下載器; 2. 網(wǎng)頁(yè)下載器:爬取 url 對應的網(wǎng)頁(yè),存儲成字符串,傳送給網(wǎng)頁(yè)解析器; 3. 網(wǎng)頁(yè)解析器:解析出有價(jià)值的數據,存儲出來(lái),同時(shí)補充 url 到 URL 管理器。 n Python 爬蟲(chóng)工作原理 Python 爬蟲(chóng)通過(guò) URL 管理器,判斷是否有待爬 URL,如果有待爬 URL,通過(guò)調度器進(jìn)行傳遞給下載器網(wǎng)絡(luò )爬蟲(chóng) 作用,下載 URL 內容,并通過(guò)調度器傳送給解析器,解析URL 內容,并將價(jià)值數據和新 URL 列表通過(guò)調度器傳遞給應用程序,并輸出價(jià)值信息的過(guò)程。 n Python 爬蟲(chóng)常用框架有: grab:網(wǎng)絡(luò )爬蟲(chóng)框架(基于 pycurl/multicur); scrapy:網(wǎng)絡(luò )爬蟲(chóng)框架(基于 twisted),不支持 Python3; pyspider:一個(gè)強悍的爬蟲(chóng)系統;cola:一個(gè)分布式爬蟲(chóng)框架; portia:基于 Scrapy 的可視化爬蟲(chóng); restkit:Python 的 HTTP 資源工具包。它可以使你輕松地訪(fǎng)問(wèn) HTTP 資源,并圍繞它完善的對象; demiurge:基于 PyQuery 的爬蟲(chóng)微框架。 Python 爬蟲(chóng)應用領(lǐng)域廣泛,在網(wǎng)絡(luò )爬蟲(chóng)領(lǐng)域處于霸主位置,Scrapy、Request、BeautifuSoap、urlib 等框架的應用,可以實(shí)現爬行自如的功能,只要您數據抓取看法網(wǎng)絡(luò )爬蟲(chóng) 作用,Python 爬蟲(chóng)均可實(shí)現!
Python爬蟲(chóng)實(shí)現百度圖片手動(dòng)下載
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 355 次瀏覽 ? 2020-06-29 08:01
分析需求剖析網(wǎng)頁(yè)源代碼,配合開(kāi)發(fā)者工具編撰正則表達式或則XPath表達式即將編撰 python 爬蟲(chóng)代碼 效果預覽
運行療效如下:
存放圖片的文件夾:
我們的爬蟲(chóng)起碼要實(shí)現兩個(gè)功能:一是搜索圖片,二是手動(dòng)下載。
搜索圖片:最容易想到的是爬百度圖片的結果,我們就上百度圖片瞧瞧:
隨便搜索幾個(gè)關(guān)鍵字,可以看見(jiàn)早已搜索下來(lái)好多張圖片:
我們點(diǎn)擊右鍵,查看源代碼:
打開(kāi)源代碼以后,發(fā)現一堆源代碼比較難找出我們想要的資源。
這個(gè)時(shí)侯,就要用開(kāi)發(fā)者工具!我們回到上一頁(yè)面,調出開(kāi)發(fā)者工具,我們須要用的是左上角那種東西:(鼠標追隨)。
然后選擇你想看源代碼的地方,就可以發(fā)覺(jué),下面的代碼市手動(dòng)定位到了相應的位置。如下圖:
我們復制這個(gè)地址,然后到昨天的一堆源代碼里搜索一下百度圖片 爬蟲(chóng),發(fā)現了它的位置,但是這兒我們又困惑了,這個(gè)圖片有這么多地址,到底用那個(gè)呢?我們可以看見(jiàn)有thumbURL,middleURL,hoverURL,objURL
通過(guò)剖析可以曉得,前面兩個(gè)是縮小的版本,hoverURL 是鍵盤(pán)聯(lián)通之后顯示的版本,objURL 應該是我們須要的,可以分別打開(kāi)這幾個(gè)網(wǎng)址瞧瞧,發(fā)現 objURL 的那種最大最清晰。
找到了圖片地址,接下來(lái)我們剖析源代碼??纯词遣皇撬械?objURL 都是圖片。
發(fā)現都是以.jpg格式結尾的圖片。
pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
這里我們用了2個(gè)包百度圖片 爬蟲(chóng),一個(gè)是正則,一個(gè)是 requests 包
#-*- coding:utf-8 -*-
import re
import requests
復制百度圖片搜索的鏈接,傳入 requests ,然后把正則表達式寫(xiě)好
url = 'https://image.baidu.com/search/index?tn=baiduimage&ie=utf-8&word=%E6%A0%97%E5%B1%B1%E6%9C%AA%E6%9D%A5%E5%A4%B4%E5%83%8F&ct=201326592&ic=0&lm=-1&width=&height=&v=index' html = requests.get(url).text pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
因為有很多張圖片,所以要循環(huán),我們復印出結果來(lái)瞧瞧,然后用 requests 獲取網(wǎng)址,由于有些圖片可能存在網(wǎng)址打不開(kāi)的情況,所以加了10秒超時(shí)控制。
pic_url = re.findall('"objURL":"(.*?)",',html,re.S) i = 1 for each in pic_url:
print each
try:
pic= requests.get(each, timeout=10)
except requests.exceptions.ConnectionError: print('【錯誤】當前圖片無(wú)法下載')
continue
接著(zhù)就是把圖片保存出來(lái),我們事先構建好一個(gè) images 目錄,把圖片都放進(jìn)去,命名的時(shí)侯,以數字命名。
dir = '../images/' + keyword + '_' + str(i) + '.jpg'
fp = open(dir, 'wb')
fp.write(pic.content)
fp.close()
i += 1
完整的代碼
# -*- coding:utf-8 -*-
import re
import requests
def dowmloadPic(html, keyword):
pic_url = re.findall('"objURL":"(.*?)",', html, re.S)
i = 1
print('找到關(guān)鍵詞:' + keyword + '的圖片,現在開(kāi)始下載圖片...')
for each in pic_url:
print('正在下載第' + str(i) + '張圖片,圖片地址:' + str(each))
try:
pic = requests.get(each, timeout=10)
except requests.exceptions.ConnectionError:
print('【錯誤】當前圖片無(wú)法下載')
continue
dir = '../images/' + keyword + '_' + str(i) + '.jpg'
fp = open(dir, 'wb')
fp.write(pic.content)
fp.close()
i += 1
if __name__ == '__main__':
word = input("Input key word: ")
url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + word + '&ct=201326592&v=flip'
result = requests.get(url)
dowmloadPic(result.text, word)
我們聽(tīng)到有的圖片沒(méi)顯示下來(lái),打開(kāi)網(wǎng)址看,發(fā)現確實(shí)沒(méi)了。
因為百度有些圖片它緩存到百度的服務(wù)器上,所以我們在百度上能夠看到它,但它的實(shí)際鏈接早已失效了。
enjoy 我們的第一個(gè)圖片下載爬蟲(chóng)吧!當然它除了能下載百度的圖片,依葫蘆畫(huà)瓢,你如今應當能做好多事情了,比如爬取頭像,爬天貓展示圖等等。
完整代碼已然放在Githut上 查看全部
制作一個(gè)爬蟲(chóng)通常分以下幾個(gè)步驟:
分析需求剖析網(wǎng)頁(yè)源代碼,配合開(kāi)發(fā)者工具編撰正則表達式或則XPath表達式即將編撰 python 爬蟲(chóng)代碼 效果預覽
運行療效如下:

存放圖片的文件夾:

我們的爬蟲(chóng)起碼要實(shí)現兩個(gè)功能:一是搜索圖片,二是手動(dòng)下載。
搜索圖片:最容易想到的是爬百度圖片的結果,我們就上百度圖片瞧瞧:

隨便搜索幾個(gè)關(guān)鍵字,可以看見(jiàn)早已搜索下來(lái)好多張圖片:

我們點(diǎn)擊右鍵,查看源代碼:

打開(kāi)源代碼以后,發(fā)現一堆源代碼比較難找出我們想要的資源。
這個(gè)時(shí)侯,就要用開(kāi)發(fā)者工具!我們回到上一頁(yè)面,調出開(kāi)發(fā)者工具,我們須要用的是左上角那種東西:(鼠標追隨)。

然后選擇你想看源代碼的地方,就可以發(fā)覺(jué),下面的代碼市手動(dòng)定位到了相應的位置。如下圖:


我們復制這個(gè)地址,然后到昨天的一堆源代碼里搜索一下百度圖片 爬蟲(chóng),發(fā)現了它的位置,但是這兒我們又困惑了,這個(gè)圖片有這么多地址,到底用那個(gè)呢?我們可以看見(jiàn)有thumbURL,middleURL,hoverURL,objURL

通過(guò)剖析可以曉得,前面兩個(gè)是縮小的版本,hoverURL 是鍵盤(pán)聯(lián)通之后顯示的版本,objURL 應該是我們須要的,可以分別打開(kāi)這幾個(gè)網(wǎng)址瞧瞧,發(fā)現 objURL 的那種最大最清晰。
找到了圖片地址,接下來(lái)我們剖析源代碼??纯词遣皇撬械?objURL 都是圖片。

發(fā)現都是以.jpg格式結尾的圖片。
pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
這里我們用了2個(gè)包百度圖片 爬蟲(chóng),一個(gè)是正則,一個(gè)是 requests 包
#-*- coding:utf-8 -*-
import re
import requests
復制百度圖片搜索的鏈接,傳入 requests ,然后把正則表達式寫(xiě)好

url = 'https://image.baidu.com/search/index?tn=baiduimage&ie=utf-8&word=%E6%A0%97%E5%B1%B1%E6%9C%AA%E6%9D%A5%E5%A4%B4%E5%83%8F&ct=201326592&ic=0&lm=-1&width=&height=&v=index' html = requests.get(url).text pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
因為有很多張圖片,所以要循環(huán),我們復印出結果來(lái)瞧瞧,然后用 requests 獲取網(wǎng)址,由于有些圖片可能存在網(wǎng)址打不開(kāi)的情況,所以加了10秒超時(shí)控制。
pic_url = re.findall('"objURL":"(.*?)",',html,re.S) i = 1 for each in pic_url:
print each
try:
pic= requests.get(each, timeout=10)
except requests.exceptions.ConnectionError: print('【錯誤】當前圖片無(wú)法下載')
continue
接著(zhù)就是把圖片保存出來(lái),我們事先構建好一個(gè) images 目錄,把圖片都放進(jìn)去,命名的時(shí)侯,以數字命名。
dir = '../images/' + keyword + '_' + str(i) + '.jpg'
fp = open(dir, 'wb')
fp.write(pic.content)
fp.close()
i += 1
完整的代碼
# -*- coding:utf-8 -*-
import re
import requests
def dowmloadPic(html, keyword):
pic_url = re.findall('"objURL":"(.*?)",', html, re.S)
i = 1
print('找到關(guān)鍵詞:' + keyword + '的圖片,現在開(kāi)始下載圖片...')
for each in pic_url:
print('正在下載第' + str(i) + '張圖片,圖片地址:' + str(each))
try:
pic = requests.get(each, timeout=10)
except requests.exceptions.ConnectionError:
print('【錯誤】當前圖片無(wú)法下載')
continue
dir = '../images/' + keyword + '_' + str(i) + '.jpg'
fp = open(dir, 'wb')
fp.write(pic.content)
fp.close()
i += 1
if __name__ == '__main__':
word = input("Input key word: ")
url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + word + '&ct=201326592&v=flip'
result = requests.get(url)
dowmloadPic(result.text, word)


我們聽(tīng)到有的圖片沒(méi)顯示下來(lái),打開(kāi)網(wǎng)址看,發(fā)現確實(shí)沒(méi)了。

因為百度有些圖片它緩存到百度的服務(wù)器上,所以我們在百度上能夠看到它,但它的實(shí)際鏈接早已失效了。
enjoy 我們的第一個(gè)圖片下載爬蟲(chóng)吧!當然它除了能下載百度的圖片,依葫蘆畫(huà)瓢,你如今應當能做好多事情了,比如爬取頭像,爬天貓展示圖等等。
完整代碼已然放在Githut上
2019最新30個(gè)小時(shí)搞定Python網(wǎng)絡(luò )爬蟲(chóng)(全套詳盡版) 零基礎入門(mén) 視頻教
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 385 次瀏覽 ? 2020-06-26 08:01
1、零基礎對Python網(wǎng)絡(luò )爬蟲(chóng)感興趣的開(kāi)發(fā)者
2、想從事Python網(wǎng)路爬蟲(chóng)工程師相關(guān)工作的開(kāi)發(fā)者
3、想學(xué)習Python網(wǎng)路爬蟲(chóng)作為技術(shù)儲備的開(kāi)發(fā)者
1、本課程的目標是將你們培養成Python網(wǎng)路爬蟲(chóng)工程師。薪資基本在13k-36k左右;
2、學(xué)完才能從零開(kāi)始把握Python爬蟲(chóng)項目的編撰,學(xué)會(huì )獨立開(kāi)發(fā)常見(jiàn)的爬蟲(chóng)項目;
3、學(xué)完能把握常見(jiàn)的反爬處理手段爬蟲(chóng)入門(mén)書(shū)籍,比如驗證碼處理、瀏覽器偽裝、代理IP池技術(shù)和用戶(hù)代理池技術(shù)等;
4、學(xué)完才能熟練使用正則表達式和XPath表達式進(jìn)行信息提??;
5、學(xué)完把握抓包技術(shù),掌握屏蔽的數據信息怎樣進(jìn)行提取,學(xué)會(huì )手動(dòng)模擬加載行為、進(jìn)行網(wǎng)址構造和手動(dòng)模擬Ajax異步懇求數據;
6、熟練把握urllib模塊,熟練使用Scrapy框架進(jìn)行爬蟲(chóng)項目開(kāi)發(fā)。
第一章節:Python 網(wǎng)絡(luò )爬蟲(chóng)之基礎
第二章節:Python網(wǎng)路爬蟲(chóng)之工作原理
第三章節:Python網(wǎng)路爬蟲(chóng)之正則表達式
第五章節:Python網(wǎng)路爬蟲(chóng)之用戶(hù)和IP代理池
第六章節 :Python網(wǎng)路爬蟲(chóng)之騰訊陌陌和視頻實(shí)戰
第七章節:Python網(wǎng)路爬蟲(chóng)之Scrapy框架
第八章節:Python網(wǎng)路爬蟲(chóng)之Scrapy與Urllib的整合
第九章節:Python網(wǎng)路爬蟲(chóng)之擴充學(xué)習
第十章節:Python網(wǎng)路爬蟲(chóng)之分布式爬蟲(chóng) 查看全部
這是一套完整的網(wǎng)路爬蟲(chóng)課程,通過(guò)該課程把握網(wǎng)路爬蟲(chóng)的相關(guān)知識,以便把握網(wǎng)路爬蟲(chóng)方方面面的知識,學(xué)完后勝任網(wǎng)路爬蟲(chóng)相關(guān)工作。 1、體系完整科學(xué),可以系統化學(xué)習; 2、課程通俗易懂爬蟲(chóng)入門(mén)書(shū)籍,可以使學(xué)員真正學(xué)會(huì ); 3、從零開(kāi)始教學(xué)直至深入,零基礎的朋友亦可以學(xué)習!
1、零基礎對Python網(wǎng)絡(luò )爬蟲(chóng)感興趣的開(kāi)發(fā)者
2、想從事Python網(wǎng)路爬蟲(chóng)工程師相關(guān)工作的開(kāi)發(fā)者
3、想學(xué)習Python網(wǎng)路爬蟲(chóng)作為技術(shù)儲備的開(kāi)發(fā)者
1、本課程的目標是將你們培養成Python網(wǎng)路爬蟲(chóng)工程師。薪資基本在13k-36k左右;
2、學(xué)完才能從零開(kāi)始把握Python爬蟲(chóng)項目的編撰,學(xué)會(huì )獨立開(kāi)發(fā)常見(jiàn)的爬蟲(chóng)項目;
3、學(xué)完能把握常見(jiàn)的反爬處理手段爬蟲(chóng)入門(mén)書(shū)籍,比如驗證碼處理、瀏覽器偽裝、代理IP池技術(shù)和用戶(hù)代理池技術(shù)等;
4、學(xué)完才能熟練使用正則表達式和XPath表達式進(jìn)行信息提??;
5、學(xué)完把握抓包技術(shù),掌握屏蔽的數據信息怎樣進(jìn)行提取,學(xué)會(huì )手動(dòng)模擬加載行為、進(jìn)行網(wǎng)址構造和手動(dòng)模擬Ajax異步懇求數據;
6、熟練把握urllib模塊,熟練使用Scrapy框架進(jìn)行爬蟲(chóng)項目開(kāi)發(fā)。
第一章節:Python 網(wǎng)絡(luò )爬蟲(chóng)之基礎
第二章節:Python網(wǎng)路爬蟲(chóng)之工作原理
第三章節:Python網(wǎng)路爬蟲(chóng)之正則表達式
第五章節:Python網(wǎng)路爬蟲(chóng)之用戶(hù)和IP代理池
第六章節 :Python網(wǎng)路爬蟲(chóng)之騰訊陌陌和視頻實(shí)戰
第七章節:Python網(wǎng)路爬蟲(chóng)之Scrapy框架
第八章節:Python網(wǎng)路爬蟲(chóng)之Scrapy與Urllib的整合
第九章節:Python網(wǎng)路爬蟲(chóng)之擴充學(xué)習
第十章節:Python網(wǎng)路爬蟲(chóng)之分布式爬蟲(chóng)
求大神們推薦python入門(mén)書(shū)籍(爬蟲(chóng)方面)?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 329 次瀏覽 ? 2020-06-25 08:03
題主的要求是Python入門(mén),而且是和爬蟲(chóng)相關(guān)的書(shū)籍,那么有一本書(shū)簡(jiǎn)直很適宜了,那就是《 Python for Informatics 》(中文翻譯叫《信息管理專(zhuān)業(yè)Python教程》),這本書(shū)除了是一本挺好的Python爬蟲(chóng)方面的入門(mén)書(shū),而且還有以這本書(shū)為教材的配套的Coursera課程。
這本書(shū)是美國密西根大學(xué)信息學(xué)院院長(cháng)為他的課程編撰的,是一本開(kāi)源書(shū),有人將他翻譯成了中文版爬蟲(chóng)入門(mén)書(shū)籍,書(shū)上有配套的習題和代碼,而且這種習題代碼都可以在網(wǎng)上獲取到,書(shū)本身并不厚,前面十章將的都是Python的基礎用法,后面幾張就是講解和Python爬蟲(chóng)有關(guān)的,像正則表達式,網(wǎng)絡(luò )編程(HTTP 協(xié)議), Web Service,數據庫與SQL句子,數據可視化,書(shū)中還仔細講解了用Python爬取Twiter上的用戶(hù)信息,和各類(lèi)解析html會(huì )用到的工具,如BeautifulSoup等,學(xué)完本書(shū),爬取個(gè)知乎哪些的都是小意思!本書(shū)中文版下載地址地址。
說(shuō)完了書(shū)在來(lái)說(shuō)說(shuō)配套的Coursera課程,是Coursera上太火的零基礎 Python 入門(mén) 專(zhuān)項課程,內容大致和書(shū)上的內容差不多,分成了6門(mén)課程,前三門(mén)課程講解Python句型,后面講Python爬蟲(chóng)的數據采集數據處理等爬蟲(chóng)入門(mén)書(shū)籍,并且有不少的習題,老師也十分特別有趣,,知乎上很早之前就有人介紹這門(mén)課程coursera上有什么值得學(xué)習的Python,數據剖析的課程? - 程剛的回答,本課的課程地址,并且這門(mén)課正好就是今天開(kāi)課(7月25號),學(xué)習課程假如不要證書(shū)的話(huà)也不用花錢(qián),貌似大部分配有英文字幕。 查看全部

題主的要求是Python入門(mén),而且是和爬蟲(chóng)相關(guān)的書(shū)籍,那么有一本書(shū)簡(jiǎn)直很適宜了,那就是《 Python for Informatics 》(中文翻譯叫《信息管理專(zhuān)業(yè)Python教程》),這本書(shū)除了是一本挺好的Python爬蟲(chóng)方面的入門(mén)書(shū),而且還有以這本書(shū)為教材的配套的Coursera課程。
這本書(shū)是美國密西根大學(xué)信息學(xué)院院長(cháng)為他的課程編撰的,是一本開(kāi)源書(shū),有人將他翻譯成了中文版爬蟲(chóng)入門(mén)書(shū)籍,書(shū)上有配套的習題和代碼,而且這種習題代碼都可以在網(wǎng)上獲取到,書(shū)本身并不厚,前面十章將的都是Python的基礎用法,后面幾張就是講解和Python爬蟲(chóng)有關(guān)的,像正則表達式,網(wǎng)絡(luò )編程(HTTP 協(xié)議), Web Service,數據庫與SQL句子,數據可視化,書(shū)中還仔細講解了用Python爬取Twiter上的用戶(hù)信息,和各類(lèi)解析html會(huì )用到的工具,如BeautifulSoup等,學(xué)完本書(shū),爬取個(gè)知乎哪些的都是小意思!本書(shū)中文版下載地址地址。
說(shuō)完了書(shū)在來(lái)說(shuō)說(shuō)配套的Coursera課程,是Coursera上太火的零基礎 Python 入門(mén) 專(zhuān)項課程,內容大致和書(shū)上的內容差不多,分成了6門(mén)課程,前三門(mén)課程講解Python句型,后面講Python爬蟲(chóng)的數據采集數據處理等爬蟲(chóng)入門(mén)書(shū)籍,并且有不少的習題,老師也十分特別有趣,,知乎上很早之前就有人介紹這門(mén)課程coursera上有什么值得學(xué)習的Python,數據剖析的課程? - 程剛的回答,本課的課程地址,并且這門(mén)課正好就是今天開(kāi)課(7月25號),學(xué)習課程假如不要證書(shū)的話(huà)也不用花錢(qián),貌似大部分配有英文字幕。
Python借助requests進(jìn)行模擬登陸
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 686 次瀏覽 ? 2020-06-25 08:00
Python3 模擬登陸并爬取表格數據!
本節主要內容有:通過(guò)requests庫模擬表單遞交通過(guò)pandas庫提取網(wǎng)頁(yè)表格上周五,大師兄發(fā)給我一個(gè)網(wǎng)址,哭哭啼啼地求我:“去!把這個(gè)網(wǎng)頁(yè)上所有年所有市所有小麥的數據全爬出來(lái),存到Access里!”我看他可憐,勉為其難地揮揮手說(shuō):“好嘞,馬上就開(kāi)始!”目標剖析Python學(xué)習交流群:1004391443大師兄給我的網(wǎng)址是這個(gè):
使用python模擬登陸
使用python模擬登陸Windows + Linux 均成功
Python模擬一個(gè)用戶(hù)登入系統
題目:模擬一個(gè)用戶(hù)登入系統,用戶(hù)輸入用戶(hù)名和密碼,輸入正確即可步入系統直接上代碼:#模擬一個(gè)用戶(hù)登入系統,用戶(hù)輸入用戶(hù)名和密碼,輸入正確即可步入系統d=['yao','123456']while 1:name =input("請輸入用戶(hù)名:")if name in d:breakelse:print("你輸入的用戶(hù)名不存在,請...
使用python模擬瀏覽器實(shí)現登錄
讓我們通過(guò)命令行模擬瀏覽器實(shí)現登錄操作,看看一個(gè)簡(jiǎn)單的登錄操作,具體是怎樣實(shí)現的
Python爬蟲(chóng)入門(mén)-表單遞交與模擬登陸
前言明天主要講兩個(gè)方面:利用Request庫進(jìn)行POST懇求表單交互cookie實(shí)現模擬登陸網(wǎng)站Requests實(shí)現POST懇求今requests可以以多種形式進(jìn)行post懇求,比如form表單方式、json方式等。今天主要以表單方式舉例:Reqeusts支持以form表單方式發(fā)送post懇求,只須要將懇求的參數構造成一個(gè)字典,然后傳給requests.post()...
Python模擬百度登陸
注:本文轉載,如有侵權,請告知將給以刪掉原文章鏈接:本來(lái)寫(xiě)這個(gè)玩意是想拿來(lái)手動(dòng)登入百度,然后按照帖吧內的的排行抓取會(huì )員頭像的,比如生成一個(gè)帖吧萬(wàn)人頭像圖或千人頭像圖。也算是練練手。完成后才發(fā)覺(jué)抓那種帖吧排行完全不需要登陸…也好,以后拿來(lái)做手動(dòng)一鍵簽到(經(jīng)常忘打卡),搶二樓哪些的,也...
任務(wù)自動(dòng)化_request 模擬登陸實(shí)戰
知識點(diǎn):request 帶密碼登入、selenium+headless Chrome、pandas、思路:request 爬蟲(chóng)模擬登陸,下載文檔,再用 pandas 進(jìn)行數據剖析
python實(shí)現模擬登陸
本文主要用python實(shí)現了對網(wǎng)站的模擬登陸。通過(guò)自己構造post數據來(lái)用Python實(shí)現登陸過(guò)程。當你要模擬登陸一個(gè)網(wǎng)站時(shí),首先要搞清楚網(wǎng)站的登陸處理細節(發(fā)了什么樣的數據,給誰(shuí)發(fā)等...)。我是通過(guò)HTTPfox來(lái)抓取http數據包來(lái)剖析該網(wǎng)站的登陸流程。同時(shí),我們還要剖析抓到的post包的數據結構和header,要按照遞交的數據結構和heander來(lái)構造自己的pos...
請問(wèn)寫(xiě)python爬蟲(chóng)怎樣用urllib或則requests模擬用戶(hù)登入
比如我在百度文庫下個(gè)教案,,我用urllib2或則request,我可以用urllib2.open(url)或者requests.get(url)來(lái)打開(kāi)頁(yè)面,但是不知道怎么寫(xiě)cookie的,就是使瀏覽器覺(jué)得你早已登陸了,請問(wèn)怎么寫(xiě)urllib或則requests.get呢?謝謝
requests 實(shí)現模擬登陸,獲取cookie
有個(gè)需求須要模擬登陸csdn獲取cookie,對csdn進(jìn)行后續系列操作,剛開(kāi)始使用的selenium,功能可以實(shí)現,但是效率有點(diǎn)低,后來(lái)改用的requests,遇到不少坑,今天來(lái)總結一下。首先找到csdn登陸的url,在故意輸錯密碼的情況下點(diǎn)擊登陸,檢查會(huì )發(fā)覺(jué)network中有一個(gè)dologin的響應,這就是要遞交到服務(wù)器的帳號密碼信息。點(diǎn)開(kāi)會(huì )發(fā)覺(jué)下圖所示:請求的url,請求方法p...
Python模擬登錄
最近想做一個(gè)可以模擬人工,對網(wǎng)站的內容進(jìn)行操作,比如手動(dòng)購物,自動(dòng)支付。朋友向我推薦用Python去寫(xiě)python爬蟲(chóng)模擬登錄,我也就開(kāi)始用Python??戳艘恍┐蠹s,用Python3 的requests去弄,感覺(jué)邏輯很簡(jiǎn)單。最主要的問(wèn)題是怎樣去剖析網(wǎng)站的邏輯,這很難。用了chrome f12 記錄網(wǎng)頁(yè)的操作,但是一點(diǎn)是,chrome不能全文查找,沒(méi)辦法搜索到諸如帳號密碼的傳送,cookie等問(wèn)題,手動(dòng)查找好煩。
Python模擬登陸的幾種方式
目錄方式一:直接使用已知的cookie訪(fǎng)問(wèn)技巧二:模擬登陸后再攜帶得到的cookie訪(fǎng)問(wèn)方式三:模擬登陸后用session保持登入狀態(tài)方式四:使用無(wú)頭瀏覽器訪(fǎng)問(wèn)正文方式一:直接使用已知的cookie訪(fǎng)問(wèn)特征:簡(jiǎn)單,但須要先在瀏覽器登陸原理:簡(jiǎn)單地說(shuō),cookie保存在發(fā)起懇求的客戶(hù)端中,服務(wù)器借助cookie來(lái)分辨不同的客戶(hù)端。因為htt...
用Python模擬登陸中學(xué)教務(wù)系統搶課
-- Illustrations by Vladislav Solovjov --作者:小蘇打博客地址:地址:github....
Python爬蟲(chóng)之模擬登陸總結
備注:python 2.7.9,32位有些網(wǎng)站需要登入后才會(huì )爬取所須要的信息python爬蟲(chóng)模擬登錄,此時(shí)可以設計爬蟲(chóng)進(jìn)行模擬登陸,原理是借助瀏覽器cookie。一、瀏覽器訪(fǎng)問(wèn)服務(wù)器的過(guò)程: (1)瀏覽器(客戶(hù)端)向Web服務(wù)器發(fā)出一個(gè)HTTP請求(Http request); (2)Web服務(wù)器收到懇求,發(fā)回響應信息(Http Response); (3)瀏覽器解析內容呈現
python模擬瀏覽器登陸
轉自:
python3下使用requests實(shí)現模擬用戶(hù)登入 —— 基礎篇(馬蜂窩)
python3下使用requests實(shí)現模擬用戶(hù)登入 —— 基礎篇(馬蜂窩)1. 了解cookie和session首先一定要先了解到cookie和session是哪些,這是前面理解網(wǎng)站交互,模擬用戶(hù)登入的基礎。1.1. 無(wú)狀態(tài)合同:Http如上圖所示,HTTP合同 是無(wú)狀態(tài)的合同,用戶(hù)瀏覽服務(wù)器上的內容,只須要發(fā)送頁(yè)面懇求,服務(wù)器返回內容。對于服務(wù)器來(lái)說(shuō),并不關(guān)心,也...
Visual C++技術(shù)內幕(第四版).part4.rar下載
一個(gè)十分清淅的PDF版的Visual C++技術(shù)黑幕(第四版),至于這本書(shū)究竟有多強就不用我介紹了吧!本書(shū)共分part1、part2、part3、part4 四部份相關(guān)下載鏈接:
sap施行顧問(wèn)寶典2下載
sap施行顧問(wèn)寶典一共3個(gè)壓縮包挺好的東西。相關(guān)下載鏈接:
Xilinx_ise使用教程(配合Modelsim使用)下載
這是我搜集的一個(gè)Xilinx_ISE6.1的教程,結合了MODELSIM的仿真功能,自己覺(jué)得講解的還可以,適合初學(xué)者入門(mén)使用,對其他人員也有一定的參考價(jià)值。相關(guān)下載鏈接:
相關(guān)熱詞c# 程序跳轉c#索引器定義、c#掃描軟件c# 文字復印左右反轉c#byte轉換成數字c# 音量調節組件c# wpf 界面c# 讀取證書(shū)文件的內容c# dgv 樹(shù)結構c#承繼 反序列化
我們是太有底線(xiàn)的 查看全部

Python3 模擬登陸并爬取表格數據!
本節主要內容有:通過(guò)requests庫模擬表單遞交通過(guò)pandas庫提取網(wǎng)頁(yè)表格上周五,大師兄發(fā)給我一個(gè)網(wǎng)址,哭哭啼啼地求我:“去!把這個(gè)網(wǎng)頁(yè)上所有年所有市所有小麥的數據全爬出來(lái),存到Access里!”我看他可憐,勉為其難地揮揮手說(shuō):“好嘞,馬上就開(kāi)始!”目標剖析Python學(xué)習交流群:1004391443大師兄給我的網(wǎng)址是這個(gè):
使用python模擬登陸
使用python模擬登陸Windows + Linux 均成功
Python模擬一個(gè)用戶(hù)登入系統
題目:模擬一個(gè)用戶(hù)登入系統,用戶(hù)輸入用戶(hù)名和密碼,輸入正確即可步入系統直接上代碼:#模擬一個(gè)用戶(hù)登入系統,用戶(hù)輸入用戶(hù)名和密碼,輸入正確即可步入系統d=['yao','123456']while 1:name =input("請輸入用戶(hù)名:")if name in d:breakelse:print("你輸入的用戶(hù)名不存在,請...

使用python模擬瀏覽器實(shí)現登錄
讓我們通過(guò)命令行模擬瀏覽器實(shí)現登錄操作,看看一個(gè)簡(jiǎn)單的登錄操作,具體是怎樣實(shí)現的
Python爬蟲(chóng)入門(mén)-表單遞交與模擬登陸
前言明天主要講兩個(gè)方面:利用Request庫進(jìn)行POST懇求表單交互cookie實(shí)現模擬登陸網(wǎng)站Requests實(shí)現POST懇求今requests可以以多種形式進(jìn)行post懇求,比如form表單方式、json方式等。今天主要以表單方式舉例:Reqeusts支持以form表單方式發(fā)送post懇求,只須要將懇求的參數構造成一個(gè)字典,然后傳給requests.post()...
Python模擬百度登陸
注:本文轉載,如有侵權,請告知將給以刪掉原文章鏈接:本來(lái)寫(xiě)這個(gè)玩意是想拿來(lái)手動(dòng)登入百度,然后按照帖吧內的的排行抓取會(huì )員頭像的,比如生成一個(gè)帖吧萬(wàn)人頭像圖或千人頭像圖。也算是練練手。完成后才發(fā)覺(jué)抓那種帖吧排行完全不需要登陸…也好,以后拿來(lái)做手動(dòng)一鍵簽到(經(jīng)常忘打卡),搶二樓哪些的,也...
任務(wù)自動(dòng)化_request 模擬登陸實(shí)戰
知識點(diǎn):request 帶密碼登入、selenium+headless Chrome、pandas、思路:request 爬蟲(chóng)模擬登陸,下載文檔,再用 pandas 進(jìn)行數據剖析
python實(shí)現模擬登陸
本文主要用python實(shí)現了對網(wǎng)站的模擬登陸。通過(guò)自己構造post數據來(lái)用Python實(shí)現登陸過(guò)程。當你要模擬登陸一個(gè)網(wǎng)站時(shí),首先要搞清楚網(wǎng)站的登陸處理細節(發(fā)了什么樣的數據,給誰(shuí)發(fā)等...)。我是通過(guò)HTTPfox來(lái)抓取http數據包來(lái)剖析該網(wǎng)站的登陸流程。同時(shí),我們還要剖析抓到的post包的數據結構和header,要按照遞交的數據結構和heander來(lái)構造自己的pos...

請問(wèn)寫(xiě)python爬蟲(chóng)怎樣用urllib或則requests模擬用戶(hù)登入
比如我在百度文庫下個(gè)教案,,我用urllib2或則request,我可以用urllib2.open(url)或者requests.get(url)來(lái)打開(kāi)頁(yè)面,但是不知道怎么寫(xiě)cookie的,就是使瀏覽器覺(jué)得你早已登陸了,請問(wèn)怎么寫(xiě)urllib或則requests.get呢?謝謝
requests 實(shí)現模擬登陸,獲取cookie
有個(gè)需求須要模擬登陸csdn獲取cookie,對csdn進(jìn)行后續系列操作,剛開(kāi)始使用的selenium,功能可以實(shí)現,但是效率有點(diǎn)低,后來(lái)改用的requests,遇到不少坑,今天來(lái)總結一下。首先找到csdn登陸的url,在故意輸錯密碼的情況下點(diǎn)擊登陸,檢查會(huì )發(fā)覺(jué)network中有一個(gè)dologin的響應,這就是要遞交到服務(wù)器的帳號密碼信息。點(diǎn)開(kāi)會(huì )發(fā)覺(jué)下圖所示:請求的url,請求方法p...
Python模擬登錄
最近想做一個(gè)可以模擬人工,對網(wǎng)站的內容進(jìn)行操作,比如手動(dòng)購物,自動(dòng)支付。朋友向我推薦用Python去寫(xiě)python爬蟲(chóng)模擬登錄,我也就開(kāi)始用Python??戳艘恍┐蠹s,用Python3 的requests去弄,感覺(jué)邏輯很簡(jiǎn)單。最主要的問(wèn)題是怎樣去剖析網(wǎng)站的邏輯,這很難。用了chrome f12 記錄網(wǎng)頁(yè)的操作,但是一點(diǎn)是,chrome不能全文查找,沒(méi)辦法搜索到諸如帳號密碼的傳送,cookie等問(wèn)題,手動(dòng)查找好煩。
Python模擬登陸的幾種方式
目錄方式一:直接使用已知的cookie訪(fǎng)問(wèn)技巧二:模擬登陸后再攜帶得到的cookie訪(fǎng)問(wèn)方式三:模擬登陸后用session保持登入狀態(tài)方式四:使用無(wú)頭瀏覽器訪(fǎng)問(wèn)正文方式一:直接使用已知的cookie訪(fǎng)問(wèn)特征:簡(jiǎn)單,但須要先在瀏覽器登陸原理:簡(jiǎn)單地說(shuō),cookie保存在發(fā)起懇求的客戶(hù)端中,服務(wù)器借助cookie來(lái)分辨不同的客戶(hù)端。因為htt...
用Python模擬登陸中學(xué)教務(wù)系統搶課
-- Illustrations by Vladislav Solovjov --作者:小蘇打博客地址:地址:github....
Python爬蟲(chóng)之模擬登陸總結
備注:python 2.7.9,32位有些網(wǎng)站需要登入后才會(huì )爬取所須要的信息python爬蟲(chóng)模擬登錄,此時(shí)可以設計爬蟲(chóng)進(jìn)行模擬登陸,原理是借助瀏覽器cookie。一、瀏覽器訪(fǎng)問(wèn)服務(wù)器的過(guò)程: (1)瀏覽器(客戶(hù)端)向Web服務(wù)器發(fā)出一個(gè)HTTP請求(Http request); (2)Web服務(wù)器收到懇求,發(fā)回響應信息(Http Response); (3)瀏覽器解析內容呈現
python模擬瀏覽器登陸
轉自:
python3下使用requests實(shí)現模擬用戶(hù)登入 —— 基礎篇(馬蜂窩)
python3下使用requests實(shí)現模擬用戶(hù)登入 —— 基礎篇(馬蜂窩)1. 了解cookie和session首先一定要先了解到cookie和session是哪些,這是前面理解網(wǎng)站交互,模擬用戶(hù)登入的基礎。1.1. 無(wú)狀態(tài)合同:Http如上圖所示,HTTP合同 是無(wú)狀態(tài)的合同,用戶(hù)瀏覽服務(wù)器上的內容,只須要發(fā)送頁(yè)面懇求,服務(wù)器返回內容。對于服務(wù)器來(lái)說(shuō),并不關(guān)心,也...
Visual C++技術(shù)內幕(第四版).part4.rar下載
一個(gè)十分清淅的PDF版的Visual C++技術(shù)黑幕(第四版),至于這本書(shū)究竟有多強就不用我介紹了吧!本書(shū)共分part1、part2、part3、part4 四部份相關(guān)下載鏈接:
sap施行顧問(wèn)寶典2下載
sap施行顧問(wèn)寶典一共3個(gè)壓縮包挺好的東西。相關(guān)下載鏈接:
Xilinx_ise使用教程(配合Modelsim使用)下載
這是我搜集的一個(gè)Xilinx_ISE6.1的教程,結合了MODELSIM的仿真功能,自己覺(jué)得講解的還可以,適合初學(xué)者入門(mén)使用,對其他人員也有一定的參考價(jià)值。相關(guān)下載鏈接:
相關(guān)熱詞c# 程序跳轉c#索引器定義、c#掃描軟件c# 文字復印左右反轉c#byte轉換成數字c# 音量調節組件c# wpf 界面c# 讀取證書(shū)文件的內容c# dgv 樹(shù)結構c#承繼 反序列化
我們是太有底線(xiàn)的
Python代理IP爬蟲(chóng)的菜鳥(niǎo)使用教程
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 387 次瀏覽 ? 2020-06-24 08:01
Python爬蟲(chóng)要經(jīng)歷爬蟲(chóng)、爬蟲(chóng)被限制、爬蟲(chóng)反限制的過(guò)程。當然后續還要網(wǎng)頁(yè)爬蟲(chóng)限制優(yōu)化爬蟲(chóng)代理,爬蟲(chóng)再反限制的一系列道高一尺魔高一丈的過(guò)程。爬蟲(chóng)的中級階段,添加headers和ip代理可以解決好多問(wèn)題。
本人自己在爬取豆瓣讀書(shū)的時(shí)侯,就以為爬取次數過(guò)多,直接被封了IP.后來(lái)就研究了代理IP的問(wèn)題.
(當時(shí)不知道哪些情況,差點(diǎn)態(tài)度就崩了...),下面給你們介紹一下我自己代理IP爬取數據的問(wèn)題,請你們強調不足之處.
問(wèn)題
這是我的IP被封了,一開(kāi)始好好的,我還以為是我的代碼問(wèn)題了
思路:
從網(wǎng)上查找了一些關(guān)于爬蟲(chóng)代理IP的資料,得到下邊的思路
爬取一些IP,過(guò)濾掉不可用. 在requests的懇求的proxies參數加入對應的IP. 繼續爬取. 收工 好吧,都是屁話(huà),理論你們都懂,上面直接上代碼...
思路有了,動(dòng)手上去.
運行環(huán)境
Python 3.7, Pycharm
這些須要你們直接去搭建好環(huán)境...
準備工作
爬取IP地址的網(wǎng)站(國內高匿代理) 校準IP地址的網(wǎng)站 你之前被封IP的py爬蟲(chóng)腳本...
上面的網(wǎng)址看個(gè)人的情況來(lái)選定
爬取IP的完整代碼
PS:簡(jiǎn)單的使用bs4獲取IP和端口號,沒(méi)有啥難度,里面降低了一個(gè)過(guò)濾不可用IP的邏輯
關(guān)鍵地方都有注釋了
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2018/11/22
# @Author : liangk
# @Site :
# @File : auto_archive_ios.py
# @Software: PyCharm
import requests
from bs4 import BeautifulSoup
import json
class GetIp(object):
"""抓取代理IP"""
def __init__(self):
"""初始化變量"""
self.url = 'http://www.xicidaili.com/nn/'
self.check_url = 'https://www.ip.cn/'
self.ip_list = []
@staticmethod
def get_html(url):
"""請求html頁(yè)面信息"""
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
}
try:
request = requests.get(url=url, headers=header)
request.encoding = 'utf-8'
html = request.text
return html
except Exception as e:
return ''
def get_available_ip(self, ip_address, ip_port):
"""檢測IP地址是否可用"""
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
}
ip_url_next = '://' + ip_address + ':' + ip_port
proxies = {'http': 'http' + ip_url_next, 'https': 'https' + ip_url_next}
try:
r = requests.get(self.check_url, headers=header, proxies=proxies, timeout=3)
html = r.text
except:
print('fail-%s' % ip_address)
else:
print('success-%s' % ip_address)
soup = BeautifulSoup(html, 'lxml')
div = soup.find(class_='well')
if div:
print(div.text)
ip_info = {'address': ip_address, 'port': ip_port}
self.ip_list.append(ip_info)
def main(self):
"""主方法"""
web_html = self.get_html(self.url)
soup = BeautifulSoup(web_html, 'lxml')
ip_list = soup.find(id='ip_list').find_all('tr')
for ip_info in ip_list:
td_list = ip_info.find_all('td')
if len(td_list) > 0:
ip_address = td_list[1].text
ip_port = td_list[2].text
# 檢測IP地址是否有效
self.get_available_ip(ip_address, ip_port)
# 寫(xiě)入有效文件
with open('ip.txt', 'w') as file:
json.dump(self.ip_list, file)
print(self.ip_list)
# 程序主入口
if __name__ == '__main__':
get_ip = GetIp()
get_ip.main()
使用方式完整代碼
PS: 主要是通過(guò)使用隨機的IP來(lái)爬取,根據request_status來(lái)判定這個(gè)IP是否可以用.
為什么要這樣判定?
主要是即使前面經(jīng)過(guò)了過(guò)濾,但是不代表在你爬取的時(shí)侯是可以用的,所以還是得多做一個(gè)判定.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2018/11/22
# @Author : liangk
# @Site :
# @File : get_douban_books.py
# @Software: PyCharm
from bs4 import BeautifulSoup
import datetime
import requests
import json
import random
ip_random = -1
article_tag_list = []
article_type_list = []
def get_html(url):
header = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
}
global ip_random
ip_rand, proxies = get_proxie(ip_random)
print(proxies)
try:
request = requests.get(url=url, headers=header, proxies=proxies, timeout=3)
except:
request_status = 500
else:
request_status = request.status_code
print(request_status)
while request_status != 200:
ip_random = -1
ip_rand, proxies = get_proxie(ip_random)
print(proxies)
try:
request = requests.get(url=url, headers=header, proxies=proxies, timeout=3)
except:
request_status = 500
else:
request_status = request.status_code
print(request_status)
ip_random = ip_rand
request.encoding = 'gbk'
html = request.content
print(html)
return html
def get_proxie(random_number):
with open('ip.txt', 'r') as file:
ip_list = json.load(file)
if random_number == -1:
random_number = random.randint(0, len(ip_list) - 1)
ip_info = ip_list[random_number]
ip_url_next = '://' + ip_info['address'] + ':' + ip_info['port']
proxies = {'http': 'http' + ip_url_next, 'https': 'https' + ip_url_next}
return random_number, proxies
# 程序主入口
if __name__ == '__main__':
"""只是爬取了書(shū)籍的第一頁(yè),按照評價(jià)排序"""
start_time = datetime.datetime.now()
url = 'https://book.douban.com/tag/?view=type&icn=index-sorttags-all'
base_url = 'https://book.douban.com/tag/'
html = get_html(url)
soup = BeautifulSoup(html, 'lxml')
article_tag_list = soup.find_all(class_='tag-content-wrapper')
tagCol_list = soup.find_all(class_='tagCol')
for table in tagCol_list:
""" 整理分析數據 """
sub_type_list = []
a = table.find_all('a')
for book_type in a:
sub_type_list.append(book_type.text)
article_type_list.append(sub_type_list)
for sub in article_type_list:
for sub1 in sub:
title = '==============' + sub1 + '=============='
print(title)
print(base_url + sub1 + '?start=0' + '&type=S')
with open('book.text', 'a', encoding='utf-8') as f:
f.write('\n' + title + '\n')
f.write(url + '\n')
for start in range(0, 2):
# (start * 20) 分頁(yè)是0 20 40 這樣的
# type=S是按評價(jià)排序
url = base_url + sub1 + '?start=%s' % (start * 20) + '&type=S'
html = get_html(url)
soup = BeautifulSoup(html, 'lxml')
li = soup.find_all(class_='subject-item')
for div in li:
info = div.find(class_='info').find('a')
img = div.find(class_='pic').find('img')
content = '書(shū)名:<%s>' % info['title'] + ' 書(shū)本圖片:' + img['src'] + '\n'
print(content)
with open('book.text', 'a', encoding='utf-8') as f:
f.write(content)
end_time = datetime.datetime.now()
print('耗時(shí): ', (end_time - start_time).seconds)
為什么選擇國外高匿代理!
總結
使用這樣簡(jiǎn)單的代理IP,基本上就可以應付在爬爬爬著(zhù)被封IP的情況了.而且沒(méi)有使用自己的IP,間接的保護?!?!
大家有其他的愈發(fā)快捷的方式,歡迎你們可以拿出來(lái)交流和討論爬蟲(chóng)代理,謝謝。 查看全部
前言
Python爬蟲(chóng)要經(jīng)歷爬蟲(chóng)、爬蟲(chóng)被限制、爬蟲(chóng)反限制的過(guò)程。當然后續還要網(wǎng)頁(yè)爬蟲(chóng)限制優(yōu)化爬蟲(chóng)代理,爬蟲(chóng)再反限制的一系列道高一尺魔高一丈的過(guò)程。爬蟲(chóng)的中級階段,添加headers和ip代理可以解決好多問(wèn)題。
本人自己在爬取豆瓣讀書(shū)的時(shí)侯,就以為爬取次數過(guò)多,直接被封了IP.后來(lái)就研究了代理IP的問(wèn)題.
(當時(shí)不知道哪些情況,差點(diǎn)態(tài)度就崩了...),下面給你們介紹一下我自己代理IP爬取數據的問(wèn)題,請你們強調不足之處.
問(wèn)題
這是我的IP被封了,一開(kāi)始好好的,我還以為是我的代碼問(wèn)題了

思路:
從網(wǎng)上查找了一些關(guān)于爬蟲(chóng)代理IP的資料,得到下邊的思路
爬取一些IP,過(guò)濾掉不可用. 在requests的懇求的proxies參數加入對應的IP. 繼續爬取. 收工 好吧,都是屁話(huà),理論你們都懂,上面直接上代碼...
思路有了,動(dòng)手上去.
運行環(huán)境
Python 3.7, Pycharm
這些須要你們直接去搭建好環(huán)境...
準備工作
爬取IP地址的網(wǎng)站(國內高匿代理) 校準IP地址的網(wǎng)站 你之前被封IP的py爬蟲(chóng)腳本...
上面的網(wǎng)址看個(gè)人的情況來(lái)選定
爬取IP的完整代碼
PS:簡(jiǎn)單的使用bs4獲取IP和端口號,沒(méi)有啥難度,里面降低了一個(gè)過(guò)濾不可用IP的邏輯
關(guān)鍵地方都有注釋了
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2018/11/22
# @Author : liangk
# @Site :
# @File : auto_archive_ios.py
# @Software: PyCharm
import requests
from bs4 import BeautifulSoup
import json
class GetIp(object):
"""抓取代理IP"""
def __init__(self):
"""初始化變量"""
self.url = 'http://www.xicidaili.com/nn/'
self.check_url = 'https://www.ip.cn/'
self.ip_list = []
@staticmethod
def get_html(url):
"""請求html頁(yè)面信息"""
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
}
try:
request = requests.get(url=url, headers=header)
request.encoding = 'utf-8'
html = request.text
return html
except Exception as e:
return ''
def get_available_ip(self, ip_address, ip_port):
"""檢測IP地址是否可用"""
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
}
ip_url_next = '://' + ip_address + ':' + ip_port
proxies = {'http': 'http' + ip_url_next, 'https': 'https' + ip_url_next}
try:
r = requests.get(self.check_url, headers=header, proxies=proxies, timeout=3)
html = r.text
except:
print('fail-%s' % ip_address)
else:
print('success-%s' % ip_address)
soup = BeautifulSoup(html, 'lxml')
div = soup.find(class_='well')
if div:
print(div.text)
ip_info = {'address': ip_address, 'port': ip_port}
self.ip_list.append(ip_info)
def main(self):
"""主方法"""
web_html = self.get_html(self.url)
soup = BeautifulSoup(web_html, 'lxml')
ip_list = soup.find(id='ip_list').find_all('tr')
for ip_info in ip_list:
td_list = ip_info.find_all('td')
if len(td_list) > 0:
ip_address = td_list[1].text
ip_port = td_list[2].text
# 檢測IP地址是否有效
self.get_available_ip(ip_address, ip_port)
# 寫(xiě)入有效文件
with open('ip.txt', 'w') as file:
json.dump(self.ip_list, file)
print(self.ip_list)
# 程序主入口
if __name__ == '__main__':
get_ip = GetIp()
get_ip.main()
使用方式完整代碼
PS: 主要是通過(guò)使用隨機的IP來(lái)爬取,根據request_status來(lái)判定這個(gè)IP是否可以用.
為什么要這樣判定?
主要是即使前面經(jīng)過(guò)了過(guò)濾,但是不代表在你爬取的時(shí)侯是可以用的,所以還是得多做一個(gè)判定.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2018/11/22
# @Author : liangk
# @Site :
# @File : get_douban_books.py
# @Software: PyCharm
from bs4 import BeautifulSoup
import datetime
import requests
import json
import random
ip_random = -1
article_tag_list = []
article_type_list = []
def get_html(url):
header = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
}
global ip_random
ip_rand, proxies = get_proxie(ip_random)
print(proxies)
try:
request = requests.get(url=url, headers=header, proxies=proxies, timeout=3)
except:
request_status = 500
else:
request_status = request.status_code
print(request_status)
while request_status != 200:
ip_random = -1
ip_rand, proxies = get_proxie(ip_random)
print(proxies)
try:
request = requests.get(url=url, headers=header, proxies=proxies, timeout=3)
except:
request_status = 500
else:
request_status = request.status_code
print(request_status)
ip_random = ip_rand
request.encoding = 'gbk'
html = request.content
print(html)
return html
def get_proxie(random_number):
with open('ip.txt', 'r') as file:
ip_list = json.load(file)
if random_number == -1:
random_number = random.randint(0, len(ip_list) - 1)
ip_info = ip_list[random_number]
ip_url_next = '://' + ip_info['address'] + ':' + ip_info['port']
proxies = {'http': 'http' + ip_url_next, 'https': 'https' + ip_url_next}
return random_number, proxies
# 程序主入口
if __name__ == '__main__':
"""只是爬取了書(shū)籍的第一頁(yè),按照評價(jià)排序"""
start_time = datetime.datetime.now()
url = 'https://book.douban.com/tag/?view=type&icn=index-sorttags-all'
base_url = 'https://book.douban.com/tag/'
html = get_html(url)
soup = BeautifulSoup(html, 'lxml')
article_tag_list = soup.find_all(class_='tag-content-wrapper')
tagCol_list = soup.find_all(class_='tagCol')
for table in tagCol_list:
""" 整理分析數據 """
sub_type_list = []
a = table.find_all('a')
for book_type in a:
sub_type_list.append(book_type.text)
article_type_list.append(sub_type_list)
for sub in article_type_list:
for sub1 in sub:
title = '==============' + sub1 + '=============='
print(title)
print(base_url + sub1 + '?start=0' + '&type=S')
with open('book.text', 'a', encoding='utf-8') as f:
f.write('\n' + title + '\n')
f.write(url + '\n')
for start in range(0, 2):
# (start * 20) 分頁(yè)是0 20 40 這樣的
# type=S是按評價(jià)排序
url = base_url + sub1 + '?start=%s' % (start * 20) + '&type=S'
html = get_html(url)
soup = BeautifulSoup(html, 'lxml')
li = soup.find_all(class_='subject-item')
for div in li:
info = div.find(class_='info').find('a')
img = div.find(class_='pic').find('img')
content = '書(shū)名:<%s>' % info['title'] + ' 書(shū)本圖片:' + img['src'] + '\n'
print(content)
with open('book.text', 'a', encoding='utf-8') as f:
f.write(content)
end_time = datetime.datetime.now()
print('耗時(shí): ', (end_time - start_time).seconds)
為什么選擇國外高匿代理!

總結
使用這樣簡(jiǎn)單的代理IP,基本上就可以應付在爬爬爬著(zhù)被封IP的情況了.而且沒(méi)有使用自己的IP,間接的保護?!?!
大家有其他的愈發(fā)快捷的方式,歡迎你們可以拿出來(lái)交流和討論爬蟲(chóng)代理,謝謝。
寫(xiě)爬蟲(chóng),用哪些編程語(yǔ)言好,python好嗎
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 435 次瀏覽 ? 2020-06-23 08:01
之前換了份工作,不再是單純的Web開(kāi)發(fā)了,要學(xué)習的東西真的很多的。入職的第1天,就讓我入手寫(xiě)個(gè)爬蟲(chóng),只是這個(gè)爬蟲(chóng)沒(méi)有采集幾個(gè)億數據量的業(yè)務(wù)場(chǎng)景。
于是,整理了下需求,簡(jiǎn)單的設計了下方案就草草開(kāi)始了。小B是我學(xué)院時(shí)侯的同事,那天這哥們約我喝水,想看下能夠順帶介紹幾個(gè)姑娘。酒過(guò)三巡,不勝酒力,于是便聊起了近來(lái)的工作。
當他知曉我居然在寫(xiě)爬蟲(chóng),便起了同情之心,覺(jué)得我懷才不遇。仿佛寫(xiě)爬蟲(chóng)是件太低級太low的技術(shù)活。在他那家公司,招進(jìn)來(lái)的實(shí)習生就多多少少會(huì )點(diǎn)爬蟲(chóng),什么nodejs、golang,哪個(gè)不是爬蟲(chóng)的好手。沒(méi)想到我結業(yè)多年,竟然淪落到做實(shí)習生的工作,可悲可泣。
接著(zhù)建議我轉入Java陣營(yíng),如果到他公司去,多多少少也能混個(gè)主任的職位。搞得自己只能一番苦笑。
不知道從何時(shí)起,程序員的世界流行起了鄙視鏈這玩意。什么寫(xiě)C語(yǔ)言的厭惡寫(xiě)C++,寫(xiě)C++的厭惡寫(xiě)Java的,最后鄙視鏈最高端是PHP。具體是如何的關(guān)系,就不再揣測了。
寫(xiě)爬蟲(chóng),用哪些編程語(yǔ)言好,python好嗎
然而,縱觀(guān)整個(gè)行業(yè),都說(shuō)Python火。具體有多火,看培訓機構的廣告就曉得了。在16年之前,Python還是1個(gè)若不見(jiàn)經(jīng)傳的詞組,之后各家培訓機構鋪天蓋地的廣告,什么大數據、自動(dòng)化運維全都跟Python扯上了關(guān)系。畢業(yè)學(xué)生工資更是達到了50-100W,還老是招不到人。
更有意思的是,學(xué)Python最容易上手的過(guò)程就是寫(xiě)爬蟲(chóng)。什么Scrapy、Pysider是必學(xué),HTML、Javascript是重點(diǎn),外帶幾個(gè)豆瓣、花瓣網(wǎng)的實(shí)戰案例,讓你一下子才能解決企業(yè)的剛需。
這樣說(shuō)來(lái),難怪連實(shí)習生也能跟你搶飯碗了,技術(shù)發(fā)展的很快,各種框架構建的結果是釋放人力,降低成本。
據我了解,Python的優(yōu)勢集中于數據剖析、信息安全那些領(lǐng)域。你可能聽(tīng)說(shuō)過(guò)Hadoop、Spark、Tensorflow這種高大上的名詞,但是對于數據取證、DLL注入等內容可能從無(wú)聽(tīng)聞。舉個(gè)簡(jiǎn)單的事例,在數據取證中,由于犯罪人員不配合檢測機關(guān)的工作,通過(guò)數據取證技術(shù)我們可以進(jìn)行一些信息的提取,從而輔助否認其犯罪記錄,如獲取系統密碼、瀏覽器中帳號及密碼。
聽(tīng)起來(lái)覺(jué)得很高大上的,但是假如我跟你說(shuō)其過(guò)程就是對sqlite3文件數據庫查詢(xún)一下SQL,不知道你會(huì )不會(huì )認為上述取證的事例頓時(shí)很low的。但是,當你不留神把陌陌消息的圖片刪除想尋回的時(shí)侯,或許你能在Python中找到對應的方案,而其他的語(yǔ)言還真沒(méi)發(fā)覺(jué)有合適的。
于是,我開(kāi)導他說(shuō),搞完這波爬蟲(chóng)騷操作,下一次就是數據剖析了,你看不有前進(jìn)了一步?
還數據剖析,你似乎想的很遠的。小B打斷了我的話(huà),你認為人家會(huì )使你搞數據剖析,沒(méi)有數據何來(lái)的剖析。況且,沒(méi)有哪家公司會(huì )笨到把所有數據都曝露在互聯(lián)網(wǎng)上。你能看到的只是那冰山的一角。即使你想深入進(jìn)去,沒(méi)有分布式技術(shù)支撐和幾十個(gè)億的數據業(yè)務(wù),你簡(jiǎn)歷上也不會(huì )有亮點(diǎn)。
然后,又聊到他公司近日招了個(gè)大數據的開(kāi)發(fā),薪資比他還要高出一大截,但是技術(shù)卻不咋地。我從小B的話(huà)里聽(tīng)出了一絲揶揄了。于是,又教唆我不要再搞哪些爬蟲(chóng)了,還是搞Spark才有未來(lái)。既不用害怕大深夜服務(wù)掛了,又不用害怕完不成采集數量。完全是實(shí)打實(shí)的數據,何樂(lè )而不為呢?
這話(huà)聽(tīng)得我都有點(diǎn)動(dòng)心了,沒(méi)有攀比就沒(méi)有傷害。但是一想到Java是加班加點(diǎn)工作,我還是打消了這個(gè)念頭。
我不知道該說(shuō)些哪些,只是認為時(shí)間過(guò)得太慢,是種熬煎。于是只能扯開(kāi)了話(huà)題,免得喝頓飯都艱難。
結語(yǔ)
技術(shù)沒(méi)有low不low,沒(méi)有爛的技術(shù),只有不會(huì )用的人。重要的是人家能給你多少錢(qián),你能弄成如何的結果。
這年頭會(huì )有多少公司樂(lè )意給實(shí)習生稅后1W+的起薪,而這一切都只是份養活自己的技能而已,別把面子很當回事。
寫(xiě)爬蟲(chóng),用哪些編程語(yǔ)言好,python好嗎,其實(shí)編程的路上只在于擅長(cháng),沒(méi)有所謂的行不行,如果不擅長(cháng),就是給您好用的編程語(yǔ)言也沒(méi)有療效,如果想要學(xué)編程,那就關(guān)注IT培訓網(wǎng)網(wǎng)絡(luò )爬蟲(chóng)用什么語(yǔ)言寫(xiě),讓我們一起走入編程的世界! 查看全部
用Python寫(xiě)爬蟲(chóng)就太low?你贊成嘛?為何不建議使用python寫(xiě)爬蟲(chóng)呢網(wǎng)絡(luò )爬蟲(chóng)用什么語(yǔ)言寫(xiě),是有哪些誘因嗎,難道用python寫(xiě)爬蟲(chóng)不好嗎?
之前換了份工作,不再是單純的Web開(kāi)發(fā)了,要學(xué)習的東西真的很多的。入職的第1天,就讓我入手寫(xiě)個(gè)爬蟲(chóng),只是這個(gè)爬蟲(chóng)沒(méi)有采集幾個(gè)億數據量的業(yè)務(wù)場(chǎng)景。
于是,整理了下需求,簡(jiǎn)單的設計了下方案就草草開(kāi)始了。小B是我學(xué)院時(shí)侯的同事,那天這哥們約我喝水,想看下能夠順帶介紹幾個(gè)姑娘。酒過(guò)三巡,不勝酒力,于是便聊起了近來(lái)的工作。
當他知曉我居然在寫(xiě)爬蟲(chóng),便起了同情之心,覺(jué)得我懷才不遇。仿佛寫(xiě)爬蟲(chóng)是件太低級太low的技術(shù)活。在他那家公司,招進(jìn)來(lái)的實(shí)習生就多多少少會(huì )點(diǎn)爬蟲(chóng),什么nodejs、golang,哪個(gè)不是爬蟲(chóng)的好手。沒(méi)想到我結業(yè)多年,竟然淪落到做實(shí)習生的工作,可悲可泣。
接著(zhù)建議我轉入Java陣營(yíng),如果到他公司去,多多少少也能混個(gè)主任的職位。搞得自己只能一番苦笑。
不知道從何時(shí)起,程序員的世界流行起了鄙視鏈這玩意。什么寫(xiě)C語(yǔ)言的厭惡寫(xiě)C++,寫(xiě)C++的厭惡寫(xiě)Java的,最后鄙視鏈最高端是PHP。具體是如何的關(guān)系,就不再揣測了。

寫(xiě)爬蟲(chóng),用哪些編程語(yǔ)言好,python好嗎
然而,縱觀(guān)整個(gè)行業(yè),都說(shuō)Python火。具體有多火,看培訓機構的廣告就曉得了。在16年之前,Python還是1個(gè)若不見(jiàn)經(jīng)傳的詞組,之后各家培訓機構鋪天蓋地的廣告,什么大數據、自動(dòng)化運維全都跟Python扯上了關(guān)系。畢業(yè)學(xué)生工資更是達到了50-100W,還老是招不到人。
更有意思的是,學(xué)Python最容易上手的過(guò)程就是寫(xiě)爬蟲(chóng)。什么Scrapy、Pysider是必學(xué),HTML、Javascript是重點(diǎn),外帶幾個(gè)豆瓣、花瓣網(wǎng)的實(shí)戰案例,讓你一下子才能解決企業(yè)的剛需。
這樣說(shuō)來(lái),難怪連實(shí)習生也能跟你搶飯碗了,技術(shù)發(fā)展的很快,各種框架構建的結果是釋放人力,降低成本。
據我了解,Python的優(yōu)勢集中于數據剖析、信息安全那些領(lǐng)域。你可能聽(tīng)說(shuō)過(guò)Hadoop、Spark、Tensorflow這種高大上的名詞,但是對于數據取證、DLL注入等內容可能從無(wú)聽(tīng)聞。舉個(gè)簡(jiǎn)單的事例,在數據取證中,由于犯罪人員不配合檢測機關(guān)的工作,通過(guò)數據取證技術(shù)我們可以進(jìn)行一些信息的提取,從而輔助否認其犯罪記錄,如獲取系統密碼、瀏覽器中帳號及密碼。
聽(tīng)起來(lái)覺(jué)得很高大上的,但是假如我跟你說(shuō)其過(guò)程就是對sqlite3文件數據庫查詢(xún)一下SQL,不知道你會(huì )不會(huì )認為上述取證的事例頓時(shí)很low的。但是,當你不留神把陌陌消息的圖片刪除想尋回的時(shí)侯,或許你能在Python中找到對應的方案,而其他的語(yǔ)言還真沒(méi)發(fā)覺(jué)有合適的。
于是,我開(kāi)導他說(shuō),搞完這波爬蟲(chóng)騷操作,下一次就是數據剖析了,你看不有前進(jìn)了一步?
還數據剖析,你似乎想的很遠的。小B打斷了我的話(huà),你認為人家會(huì )使你搞數據剖析,沒(méi)有數據何來(lái)的剖析。況且,沒(méi)有哪家公司會(huì )笨到把所有數據都曝露在互聯(lián)網(wǎng)上。你能看到的只是那冰山的一角。即使你想深入進(jìn)去,沒(méi)有分布式技術(shù)支撐和幾十個(gè)億的數據業(yè)務(wù),你簡(jiǎn)歷上也不會(huì )有亮點(diǎn)。
然后,又聊到他公司近日招了個(gè)大數據的開(kāi)發(fā),薪資比他還要高出一大截,但是技術(shù)卻不咋地。我從小B的話(huà)里聽(tīng)出了一絲揶揄了。于是,又教唆我不要再搞哪些爬蟲(chóng)了,還是搞Spark才有未來(lái)。既不用害怕大深夜服務(wù)掛了,又不用害怕完不成采集數量。完全是實(shí)打實(shí)的數據,何樂(lè )而不為呢?
這話(huà)聽(tīng)得我都有點(diǎn)動(dòng)心了,沒(méi)有攀比就沒(méi)有傷害。但是一想到Java是加班加點(diǎn)工作,我還是打消了這個(gè)念頭。
我不知道該說(shuō)些哪些,只是認為時(shí)間過(guò)得太慢,是種熬煎。于是只能扯開(kāi)了話(huà)題,免得喝頓飯都艱難。
結語(yǔ)
技術(shù)沒(méi)有low不low,沒(méi)有爛的技術(shù),只有不會(huì )用的人。重要的是人家能給你多少錢(qián),你能弄成如何的結果。
這年頭會(huì )有多少公司樂(lè )意給實(shí)習生稅后1W+的起薪,而這一切都只是份養活自己的技能而已,別把面子很當回事。
寫(xiě)爬蟲(chóng),用哪些編程語(yǔ)言好,python好嗎,其實(shí)編程的路上只在于擅長(cháng),沒(méi)有所謂的行不行,如果不擅長(cháng),就是給您好用的編程語(yǔ)言也沒(méi)有療效,如果想要學(xué)編程,那就關(guān)注IT培訓網(wǎng)網(wǎng)絡(luò )爬蟲(chóng)用什么語(yǔ)言寫(xiě),讓我們一起走入編程的世界!
三種 Python 網(wǎng)絡(luò )內容抓取工具與爬蟲(chóng)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 447 次瀏覽 ? 2020-06-23 08:01
在一個(gè)理想的世界里,你須要的所有數據都將以公開(kāi)而文檔完備的格式清晰地詮釋?zhuān)憧梢暂p松地下載并在任何你須要的地方使用。
然而,在真實(shí)世界里,數據是零亂的,極少被打包成你須要的樣子,要么常常是過(guò)期的。
你所須要的信息常常是埋藏在一個(gè)網(wǎng)站里。相比一些清晰地、有調養地呈現數據的網(wǎng)站,更多的網(wǎng)站則不是這樣的。爬取數據crawling、挖掘數據scraping、加工數據、整理數據那些是獲取整個(gè)網(wǎng)站結構來(lái)勾畫(huà)網(wǎng)站拓撲來(lái)搜集數據所必須的活動(dòng),這些可以是以網(wǎng)站的格式存儲的或則是存放在一個(gè)專(zhuān)有數據庫中。
也許在不久的將來(lái),你須要通過(guò)爬取和挖掘來(lái)獲得一些你須要的數據,當然你幾乎肯定須要進(jìn)行一點(diǎn)點(diǎn)的編程來(lái)正確的獲取。你要如何做取決于你自己,但是我發(fā)覺(jué) Python 社區是一個(gè)挺好的提供者,它提供了工具、框架以及文檔來(lái)幫助你從網(wǎng)站上獲取數據。
在我們進(jìn)行之前,這里有一個(gè)小小的懇求:在你做事情之前請思索,以及請耐心。抓取這件事情并不簡(jiǎn)單。不要把網(wǎng)站爬出來(lái)只是復制一遍,并其它人的工作當作是你自己的東西(當然,沒(méi)有許可)。要注意版權和許可,以及你所爬行的內容應用哪一個(gè)標準。尊重 robots.txt 文件。不要頻繁的針對一個(gè)網(wǎng)站,這將造成真實(shí)的訪(fǎng)問(wèn)者會(huì )碰到訪(fǎng)問(wèn)困難的問(wèn)題。
在知曉那些警告過(guò)后,這里有一些太棒的 Python 網(wǎng)站爬蟲(chóng)工具,你可以拿來(lái)獲得你須要的數據。
讓我們先從 pyspider 開(kāi)始介紹。這是一個(gè)帶有 web 界面的網(wǎng)路爬蟲(chóng),讓與讓之容易跟蹤多個(gè)爬蟲(chóng)。其具有擴展性,支持多個(gè)前端數據庫和消息隊列。它還具有一些便捷的特點(diǎn),從優(yōu)先級到再度訪(fǎng)問(wèn)抓取失敗的頁(yè)面linux 爬蟲(chóng)軟件,此外還有通過(guò)時(shí)間次序來(lái)爬取和其他的一些特點(diǎn)。Pyspider 同時(shí)支持 Python 2 和 Python 3。為了實(shí)現一個(gè)更快的爬取,你可以在分布式的環(huán)境下一次使用多個(gè)爬蟲(chóng)進(jìn)行爬取。
Pyspyder 的基本用法都有良好的 文檔說(shuō)明 ,包括簡(jiǎn)單的代碼片斷。你能通過(guò)查看一個(gè) 在線(xiàn)的樣例 來(lái)體驗用戶(hù)界面。它在 Apache 2 許可證下開(kāi)源,Pyspyder 仍然在 GitHub 上積極地開(kāi)發(fā)。
MechanicalSoup 是一個(gè)基于非常流行而異常多能的 HTML 解析庫 Beautiful Soup 建立的爬蟲(chóng)庫。如果你的爬蟲(chóng)須要相當的簡(jiǎn)單,但是又要求檢測一些選擇框或則輸入一些文字,而你又不想為這個(gè)任務(wù)單獨寫(xiě)一個(gè)爬蟲(chóng),那么這會(huì )是一個(gè)值得考慮的選擇。
MechanicalSoup 在 MIT 許可證下開(kāi)源。查看 GitHub 上該項目的 example.py 樣例文件來(lái)獲得更多的用法。不幸的是,到目前為止,這個(gè)項目還沒(méi)有一個(gè)挺好的文檔。
Scrapy 是一個(gè)有著(zhù)活躍社區支持的抓取框架,在那里你可以建造自己的抓取工具。除了爬取和解析工具,它能夠將它搜集的數據以 JSON 或者 CSV 之類(lèi)的格式輕松輸出,并儲存在一個(gè)你選擇的前端數據庫。它還有許多外置的任務(wù)擴充linux 爬蟲(chóng)軟件,例如 cookie 處理、代理誤導、限制爬取深度等等,同時(shí)還可以構建你自己附加的 API。
要了解 Scrapy,你可以查看網(wǎng)上的文檔或則是訪(fǎng)問(wèn)它眾多的社區資源,包括一個(gè) IRC 頻道、Reddit 子版塊以及關(guān)注她們的 StackOverflow 標簽。Scrapy 的代碼在 3 句版 BSD 許可證下開(kāi)源,你可以在 GitHub 上找到它們。
如果你完全不熟悉編程,Portia 提供了一個(gè)易用的可視化的界面。 則提供一個(gè)托管的版本。
這遠不是一個(gè)完整的列表,當然,如果你是一個(gè)編程專(zhuān)家,你可以選擇采取你自己的方式而不是使用這種框架中的一個(gè)?;蛘吣惆l(fā)覺(jué)一個(gè)用其他語(yǔ)言編撰的替代品。例如 Python 編程者可能更喜歡 Python 附帶的Selenium,它可以在不使用實(shí)際瀏覽器的情況下進(jìn)行爬取。如果你有喜歡的爬取和挖掘工具,請在下邊評論使我們曉得。
?。}圖:You as a Machine. Modified by Rikki Endsley. CC BY-SA 2.0)
via: /resources/python/web-scraper-crawler 查看全部
運用這種太棒的 Python 爬蟲(chóng)工具來(lái)獲取你須要的數據。
在一個(gè)理想的世界里,你須要的所有數據都將以公開(kāi)而文檔完備的格式清晰地詮釋?zhuān)憧梢暂p松地下載并在任何你須要的地方使用。
然而,在真實(shí)世界里,數據是零亂的,極少被打包成你須要的樣子,要么常常是過(guò)期的。
你所須要的信息常常是埋藏在一個(gè)網(wǎng)站里。相比一些清晰地、有調養地呈現數據的網(wǎng)站,更多的網(wǎng)站則不是這樣的。爬取數據crawling、挖掘數據scraping、加工數據、整理數據那些是獲取整個(gè)網(wǎng)站結構來(lái)勾畫(huà)網(wǎng)站拓撲來(lái)搜集數據所必須的活動(dòng),這些可以是以網(wǎng)站的格式存儲的或則是存放在一個(gè)專(zhuān)有數據庫中。
也許在不久的將來(lái),你須要通過(guò)爬取和挖掘來(lái)獲得一些你須要的數據,當然你幾乎肯定須要進(jìn)行一點(diǎn)點(diǎn)的編程來(lái)正確的獲取。你要如何做取決于你自己,但是我發(fā)覺(jué) Python 社區是一個(gè)挺好的提供者,它提供了工具、框架以及文檔來(lái)幫助你從網(wǎng)站上獲取數據。
在我們進(jìn)行之前,這里有一個(gè)小小的懇求:在你做事情之前請思索,以及請耐心。抓取這件事情并不簡(jiǎn)單。不要把網(wǎng)站爬出來(lái)只是復制一遍,并其它人的工作當作是你自己的東西(當然,沒(méi)有許可)。要注意版權和許可,以及你所爬行的內容應用哪一個(gè)標準。尊重 robots.txt 文件。不要頻繁的針對一個(gè)網(wǎng)站,這將造成真實(shí)的訪(fǎng)問(wèn)者會(huì )碰到訪(fǎng)問(wèn)困難的問(wèn)題。
在知曉那些警告過(guò)后,這里有一些太棒的 Python 網(wǎng)站爬蟲(chóng)工具,你可以拿來(lái)獲得你須要的數據。
讓我們先從 pyspider 開(kāi)始介紹。這是一個(gè)帶有 web 界面的網(wǎng)路爬蟲(chóng),讓與讓之容易跟蹤多個(gè)爬蟲(chóng)。其具有擴展性,支持多個(gè)前端數據庫和消息隊列。它還具有一些便捷的特點(diǎn),從優(yōu)先級到再度訪(fǎng)問(wèn)抓取失敗的頁(yè)面linux 爬蟲(chóng)軟件,此外還有通過(guò)時(shí)間次序來(lái)爬取和其他的一些特點(diǎn)。Pyspider 同時(shí)支持 Python 2 和 Python 3。為了實(shí)現一個(gè)更快的爬取,你可以在分布式的環(huán)境下一次使用多個(gè)爬蟲(chóng)進(jìn)行爬取。
Pyspyder 的基本用法都有良好的 文檔說(shuō)明 ,包括簡(jiǎn)單的代碼片斷。你能通過(guò)查看一個(gè) 在線(xiàn)的樣例 來(lái)體驗用戶(hù)界面。它在 Apache 2 許可證下開(kāi)源,Pyspyder 仍然在 GitHub 上積極地開(kāi)發(fā)。
MechanicalSoup 是一個(gè)基于非常流行而異常多能的 HTML 解析庫 Beautiful Soup 建立的爬蟲(chóng)庫。如果你的爬蟲(chóng)須要相當的簡(jiǎn)單,但是又要求檢測一些選擇框或則輸入一些文字,而你又不想為這個(gè)任務(wù)單獨寫(xiě)一個(gè)爬蟲(chóng),那么這會(huì )是一個(gè)值得考慮的選擇。
MechanicalSoup 在 MIT 許可證下開(kāi)源。查看 GitHub 上該項目的 example.py 樣例文件來(lái)獲得更多的用法。不幸的是,到目前為止,這個(gè)項目還沒(méi)有一個(gè)挺好的文檔。
Scrapy 是一個(gè)有著(zhù)活躍社區支持的抓取框架,在那里你可以建造自己的抓取工具。除了爬取和解析工具,它能夠將它搜集的數據以 JSON 或者 CSV 之類(lèi)的格式輕松輸出,并儲存在一個(gè)你選擇的前端數據庫。它還有許多外置的任務(wù)擴充linux 爬蟲(chóng)軟件,例如 cookie 處理、代理誤導、限制爬取深度等等,同時(shí)還可以構建你自己附加的 API。
要了解 Scrapy,你可以查看網(wǎng)上的文檔或則是訪(fǎng)問(wèn)它眾多的社區資源,包括一個(gè) IRC 頻道、Reddit 子版塊以及關(guān)注她們的 StackOverflow 標簽。Scrapy 的代碼在 3 句版 BSD 許可證下開(kāi)源,你可以在 GitHub 上找到它們。
如果你完全不熟悉編程,Portia 提供了一個(gè)易用的可視化的界面。 則提供一個(gè)托管的版本。
這遠不是一個(gè)完整的列表,當然,如果你是一個(gè)編程專(zhuān)家,你可以選擇采取你自己的方式而不是使用這種框架中的一個(gè)?;蛘吣惆l(fā)覺(jué)一個(gè)用其他語(yǔ)言編撰的替代品。例如 Python 編程者可能更喜歡 Python 附帶的Selenium,它可以在不使用實(shí)際瀏覽器的情況下進(jìn)行爬取。如果你有喜歡的爬取和挖掘工具,請在下邊評論使我們曉得。
?。}圖:You as a Machine. Modified by Rikki Endsley. CC BY-SA 2.0)
via: /resources/python/web-scraper-crawler
手把手教你寫(xiě)網(wǎng)絡(luò )爬蟲(chóng)(2):迷你爬蟲(chóng)構架-通用網(wǎng)路爬蟲(chóng)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 373 次瀏覽 ? 2020-06-20 08:00
介紹
大家好!回顧上一期,我們在介紹了爬蟲(chóng)的基本概念以后,就借助各類(lèi)工具橫沖直撞的完成了一個(gè)小爬蟲(chóng),目的就是猛、糙、快,方便初學(xué)者上手,建立信心。對于有一定基礎的讀者,請不要著(zhù)急,以后我們會(huì )學(xué)習主流的開(kāi)源框架,打造出一個(gè)強悍專(zhuān)業(yè)的爬蟲(chóng)系統!不過(guò)在此之前,要繼續打好基礎,本期我們先介紹爬蟲(chóng)的種類(lèi),然后選定最典型的通用網(wǎng)路爬蟲(chóng),為其設計一個(gè)迷你框架。有了自己對框架的思索后爬蟲(chóng)結構,再學(xué)習復雜的開(kāi)源框架就有頭緒了。
今天我們會(huì )把更多的時(shí)間用在思索上,而不是一根筋的coding。用80%的時(shí)間思索,20%的時(shí)間敲按鍵,這樣更有利于進(jìn)步。
語(yǔ)言&環(huán)境
語(yǔ)言:帶足彈藥,繼續用Python開(kāi)路!
一個(gè)迷你框架
下面以比較典型的通用爬蟲(chóng)為例爬蟲(chóng)結構,分析其工程要點(diǎn),設計并實(shí)現一個(gè)迷你框架。架構圖如下:
代碼結構:
config_load.py 配置文件加載
crawl_thread.py 爬取線(xiàn)程
mini_spider.py 主線(xiàn)程
spider.conf 配置文件
url_table.py url隊列、url表
urls.txt 種子url集合
webpage_parse.py 網(wǎng)頁(yè)剖析
webpage_save.py 網(wǎng)頁(yè)儲存
看看配置文件里有哪些內容:
spider.conf
url_table.py
Step 3. 記錄什么網(wǎng)頁(yè)早已下載過(guò)的小筆記本——URL表。
在互聯(lián)網(wǎng)上,一個(gè)網(wǎng)頁(yè)可能被多個(gè)網(wǎng)頁(yè)中的超鏈接所指向。這樣在遍歷互聯(lián)網(wǎng)這張圖的時(shí)侯,這個(gè)網(wǎng)頁(yè)可能被多次訪(fǎng)問(wèn)到。為了避免一個(gè)網(wǎng)頁(yè)被下載和解析多次,需要一個(gè)URL表記錄什么網(wǎng)頁(yè)早已下載過(guò)。再碰到這個(gè)網(wǎng)頁(yè)的時(shí)侯,我們就可以跳過(guò)它。
crawl_thread.py
Step 5. 頁(yè)面剖析模塊
從網(wǎng)頁(yè)中解析出URLs或則其他有用的數據。這個(gè)是下期重點(diǎn)介紹的,可以參考之前的代碼。
Step 6. 頁(yè)面儲存模塊
保存頁(yè)面的模塊,目前將文件保存為文件,以后可以擴充出多種儲存方法,如mysql,mongodb,hbase等等。
webpage_save.py
寫(xiě)到這兒,整個(gè)框架早已清晰的呈如今大伙眼前了,千萬(wàn)不要小看它,不管多么復雜的框架都是在這種基本要素上擴充下來(lái)的。
下一步
基礎知識的學(xué)習暫時(shí)告一段落,希望還能幫助你們打下一定的基礎。下期開(kāi)始為你們介紹強悍成熟的爬蟲(chóng)框架Scrapy,它提供了好多強悍的特點(diǎn)來(lái)促使爬取更為簡(jiǎn)單高效,更多精彩,敬請期盼!
【編輯推薦】
如何用Python來(lái)找你喜歡的女生?初識Python:全局、局部和非局部變量(帶示例)教你用Python解決非平衡數據問(wèn)題(附代碼)調查顯示:你是否是一個(gè)合格的Python開(kāi)發(fā)者?手把手教你寫(xiě)網(wǎng)絡(luò )爬蟲(chóng)(1):網(wǎng)易云音樂(lè )歌單 查看全部

介紹
大家好!回顧上一期,我們在介紹了爬蟲(chóng)的基本概念以后,就借助各類(lèi)工具橫沖直撞的完成了一個(gè)小爬蟲(chóng),目的就是猛、糙、快,方便初學(xué)者上手,建立信心。對于有一定基礎的讀者,請不要著(zhù)急,以后我們會(huì )學(xué)習主流的開(kāi)源框架,打造出一個(gè)強悍專(zhuān)業(yè)的爬蟲(chóng)系統!不過(guò)在此之前,要繼續打好基礎,本期我們先介紹爬蟲(chóng)的種類(lèi),然后選定最典型的通用網(wǎng)路爬蟲(chóng),為其設計一個(gè)迷你框架。有了自己對框架的思索后爬蟲(chóng)結構,再學(xué)習復雜的開(kāi)源框架就有頭緒了。
今天我們會(huì )把更多的時(shí)間用在思索上,而不是一根筋的coding。用80%的時(shí)間思索,20%的時(shí)間敲按鍵,這樣更有利于進(jìn)步。

語(yǔ)言&環(huán)境
語(yǔ)言:帶足彈藥,繼續用Python開(kāi)路!






一個(gè)迷你框架
下面以比較典型的通用爬蟲(chóng)為例爬蟲(chóng)結構,分析其工程要點(diǎn),設計并實(shí)現一個(gè)迷你框架。架構圖如下:

代碼結構:

config_load.py 配置文件加載
crawl_thread.py 爬取線(xiàn)程
mini_spider.py 主線(xiàn)程
spider.conf 配置文件
url_table.py url隊列、url表
urls.txt 種子url集合
webpage_parse.py 網(wǎng)頁(yè)剖析
webpage_save.py 網(wǎng)頁(yè)儲存
看看配置文件里有哪些內容:
spider.conf





url_table.py

Step 3. 記錄什么網(wǎng)頁(yè)早已下載過(guò)的小筆記本——URL表。
在互聯(lián)網(wǎng)上,一個(gè)網(wǎng)頁(yè)可能被多個(gè)網(wǎng)頁(yè)中的超鏈接所指向。這樣在遍歷互聯(lián)網(wǎng)這張圖的時(shí)侯,這個(gè)網(wǎng)頁(yè)可能被多次訪(fǎng)問(wèn)到。為了避免一個(gè)網(wǎng)頁(yè)被下載和解析多次,需要一個(gè)URL表記錄什么網(wǎng)頁(yè)早已下載過(guò)。再碰到這個(gè)網(wǎng)頁(yè)的時(shí)侯,我們就可以跳過(guò)它。
crawl_thread.py




Step 5. 頁(yè)面剖析模塊
從網(wǎng)頁(yè)中解析出URLs或則其他有用的數據。這個(gè)是下期重點(diǎn)介紹的,可以參考之前的代碼。
Step 6. 頁(yè)面儲存模塊
保存頁(yè)面的模塊,目前將文件保存為文件,以后可以擴充出多種儲存方法,如mysql,mongodb,hbase等等。
webpage_save.py

寫(xiě)到這兒,整個(gè)框架早已清晰的呈如今大伙眼前了,千萬(wàn)不要小看它,不管多么復雜的框架都是在這種基本要素上擴充下來(lái)的。
下一步
基礎知識的學(xué)習暫時(shí)告一段落,希望還能幫助你們打下一定的基礎。下期開(kāi)始為你們介紹強悍成熟的爬蟲(chóng)框架Scrapy,它提供了好多強悍的特點(diǎn)來(lái)促使爬取更為簡(jiǎn)單高效,更多精彩,敬請期盼!
【編輯推薦】
如何用Python來(lái)找你喜歡的女生?初識Python:全局、局部和非局部變量(帶示例)教你用Python解決非平衡數據問(wèn)題(附代碼)調查顯示:你是否是一個(gè)合格的Python開(kāi)發(fā)者?手把手教你寫(xiě)網(wǎng)絡(luò )爬蟲(chóng)(1):網(wǎng)易云音樂(lè )歌單
一份Python爬蟲(chóng)電子書(shū)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 300 次瀏覽 ? 2020-06-19 08:01
Python爬蟲(chóng)現如今早已越來(lái)越吃香了,隨意打開(kāi)一個(gè)急聘網(wǎng)站從工資水平來(lái)看,入門(mén)的爬蟲(chóng)工程師都能領(lǐng)到15k以上,爬蟲(chóng)構架相關(guān)的都能領(lǐng)到30k以上,我們還有什么理由去拒絕爬蟲(chóng)呢?當然,除非你跟錢(qián)過(guò)意不去。
所以秉承使更多想改行學(xué)習Python爬蟲(chóng)的的朋友快速學(xué)習、讓更多的小伙伴領(lǐng)到高薪我整理了一份十分健全的Python爬蟲(chóng)的電子書(shū)。
之前在知乎寫(xiě)分享早已有一年多,一直有同學(xué)說(shuō)我的回答和文章能整理成書(shū)籍了仍然偷懶沒(méi)做,也有出版社的小伙伴找我把這種內容弄成書(shū)都被我拒絕了。所以也是借著(zhù)這個(gè)機會(huì )仔細整理了知乎上的回答和文章另外也添加了一些新的內容,完成了幾本小小的電子書(shū),這一本比較小一部分是有關(guān)于Python方面的,主要內容還是Python爬蟲(chóng)。
這本書(shū)主要內容是Python入門(mén)爬蟲(chóng)飼養書(shū),以及Python爬蟲(chóng)入門(mén)和Python爬蟲(chóng)進(jìn)階,以下這是這本電子書(shū)的一個(gè)主要的目錄:
這本書(shū)不僅一些自己的學(xué)習、面試感受之外,還有好多包括書(shū)籍方面的資源、教程方面的學(xué)習資源,為了克服選擇困難癥,我在選擇教程或則書(shū)籍的時(shí)侯盡量保證了資源少而且精準,能用最少最精華的教程使你們快速入門(mén)Python以及比較熟悉的使用Python爬蟲(chóng)。
如果你能用心用2-3個(gè)月的時(shí)間認真通讀這本電子書(shū)爬蟲(chóng)飼養書(shū),并且學(xué)習這本書(shū)上推薦的一些教程和書(shū)籍,相信你一定能找到一份不錯的Python爬蟲(chóng)工作。 查看全部

Python爬蟲(chóng)現如今早已越來(lái)越吃香了,隨意打開(kāi)一個(gè)急聘網(wǎng)站從工資水平來(lái)看,入門(mén)的爬蟲(chóng)工程師都能領(lǐng)到15k以上,爬蟲(chóng)構架相關(guān)的都能領(lǐng)到30k以上,我們還有什么理由去拒絕爬蟲(chóng)呢?當然,除非你跟錢(qián)過(guò)意不去。

所以秉承使更多想改行學(xué)習Python爬蟲(chóng)的的朋友快速學(xué)習、讓更多的小伙伴領(lǐng)到高薪我整理了一份十分健全的Python爬蟲(chóng)的電子書(shū)。
之前在知乎寫(xiě)分享早已有一年多,一直有同學(xué)說(shuō)我的回答和文章能整理成書(shū)籍了仍然偷懶沒(méi)做,也有出版社的小伙伴找我把這種內容弄成書(shū)都被我拒絕了。所以也是借著(zhù)這個(gè)機會(huì )仔細整理了知乎上的回答和文章另外也添加了一些新的內容,完成了幾本小小的電子書(shū),這一本比較小一部分是有關(guān)于Python方面的,主要內容還是Python爬蟲(chóng)。
這本書(shū)主要內容是Python入門(mén)爬蟲(chóng)飼養書(shū),以及Python爬蟲(chóng)入門(mén)和Python爬蟲(chóng)進(jìn)階,以下這是這本電子書(shū)的一個(gè)主要的目錄:

這本書(shū)不僅一些自己的學(xué)習、面試感受之外,還有好多包括書(shū)籍方面的資源、教程方面的學(xué)習資源,為了克服選擇困難癥,我在選擇教程或則書(shū)籍的時(shí)侯盡量保證了資源少而且精準,能用最少最精華的教程使你們快速入門(mén)Python以及比較熟悉的使用Python爬蟲(chóng)。
如果你能用心用2-3個(gè)月的時(shí)間認真通讀這本電子書(shū)爬蟲(chóng)飼養書(shū),并且學(xué)習這本書(shū)上推薦的一些教程和書(shū)籍,相信你一定能找到一份不錯的Python爬蟲(chóng)工作。
Python網(wǎng)絡(luò )爬蟲(chóng)實(shí)戰項目代碼大全(長(cháng)期更新,歡迎補充)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 840 次瀏覽 ? 2020-06-14 08:02
WechatSogou[1]- 微信公眾號爬蟲(chóng)?;谒压肺⑿潘阉鞯奈⑿殴娞柵老x(chóng)插口,可以擴充成基于搜狗搜索的爬蟲(chóng),返回結果是列表,每一項均是公眾號具體信息字典。[1]:
DouBanSpider[2]- 豆瓣讀書(shū)爬蟲(chóng)??梢耘老露拱曜x書(shū)標簽下的所有圖書(shū),按評分排行依次儲存,存儲到Excel中,可便捷你們篩選搜羅,比如篩選評價(jià)人數>1000的高分書(shū)籍;可根據不同的主題儲存到Excel不同的Sheet ,采用User Agent偽裝為瀏覽器進(jìn)行爬取,并加入隨機延時(shí)來(lái)更好的模仿瀏覽器行為,避免爬蟲(chóng)被封。[2]:
zhihu_spider[3]- 知乎爬蟲(chóng)。此項目的功能是爬取知乎用戶(hù)信息以及人際拓撲關(guān)系,爬蟲(chóng)框架使用scrapy,數據儲存使用mongodb。[3]:
bilibili-user[4]- Bilibili用戶(hù)爬蟲(chóng)??倲祿担?0119918,抓取數組:用戶(hù)id,昵稱(chēng),性別,頭像,等級,經(jīng)驗值,粉絲數,生日,地址,注冊時(shí)間,簽名,等級與經(jīng)驗值等。抓取然后生成B站用戶(hù)數據報告。[4]:
SinaSpider[5]- 新浪微博爬蟲(chóng)。主要爬取新浪微博用戶(hù)的個(gè)人信息、微博信息、粉絲和關(guān)注。代碼獲取新浪微博Cookie進(jìn)行登陸,可通過(guò)多帳號登入來(lái)避免新浪的反扒。主要使用 scrapy 爬蟲(chóng)框架。[5]:
distribute_crawler[6]- 小說(shuō)下載分布式爬蟲(chóng)。使用scrapy,redis, mongodb,graphite實(shí)現的一個(gè)分布式網(wǎng)路爬蟲(chóng),底層儲存mongodb集群,分布式使用redis實(shí)現,爬蟲(chóng)狀態(tài)顯示使用graphite實(shí)現網(wǎng)絡(luò )爬蟲(chóng) 代碼,主要針對一個(gè)小說(shuō)站點(diǎn)。[6]:
CnkiSpider[7]- 中國知網(wǎng)爬蟲(chóng)。設置檢索條件后,執行src/CnkiSpider.py抓取數據,抓取數據儲存在/data目錄下,每個(gè)數據文件的第一行為數組名稱(chēng)。[7]:
LianJiaSpider[8]- 鏈家網(wǎng)爬蟲(chóng)。爬取北京地區鏈家歷年二手房成交記錄。涵蓋鏈家爬蟲(chóng)一文的全部代碼,包括鏈家模擬登陸代碼。[8]:
scrapy_jingdong[9]- 京東爬蟲(chóng)?;趕crapy的易迅網(wǎng)站爬蟲(chóng),保存格式為csv。[9]:
QQ-Groups-Spider[10]- QQ 群爬蟲(chóng)。批量抓取 QQ 群信息,包括群名稱(chēng)、群號、群人數、群主、群簡(jiǎn)介等內容,最終生成 XLS(X) / CSV 結果文件。[10]:
wooyun_public[11]-烏云爬蟲(chóng)。 烏云公開(kāi)漏洞、知識庫爬蟲(chóng)和搜索。全部公開(kāi)漏洞的列表和每位漏洞的文本內容存在mongodb中,大概約2G內容;如果整站爬全部文本和圖片作為離線(xiàn)查詢(xún),大概須要10G空間、2小時(shí)(10M聯(lián)通帶寬);爬取全部知識庫網(wǎng)絡(luò )爬蟲(chóng) 代碼,總共約500M空間。漏洞搜索使用了Flask作為web server,bootstrap作為后端。[11]:
2016.9.11補充:
QunarSpider[12]- 去哪兒網(wǎng)爬蟲(chóng)。 網(wǎng)絡(luò )爬蟲(chóng)之Selenium使用代理登錄:爬取去哪兒網(wǎng)站,使用selenium模擬瀏覽器登錄,獲取翻頁(yè)操作。代理可以存入一個(gè)文件,程序讀取并使用。支持多進(jìn)程抓取。[12]:
findtrip[13]- 機票爬蟲(chóng)(去哪兒和攜程網(wǎng))。Findtrip是一個(gè)基于Scrapy的機票爬蟲(chóng),目前整合了國外兩大機票網(wǎng)站(去哪兒 + 攜程)。[13]:
163spider[14] - 基于requests、MySQLdb、torndb的網(wǎng)易客戶(hù)端內容爬蟲(chóng)。[14]:
doubanspiders[15]- 豆瓣影片、書(shū)籍、小組、相冊、東西等爬蟲(chóng)集。[15]:
QQSpider[16]- QQ空間爬蟲(chóng),包括日志、說(shuō)說(shuō)、個(gè)人信息等,一天可抓取 400 萬(wàn)條數據。[16]:
baidu-music-spider[17]- 百度mp3全站爬蟲(chóng),使用redis支持斷點(diǎn)續傳。[17]:
tbcrawler[18]- 淘寶和淘寶的爬蟲(chóng),可以按照搜索關(guān)鍵詞,物品id來(lái)抓去頁(yè)面的信息,數據儲存在mongodb。[18]:
stockholm[19]- 一個(gè)股票數據(滬深)爬蟲(chóng)和選股策略測試框架。根據選取的日期范圍抓取所有滬深兩縣股票的行情數據。支持使用表達式定義選股策略。支持多線(xiàn)程處理。保存數據到JSON文件、CSV文件。[19]
--------------------------
本項目收錄各類(lèi)Python網(wǎng)路爬蟲(chóng)實(shí)戰開(kāi)源代碼,并常年更新,歡迎補充。
更多Python干貨歡迎掃碼關(guān)注:
微信公眾號:Python英文社區
知乎專(zhuān)欄:Python英文社區 <;
Python QQ交流群 :273186166
--------------------------
微信公眾號:Python英文社區
Python英文社區 QQ交流群:
--------------------------
Python開(kāi)發(fā)基礎教學(xué)視頻百度網(wǎng)盤(pán)下載地址: 查看全部

WechatSogou[1]- 微信公眾號爬蟲(chóng)?;谒压肺⑿潘阉鞯奈⑿殴娞柵老x(chóng)插口,可以擴充成基于搜狗搜索的爬蟲(chóng),返回結果是列表,每一項均是公眾號具體信息字典。[1]:
DouBanSpider[2]- 豆瓣讀書(shū)爬蟲(chóng)??梢耘老露拱曜x書(shū)標簽下的所有圖書(shū),按評分排行依次儲存,存儲到Excel中,可便捷你們篩選搜羅,比如篩選評價(jià)人數>1000的高分書(shū)籍;可根據不同的主題儲存到Excel不同的Sheet ,采用User Agent偽裝為瀏覽器進(jìn)行爬取,并加入隨機延時(shí)來(lái)更好的模仿瀏覽器行為,避免爬蟲(chóng)被封。[2]:
zhihu_spider[3]- 知乎爬蟲(chóng)。此項目的功能是爬取知乎用戶(hù)信息以及人際拓撲關(guān)系,爬蟲(chóng)框架使用scrapy,數據儲存使用mongodb。[3]:
bilibili-user[4]- Bilibili用戶(hù)爬蟲(chóng)??倲祿担?0119918,抓取數組:用戶(hù)id,昵稱(chēng),性別,頭像,等級,經(jīng)驗值,粉絲數,生日,地址,注冊時(shí)間,簽名,等級與經(jīng)驗值等。抓取然后生成B站用戶(hù)數據報告。[4]:
SinaSpider[5]- 新浪微博爬蟲(chóng)。主要爬取新浪微博用戶(hù)的個(gè)人信息、微博信息、粉絲和關(guān)注。代碼獲取新浪微博Cookie進(jìn)行登陸,可通過(guò)多帳號登入來(lái)避免新浪的反扒。主要使用 scrapy 爬蟲(chóng)框架。[5]:
distribute_crawler[6]- 小說(shuō)下載分布式爬蟲(chóng)。使用scrapy,redis, mongodb,graphite實(shí)現的一個(gè)分布式網(wǎng)路爬蟲(chóng),底層儲存mongodb集群,分布式使用redis實(shí)現,爬蟲(chóng)狀態(tài)顯示使用graphite實(shí)現網(wǎng)絡(luò )爬蟲(chóng) 代碼,主要針對一個(gè)小說(shuō)站點(diǎn)。[6]:
CnkiSpider[7]- 中國知網(wǎng)爬蟲(chóng)。設置檢索條件后,執行src/CnkiSpider.py抓取數據,抓取數據儲存在/data目錄下,每個(gè)數據文件的第一行為數組名稱(chēng)。[7]:
LianJiaSpider[8]- 鏈家網(wǎng)爬蟲(chóng)。爬取北京地區鏈家歷年二手房成交記錄。涵蓋鏈家爬蟲(chóng)一文的全部代碼,包括鏈家模擬登陸代碼。[8]:
scrapy_jingdong[9]- 京東爬蟲(chóng)?;趕crapy的易迅網(wǎng)站爬蟲(chóng),保存格式為csv。[9]:
QQ-Groups-Spider[10]- QQ 群爬蟲(chóng)。批量抓取 QQ 群信息,包括群名稱(chēng)、群號、群人數、群主、群簡(jiǎn)介等內容,最終生成 XLS(X) / CSV 結果文件。[10]:
wooyun_public[11]-烏云爬蟲(chóng)。 烏云公開(kāi)漏洞、知識庫爬蟲(chóng)和搜索。全部公開(kāi)漏洞的列表和每位漏洞的文本內容存在mongodb中,大概約2G內容;如果整站爬全部文本和圖片作為離線(xiàn)查詢(xún),大概須要10G空間、2小時(shí)(10M聯(lián)通帶寬);爬取全部知識庫網(wǎng)絡(luò )爬蟲(chóng) 代碼,總共約500M空間。漏洞搜索使用了Flask作為web server,bootstrap作為后端。[11]:
2016.9.11補充:
QunarSpider[12]- 去哪兒網(wǎng)爬蟲(chóng)。 網(wǎng)絡(luò )爬蟲(chóng)之Selenium使用代理登錄:爬取去哪兒網(wǎng)站,使用selenium模擬瀏覽器登錄,獲取翻頁(yè)操作。代理可以存入一個(gè)文件,程序讀取并使用。支持多進(jìn)程抓取。[12]:
findtrip[13]- 機票爬蟲(chóng)(去哪兒和攜程網(wǎng))。Findtrip是一個(gè)基于Scrapy的機票爬蟲(chóng),目前整合了國外兩大機票網(wǎng)站(去哪兒 + 攜程)。[13]:
163spider[14] - 基于requests、MySQLdb、torndb的網(wǎng)易客戶(hù)端內容爬蟲(chóng)。[14]:
doubanspiders[15]- 豆瓣影片、書(shū)籍、小組、相冊、東西等爬蟲(chóng)集。[15]:
QQSpider[16]- QQ空間爬蟲(chóng),包括日志、說(shuō)說(shuō)、個(gè)人信息等,一天可抓取 400 萬(wàn)條數據。[16]:
baidu-music-spider[17]- 百度mp3全站爬蟲(chóng),使用redis支持斷點(diǎn)續傳。[17]:
tbcrawler[18]- 淘寶和淘寶的爬蟲(chóng),可以按照搜索關(guān)鍵詞,物品id來(lái)抓去頁(yè)面的信息,數據儲存在mongodb。[18]:
stockholm[19]- 一個(gè)股票數據(滬深)爬蟲(chóng)和選股策略測試框架。根據選取的日期范圍抓取所有滬深兩縣股票的行情數據。支持使用表達式定義選股策略。支持多線(xiàn)程處理。保存數據到JSON文件、CSV文件。[19]
--------------------------
本項目收錄各類(lèi)Python網(wǎng)路爬蟲(chóng)實(shí)戰開(kāi)源代碼,并常年更新,歡迎補充。
更多Python干貨歡迎掃碼關(guān)注:
微信公眾號:Python英文社區
知乎專(zhuān)欄:Python英文社區 <;
Python QQ交流群 :273186166
--------------------------
微信公眾號:Python英文社區
Python英文社區 QQ交流群:
--------------------------
Python開(kāi)發(fā)基礎教學(xué)視頻百度網(wǎng)盤(pán)下載地址:
python爬蟲(chóng)入門(mén)教程(一)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 260 次瀏覽 ? 2020-06-12 08:01
1、Python能做哪些
2、網(wǎng)絡(luò )爬蟲(chóng)簡(jiǎn)介
3、網(wǎng)絡(luò )爬蟲(chóng)能做哪些
4、開(kāi)發(fā)爬蟲(chóng)的打算工作
5、推薦的python爬蟲(chóng)學(xué)習書(shū)籍
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Python能做哪些
網(wǎng)絡(luò )爬蟲(chóng)簡(jiǎn)介
網(wǎng)絡(luò )爬蟲(chóng),也叫網(wǎng)路蜘蛛(Web Spider)。爬蟲(chóng)是依照網(wǎng)頁(yè)地址(URL)爬取網(wǎng)頁(yè)上的內容,這里說(shuō)的網(wǎng)頁(yè)地址(URL)就是我們在瀏覽器中輸入的網(wǎng)站鏈接。例如:/,這就是一個(gè)URL。
爬蟲(chóng)是在某個(gè)URL頁(yè)面入手,抓取到這個(gè)頁(yè)面的內容網(wǎng)絡(luò )爬蟲(chóng) 教程,從當前的頁(yè)面中找到其他的鏈接地址,然后從這地址再度爬到下一個(gè)網(wǎng)站頁(yè)面,這樣仍然不停的抓取到有用的信息,所以可以說(shuō)網(wǎng)絡(luò )爬蟲(chóng)是不停的抓取獲得頁(yè)面上想要的信息的程序。
網(wǎng)絡(luò )爬蟲(chóng)能做哪些
例如:我關(guān)注的找工作的網(wǎng)站會(huì )不定期的發(fā)布急聘信息,我不信每晚都耗費自己的精力去點(diǎn)擊網(wǎng)站查看信息,但是我又想在有新的通知時(shí),能夠及時(shí)曉得信息并看見(jiàn)這個(gè)信息。
此時(shí),我就須要爬蟲(chóng)來(lái)幫助我,這個(gè)爬蟲(chóng)程序會(huì )手動(dòng)在一定的時(shí)間模擬人去訪(fǎng)問(wèn)官網(wǎng),檢查是否有新的通知發(fā)布,如果沒(méi)有就不進(jìn)行任何操作,如果有通知,那么就將通知從網(wǎng)頁(yè)中提取下來(lái),保存到指定的位置,然后發(fā)送郵件或則電郵告知我即可。
開(kāi)發(fā)爬蟲(chóng)的打算工作
編程語(yǔ)言:Python
IDE的話(huà),推薦使用Pycharm。windows、linux、macos多平臺支持網(wǎng)絡(luò )爬蟲(chóng) 教程,非常好用。
開(kāi)發(fā)環(huán)境:Win7+Python 2.7 64bit+PyCharm :環(huán)境配置方式自行百度
推薦的python爬蟲(chóng)學(xué)習書(shū)籍
1.米切爾 (Ryan Mitchell) (作者), 陶俊杰 (譯者), 陳小莉 (譯者)的Python網(wǎng)路數據采集
2.范傳輝 (作者)的Python爬蟲(chóng)開(kāi)發(fā)與項目實(shí)戰 查看全部
目錄:
1、Python能做哪些
2、網(wǎng)絡(luò )爬蟲(chóng)簡(jiǎn)介
3、網(wǎng)絡(luò )爬蟲(chóng)能做哪些
4、開(kāi)發(fā)爬蟲(chóng)的打算工作
5、推薦的python爬蟲(chóng)學(xué)習書(shū)籍
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Python能做哪些
網(wǎng)絡(luò )爬蟲(chóng)簡(jiǎn)介
網(wǎng)絡(luò )爬蟲(chóng),也叫網(wǎng)路蜘蛛(Web Spider)。爬蟲(chóng)是依照網(wǎng)頁(yè)地址(URL)爬取網(wǎng)頁(yè)上的內容,這里說(shuō)的網(wǎng)頁(yè)地址(URL)就是我們在瀏覽器中輸入的網(wǎng)站鏈接。例如:/,這就是一個(gè)URL。
爬蟲(chóng)是在某個(gè)URL頁(yè)面入手,抓取到這個(gè)頁(yè)面的內容網(wǎng)絡(luò )爬蟲(chóng) 教程,從當前的頁(yè)面中找到其他的鏈接地址,然后從這地址再度爬到下一個(gè)網(wǎng)站頁(yè)面,這樣仍然不停的抓取到有用的信息,所以可以說(shuō)網(wǎng)絡(luò )爬蟲(chóng)是不停的抓取獲得頁(yè)面上想要的信息的程序。
網(wǎng)絡(luò )爬蟲(chóng)能做哪些
例如:我關(guān)注的找工作的網(wǎng)站會(huì )不定期的發(fā)布急聘信息,我不信每晚都耗費自己的精力去點(diǎn)擊網(wǎng)站查看信息,但是我又想在有新的通知時(shí),能夠及時(shí)曉得信息并看見(jiàn)這個(gè)信息。
此時(shí),我就須要爬蟲(chóng)來(lái)幫助我,這個(gè)爬蟲(chóng)程序會(huì )手動(dòng)在一定的時(shí)間模擬人去訪(fǎng)問(wèn)官網(wǎng),檢查是否有新的通知發(fā)布,如果沒(méi)有就不進(jìn)行任何操作,如果有通知,那么就將通知從網(wǎng)頁(yè)中提取下來(lái),保存到指定的位置,然后發(fā)送郵件或則電郵告知我即可。
開(kāi)發(fā)爬蟲(chóng)的打算工作
編程語(yǔ)言:Python
IDE的話(huà),推薦使用Pycharm。windows、linux、macos多平臺支持網(wǎng)絡(luò )爬蟲(chóng) 教程,非常好用。
開(kāi)發(fā)環(huán)境:Win7+Python 2.7 64bit+PyCharm :環(huán)境配置方式自行百度
推薦的python爬蟲(chóng)學(xué)習書(shū)籍
1.米切爾 (Ryan Mitchell) (作者), 陶俊杰 (譯者), 陳小莉 (譯者)的Python網(wǎng)路數據采集
2.范傳輝 (作者)的Python爬蟲(chóng)開(kāi)發(fā)與項目實(shí)戰
python爬蟲(chóng)入門(mén)到精通必備的書(shū)籍
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 366 次瀏覽 ? 2020-06-09 10:25
3、《笨辦法學(xué) Python》這并不是關(guān)于親子關(guān)系的編程書(shū), 而是一本正兒八經(jīng) Python 編程入 門(mén)書(shū),只是以這些寓教于樂(lè )的方式闡釋編程,顯得更輕松愉快一些。4、《深入淺出 Python》Head First 系列的書(shū)籍仍然遭受稱(chēng)贊,這本也不例外。Head First Python 主要述說(shuō)了 Python 3 的基礎句型知識以及怎樣使用 Python八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 快速地進(jìn)行 Web、手機上的開(kāi)發(fā)。5、《像計算機科學(xué)家一樣思索 python》內容講解清楚明白python爬蟲(chóng)經(jīng)典書(shū)籍,非常適宜 python 入門(mén)用,但對于學(xué)習過(guò)其他編 程語(yǔ)言的讀者來(lái)說(shuō)可能會(huì )認為進(jìn)度比較慢, 但作者的思路和看法確實(shí) 給人好多啟發(fā),對于新手來(lái)說(shuō)利潤頗豐,書(shū)中好多反例還是有一定難 度的python爬蟲(chóng)經(jīng)典書(shū)籍,完全吃透也不容易。6、《Python 編程:入門(mén)到實(shí)踐》厚厚的一本書(shū),本書(shū)的內容基礎并且全面,適合純小白看。Python 學(xué)習進(jìn)階書(shū)籍1、《Python 學(xué)習指南》 本書(shū)解釋詳盡,例子豐富;關(guān)于 Python 語(yǔ)言本身的講解全面詳細而八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 又循序漸進(jìn)不斷重復,同時(shí)闡述語(yǔ)言現象背后的機制和原理;除語(yǔ)言 本身,還包含編程實(shí)踐和設計以及中級主題。
2、《Python 核心編程第 3 版》 本書(shū)的內容實(shí)際上就是大致介紹了一下部份 python 標準庫里的模塊 和一些第三方模塊,并且主要是網(wǎng)路方向。適合學(xué)習完 python 語(yǔ)法 知識后進(jìn)階閱讀,簡(jiǎn)單但又囊括了開(kāi)發(fā)所用到的一些基本的庫,引起 你繼續學(xué)習的興趣。3、《編寫(xiě)高質(zhì)量 Python 代碼的 59 個(gè)有效方式》關(guān)于庫,引用,生產(chǎn)環(huán)境這種知識倘若只是埋頭寫(xiě)代碼,很多時(shí)侯都 不會(huì )涉及到, 但是這本書(shū)里關(guān)于這種東西的條目比較簡(jiǎn)約的把前因后 果理清楚了,感覺(jué)太有幫助。4、《Python CookBook》這本書(shū)不太適宜從頭到尾閱讀,適合當一本參考書(shū)或是字典書(shū),遇到八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 了總是上來(lái)查查,看看有沒(méi)有取巧的辦法。書(shū)中把一些小技巧按章節 集合上去,可以節約不少 google 的時(shí)間。5、《流暢的 Python》 本書(shū)是極好的 Python 進(jìn)階書(shū)籍,詳細解釋了魔術(shù)技巧、生成器、協(xié) 程、元編程等概念,值得反復閱讀。以上是進(jìn)階書(shū)籍最終要的還是要多動(dòng)手,找項目實(shí)踐,從實(shí)際應用場(chǎng) 景出發(fā),用程序解決手頭的一些冗長(cháng)復雜問(wèn)題。二、HTTP 入門(mén)書(shū)籍 1、《圖解 HTTP》本書(shū)詳盡介紹了 HTTP 的常用的知識,大部分內容以圖文的形式展 示,易于讀者理解,避免了去啃厚厚的《HTTP 權威指南》和 RFC 文檔。
同時(shí)作者邏輯清晰,沒(méi)有介紹過(guò)分深奧的知識,滿(mǎn)足了讀者對 HTTP 基礎的需求。八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 三、數據庫入門(mén)書(shū)籍 1、《MySQL 必知必會(huì )》 對入門(mén)者太照料的一本書(shū),與其說(shuō)是一本書(shū)不如說(shuō)是一本小冊子,不 到 250 頁(yè)的小冊子,實(shí)踐性太強,基本沒(méi)有哪些理論的拼湊,完完 全全就是一本實(shí)踐手冊, 教會(huì )你如何用 SQL 語(yǔ)句操作 MySQL??赐?這本書(shū)基本就可以說(shuō)是入門(mén)了。 四、正則表達式入門(mén)書(shū)籍 1、《精通正則表達式》 本書(shū)面向的讀者是:1) 會(huì )用正則表達式;2) 愿意從一個(gè)代碼工人向 專(zhuān)家進(jìn)化的;3) 對技術(shù)有狂熱的追求的;本書(shū)注重講解關(guān)于正則表 達式匹配原理、優(yōu)化方式和使用方法,讀完以后你會(huì )感覺(jué)豁然開(kāi)朗, 沒(méi)想到正則表達式還有這樣一片天空。 五、爬蟲(chóng)相關(guān)書(shū)籍 1、《用 Python 寫(xiě)網(wǎng)絡(luò )爬蟲(chóng)》 本書(shū)適宜早已熟悉 python 且熟悉大多數模塊的人。 作者對爬蟲(chóng)的編 寫(xiě)考慮較為全面,且有相關(guān)練習網(wǎng)頁(yè)可以實(shí)操。八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 2、《Python 爬蟲(chóng)開(kāi)發(fā)與項目實(shí)戰》這本書(shū)從爬蟲(chóng)會(huì )涉及的多線(xiàn)程,多進(jìn)程講起,然后介紹 web 前端的 基礎知識,然后是數據儲存,網(wǎng)絡(luò )合同,再就是綜合的爬蟲(chóng)項目。
這本書(shū)不適宜沒(méi)有任何 Python 基礎的人閱讀, 因為這本書(shū)根本沒(méi)有 提到任何 Python 的基礎知識。但是對于想要進(jìn)階 Python 爬蟲(chóng)的人 來(lái)說(shuō)是非常好的。相關(guān)閱讀:百度地圖數據采集: 58 同城信息采集: 黃頁(yè) 88 企業(yè)名錄數據采集: 天貓買(mǎi)家秀圖片采集詳細教程:八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 八爪魚(yú)采集原理(7.0 版本): 微信公眾號文章正文采集: 八爪魚(yú)——90 萬(wàn)用戶(hù)選擇的網(wǎng)頁(yè)數據采集器。 1、操作簡(jiǎn)單,任何人都可以用:無(wú)需技術(shù)背景,會(huì )上網(wǎng)才能采集。完全可視化 流程,點(diǎn)擊滑鼠完成操作,2 分鐘即可快速入門(mén)。 2、功能強悍,任何網(wǎng)站都可以采:對于點(diǎn)擊、登陸、翻頁(yè)、識別驗證碼、瀑布 流、Ajax 腳本異步加載數據的網(wǎng)頁(yè),均可經(jīng)過(guò)簡(jiǎn)單設置進(jìn)行采集。 3、云采集,關(guān)機也可以。配置好采集任務(wù)后可死機,任務(wù)可在云端執行。龐大 云采集集群 24*7 不間斷運行,不用害怕 IP 被封,網(wǎng)絡(luò )中斷。 4、功能免費+增值服務(wù),可按需選擇。免費版具備所有功能,能夠滿(mǎn)足用戶(hù)的 基本采集需求。同時(shí)設置了一些增值服務(wù)(如私有云),滿(mǎn)足低端付費企業(yè)用戶(hù) 的須要。 查看全部
八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 python 爬蟲(chóng)入門(mén)到精通必備的書(shū)籍python 是一種常見(jiàn)的網(wǎng)路爬蟲(chóng)語(yǔ)言,學(xué)習 python 爬蟲(chóng),需要理論 與實(shí)踐相結合,Python 生態(tài)中的爬蟲(chóng)庫多如牛毛,urllib、urllib2、 requests、beautifulsoup、scrapy、pyspider 都是爬蟲(chóng)相關(guān)的庫, 但是假如沒(méi)有理論知識, 純粹地學(xué)習怎么使用這種 API 如何調用是不 會(huì )有提高的。所以,在學(xué)習這種庫的同時(shí),需要去系統的學(xué)習爬蟲(chóng)的 相關(guān)原理。你須要懂的技術(shù)包括 Python 編程語(yǔ)言、HTTP 協(xié)議、數 據庫、 Linux 等知識。 這樣能夠做到真正從入門(mén) python 爬蟲(chóng)到精通, 下面推薦幾本精典的書(shū)籍。1、Python 語(yǔ)言入門(mén)的書(shū)籍:適合沒(méi)有編程基礎的,入門(mén) Python 的書(shū)籍1、《簡(jiǎn)明 Python 教程》本書(shū)采用知識共享合同免費分發(fā),意味著(zhù)任何人都可以免費獲取,這八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 本書(shū)走過(guò)了 11 個(gè)年頭,最新版以 Python3 為基礎同時(shí)也會(huì )兼具到 Python2 的一些東西,內容十分精簡(jiǎn)。2、《父與子的編程之旅》一本正兒八經(jīng) Python 編程入門(mén)書(shū),以寓教于樂(lè )的方式闡釋編程,顯 得更輕松愉快一些。
3、《笨辦法學(xué) Python》這并不是關(guān)于親子關(guān)系的編程書(shū), 而是一本正兒八經(jīng) Python 編程入 門(mén)書(shū),只是以這些寓教于樂(lè )的方式闡釋編程,顯得更輕松愉快一些。4、《深入淺出 Python》Head First 系列的書(shū)籍仍然遭受稱(chēng)贊,這本也不例外。Head First Python 主要述說(shuō)了 Python 3 的基礎句型知識以及怎樣使用 Python八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 快速地進(jìn)行 Web、手機上的開(kāi)發(fā)。5、《像計算機科學(xué)家一樣思索 python》內容講解清楚明白python爬蟲(chóng)經(jīng)典書(shū)籍,非常適宜 python 入門(mén)用,但對于學(xué)習過(guò)其他編 程語(yǔ)言的讀者來(lái)說(shuō)可能會(huì )認為進(jìn)度比較慢, 但作者的思路和看法確實(shí) 給人好多啟發(fā),對于新手來(lái)說(shuō)利潤頗豐,書(shū)中好多反例還是有一定難 度的python爬蟲(chóng)經(jīng)典書(shū)籍,完全吃透也不容易。6、《Python 編程:入門(mén)到實(shí)踐》厚厚的一本書(shū),本書(shū)的內容基礎并且全面,適合純小白看。Python 學(xué)習進(jìn)階書(shū)籍1、《Python 學(xué)習指南》 本書(shū)解釋詳盡,例子豐富;關(guān)于 Python 語(yǔ)言本身的講解全面詳細而八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 又循序漸進(jìn)不斷重復,同時(shí)闡述語(yǔ)言現象背后的機制和原理;除語(yǔ)言 本身,還包含編程實(shí)踐和設計以及中級主題。
2、《Python 核心編程第 3 版》 本書(shū)的內容實(shí)際上就是大致介紹了一下部份 python 標準庫里的模塊 和一些第三方模塊,并且主要是網(wǎng)路方向。適合學(xué)習完 python 語(yǔ)法 知識后進(jìn)階閱讀,簡(jiǎn)單但又囊括了開(kāi)發(fā)所用到的一些基本的庫,引起 你繼續學(xué)習的興趣。3、《編寫(xiě)高質(zhì)量 Python 代碼的 59 個(gè)有效方式》關(guān)于庫,引用,生產(chǎn)環(huán)境這種知識倘若只是埋頭寫(xiě)代碼,很多時(shí)侯都 不會(huì )涉及到, 但是這本書(shū)里關(guān)于這種東西的條目比較簡(jiǎn)約的把前因后 果理清楚了,感覺(jué)太有幫助。4、《Python CookBook》這本書(shū)不太適宜從頭到尾閱讀,適合當一本參考書(shū)或是字典書(shū),遇到八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 了總是上來(lái)查查,看看有沒(méi)有取巧的辦法。書(shū)中把一些小技巧按章節 集合上去,可以節約不少 google 的時(shí)間。5、《流暢的 Python》 本書(shū)是極好的 Python 進(jìn)階書(shū)籍,詳細解釋了魔術(shù)技巧、生成器、協(xié) 程、元編程等概念,值得反復閱讀。以上是進(jìn)階書(shū)籍最終要的還是要多動(dòng)手,找項目實(shí)踐,從實(shí)際應用場(chǎng) 景出發(fā),用程序解決手頭的一些冗長(cháng)復雜問(wèn)題。二、HTTP 入門(mén)書(shū)籍 1、《圖解 HTTP》本書(shū)詳盡介紹了 HTTP 的常用的知識,大部分內容以圖文的形式展 示,易于讀者理解,避免了去啃厚厚的《HTTP 權威指南》和 RFC 文檔。
同時(shí)作者邏輯清晰,沒(méi)有介紹過(guò)分深奧的知識,滿(mǎn)足了讀者對 HTTP 基礎的需求。八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 三、數據庫入門(mén)書(shū)籍 1、《MySQL 必知必會(huì )》 對入門(mén)者太照料的一本書(shū),與其說(shuō)是一本書(shū)不如說(shuō)是一本小冊子,不 到 250 頁(yè)的小冊子,實(shí)踐性太強,基本沒(méi)有哪些理論的拼湊,完完 全全就是一本實(shí)踐手冊, 教會(huì )你如何用 SQL 語(yǔ)句操作 MySQL??赐?這本書(shū)基本就可以說(shuō)是入門(mén)了。 四、正則表達式入門(mén)書(shū)籍 1、《精通正則表達式》 本書(shū)面向的讀者是:1) 會(huì )用正則表達式;2) 愿意從一個(gè)代碼工人向 專(zhuān)家進(jìn)化的;3) 對技術(shù)有狂熱的追求的;本書(shū)注重講解關(guān)于正則表 達式匹配原理、優(yōu)化方式和使用方法,讀完以后你會(huì )感覺(jué)豁然開(kāi)朗, 沒(méi)想到正則表達式還有這樣一片天空。 五、爬蟲(chóng)相關(guān)書(shū)籍 1、《用 Python 寫(xiě)網(wǎng)絡(luò )爬蟲(chóng)》 本書(shū)適宜早已熟悉 python 且熟悉大多數模塊的人。 作者對爬蟲(chóng)的編 寫(xiě)考慮較為全面,且有相關(guān)練習網(wǎng)頁(yè)可以實(shí)操。八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 2、《Python 爬蟲(chóng)開(kāi)發(fā)與項目實(shí)戰》這本書(shū)從爬蟲(chóng)會(huì )涉及的多線(xiàn)程,多進(jìn)程講起,然后介紹 web 前端的 基礎知識,然后是數據儲存,網(wǎng)絡(luò )合同,再就是綜合的爬蟲(chóng)項目。
這本書(shū)不適宜沒(méi)有任何 Python 基礎的人閱讀, 因為這本書(shū)根本沒(méi)有 提到任何 Python 的基礎知識。但是對于想要進(jìn)階 Python 爬蟲(chóng)的人 來(lái)說(shuō)是非常好的。相關(guān)閱讀:百度地圖數據采集: 58 同城信息采集: 黃頁(yè) 88 企業(yè)名錄數據采集: 天貓買(mǎi)家秀圖片采集詳細教程:八爪魚(yú)·云采集網(wǎng)絡(luò )爬蟲(chóng)軟件 八爪魚(yú)采集原理(7.0 版本): 微信公眾號文章正文采集: 八爪魚(yú)——90 萬(wàn)用戶(hù)選擇的網(wǎng)頁(yè)數據采集器。 1、操作簡(jiǎn)單,任何人都可以用:無(wú)需技術(shù)背景,會(huì )上網(wǎng)才能采集。完全可視化 流程,點(diǎn)擊滑鼠完成操作,2 分鐘即可快速入門(mén)。 2、功能強悍,任何網(wǎng)站都可以采:對于點(diǎn)擊、登陸、翻頁(yè)、識別驗證碼、瀑布 流、Ajax 腳本異步加載數據的網(wǎng)頁(yè),均可經(jīng)過(guò)簡(jiǎn)單設置進(jìn)行采集。 3、云采集,關(guān)機也可以。配置好采集任務(wù)后可死機,任務(wù)可在云端執行。龐大 云采集集群 24*7 不間斷運行,不用害怕 IP 被封,網(wǎng)絡(luò )中斷。 4、功能免費+增值服務(wù),可按需選擇。免費版具備所有功能,能夠滿(mǎn)足用戶(hù)的 基本采集需求。同時(shí)設置了一些增值服務(wù)(如私有云),滿(mǎn)足低端付費企業(yè)用戶(hù) 的須要。
Python爬蟲(chóng)實(shí)戰(1):爬取Drupal峰會(huì )貼子列表
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 370 次瀏覽 ? 2020-06-09 10:24
在《Python即時(shí)網(wǎng)路爬蟲(chóng)項目: 內容提取器的定義》一文我們定義了一個(gè)通用的python網(wǎng)路爬蟲(chóng)類(lèi),期望通過(guò)這個(gè)項目節約程序員一半以上的時(shí)間。本文將用一個(gè)實(shí)例講解如何使用這個(gè)爬蟲(chóng)類(lèi)。我們將爬集搜客老版峰會(huì ),是一個(gè)用Drupal做的峰會(huì )。
我們在多個(gè)文章都在說(shuō):節省程序員的時(shí)間。關(guān)鍵是市去編撰提取規則的時(shí)間,尤其是調試規則的正確性太花時(shí)間。在《1分鐘快速生成用于網(wǎng)頁(yè)內容提取的xslt》演示了如何快速生成提取規則網(wǎng)絡(luò )爬蟲(chóng)論壇,接下來(lái)我們再通過(guò)GooSeeker的api插口實(shí)時(shí)獲得提取規則,對網(wǎng)頁(yè)進(jìn)行抓取。本示例主要有如下兩個(gè)技術(shù)要點(diǎn):
通過(guò)GooSeeker API實(shí)時(shí)獲取用于頁(yè)面提取的xslt
使用GooSeeker提取器gsExtractor從網(wǎng)頁(yè)上一次提取多個(gè)數組內容。
# _*_coding:utf8_*_
# crawler_gooseeker_bbs.py
# 版本: V1.0
from urllib import request
from lxml import etree
from gooseeker import GsExtractor
# 訪(fǎng)問(wèn)并讀取網(wǎng)頁(yè)內容
url = ""
conn = request.urlopen(url)
doc = etree.HTML(conn.read())
bbsExtra = GsExtractor()
bbsExtra.setXsltFromAPI("31d24931e043e2d5364d03b8ff9cc77e" , "gooseeker_bbs_xslt") # 設置xslt抓取規則,第一個(gè)參數是app key,請到會(huì )員中心申請
result = bbsExtra.extract(doc) # 調用extract方法提取所需內容
print(str(result))
源代碼下載位置請看文章末尾的GitHub源。
運行上節的代碼,即可在控制臺復印出提取結果,是一個(gè)xml文件,如果加上換行縮進(jìn),內容如下圖:
/img/bVwAyA
1網(wǎng)絡(luò )爬蟲(chóng)論壇, Python即時(shí)網(wǎng)路爬蟲(chóng)項目: 內容提取器的定義
1, GooSeeker開(kāi)源Python網(wǎng)絡(luò )爬蟲(chóng)GitHub源 查看全部
/img/bVxTdG
在《Python即時(shí)網(wǎng)路爬蟲(chóng)項目: 內容提取器的定義》一文我們定義了一個(gè)通用的python網(wǎng)路爬蟲(chóng)類(lèi),期望通過(guò)這個(gè)項目節約程序員一半以上的時(shí)間。本文將用一個(gè)實(shí)例講解如何使用這個(gè)爬蟲(chóng)類(lèi)。我們將爬集搜客老版峰會(huì ),是一個(gè)用Drupal做的峰會(huì )。
我們在多個(gè)文章都在說(shuō):節省程序員的時(shí)間。關(guān)鍵是市去編撰提取規則的時(shí)間,尤其是調試規則的正確性太花時(shí)間。在《1分鐘快速生成用于網(wǎng)頁(yè)內容提取的xslt》演示了如何快速生成提取規則網(wǎng)絡(luò )爬蟲(chóng)論壇,接下來(lái)我們再通過(guò)GooSeeker的api插口實(shí)時(shí)獲得提取規則,對網(wǎng)頁(yè)進(jìn)行抓取。本示例主要有如下兩個(gè)技術(shù)要點(diǎn):
通過(guò)GooSeeker API實(shí)時(shí)獲取用于頁(yè)面提取的xslt
使用GooSeeker提取器gsExtractor從網(wǎng)頁(yè)上一次提取多個(gè)數組內容。
# _*_coding:utf8_*_
# crawler_gooseeker_bbs.py
# 版本: V1.0
from urllib import request
from lxml import etree
from gooseeker import GsExtractor
# 訪(fǎng)問(wèn)并讀取網(wǎng)頁(yè)內容
url = ""
conn = request.urlopen(url)
doc = etree.HTML(conn.read())
bbsExtra = GsExtractor()
bbsExtra.setXsltFromAPI("31d24931e043e2d5364d03b8ff9cc77e" , "gooseeker_bbs_xslt") # 設置xslt抓取規則,第一個(gè)參數是app key,請到會(huì )員中心申請
result = bbsExtra.extract(doc) # 調用extract方法提取所需內容
print(str(result))
源代碼下載位置請看文章末尾的GitHub源。
運行上節的代碼,即可在控制臺復印出提取結果,是一個(gè)xml文件,如果加上換行縮進(jìn),內容如下圖:
/img/bVwAyA
1網(wǎng)絡(luò )爬蟲(chóng)論壇, Python即時(shí)網(wǎng)路爬蟲(chóng)項目: 內容提取器的定義
1, GooSeeker開(kāi)源Python網(wǎng)絡(luò )爬蟲(chóng)GitHub源
讓你從零開(kāi)始學(xué)會(huì )寫(xiě)爬蟲(chóng)的5個(gè)教程(Python)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 279 次瀏覽 ? 2020-06-09 08:02
其實(shí)懂了以后,寫(xiě)個(gè)爬蟲(chóng)腳本是很簡(jiǎn)單的,但是對于菜鳥(niǎo)來(lái)說(shuō)卻并不是這么容易。實(shí)驗樓就給這些想學(xué)寫(xiě)爬蟲(chóng),卻苦于沒(méi)有詳盡教程的小伙伴推薦5個(gè)爬蟲(chóng)教程,都是基于Python語(yǔ)言開(kāi)發(fā)的,因此可能更適宜有一定Python基礎的人進(jìn)行學(xué)習。
首先介紹這個(gè)教程,比較簡(jiǎn)單,也容易上手,只要有Python基礎的人都可以跟隨教程去寫(xiě)天氣數據爬蟲(chóng)。先跟隨教程動(dòng)手敲一遍再說(shuō),畢竟先講一大堆理論知識,是太枯燥無(wú)味的。
學(xué)完第一個(gè)教程以后,就可以學(xué)習這個(gè)教程了,因為有第一個(gè)教程的基礎python爬蟲(chóng)教程,對爬蟲(chóng)有了一個(gè)大約的認知,但對其中的一些原理還不太清楚,那么學(xué)習這個(gè)教程就太必要啦,這個(gè)教程十分詳盡的介紹了爬蟲(chóng)的原理等一些基礎知識,最后教你用爬蟲(chóng)爬名模相片。
前面寫(xiě)了兩個(gè)爬蟲(chóng)腳本,理論和實(shí)踐都有了,這個(gè)時(shí)侯可以再找個(gè)項目練練手,熟悉一下,這個(gè)項目就是教你一步步實(shí)現一個(gè)天貓女郎圖片搜集爬蟲(chóng)。
當然爬蟲(chóng)也是有很多種的,這個(gè)教程就介紹幾種實(shí)現爬蟲(chóng)的方式,從傳統的線(xiàn)程池到使用解釋器,每節課實(shí)現一個(gè)小爬蟲(chóng)。另外學(xué)習解釋器的時(shí)侯,會(huì )從原理入手,以ayncio協(xié)程庫為原型,實(shí)現一個(gè)簡(jiǎn)單的異步編程模型。
課程注重爬蟲(chóng)原理的講解以及python爬蟲(chóng)代碼的實(shí)現。
當然,爬蟲(chóng)的應用地方好多,而不只是便捷自己,比如可以寫(xiě)一個(gè)聊天機器人,用爬蟲(chóng)爬網(wǎng)路上的笑話(huà),然后按照用戶(hù)的問(wèn)題回復相應的笑話(huà)內容,是一個(gè)很實(shí)用和常見(jiàn)的一個(gè)功能,學(xué)會(huì )將爬蟲(chóng)應用到實(shí)際的項目中是十分便捷的。 查看全部
寫(xiě)爬蟲(chóng)總是十分吸引IT學(xué)習者,畢竟光聽(tīng)上去就太拉風(fēng)極客,我也曉得很多人學(xué)完基礎知識以后python爬蟲(chóng)教程,第一個(gè)項目開(kāi)發(fā)就是自己寫(xiě)一個(gè)爬蟲(chóng)玩兒。
其實(shí)懂了以后,寫(xiě)個(gè)爬蟲(chóng)腳本是很簡(jiǎn)單的,但是對于菜鳥(niǎo)來(lái)說(shuō)卻并不是這么容易。實(shí)驗樓就給這些想學(xué)寫(xiě)爬蟲(chóng),卻苦于沒(méi)有詳盡教程的小伙伴推薦5個(gè)爬蟲(chóng)教程,都是基于Python語(yǔ)言開(kāi)發(fā)的,因此可能更適宜有一定Python基礎的人進(jìn)行學(xué)習。
首先介紹這個(gè)教程,比較簡(jiǎn)單,也容易上手,只要有Python基礎的人都可以跟隨教程去寫(xiě)天氣數據爬蟲(chóng)。先跟隨教程動(dòng)手敲一遍再說(shuō),畢竟先講一大堆理論知識,是太枯燥無(wú)味的。
學(xué)完第一個(gè)教程以后,就可以學(xué)習這個(gè)教程了,因為有第一個(gè)教程的基礎python爬蟲(chóng)教程,對爬蟲(chóng)有了一個(gè)大約的認知,但對其中的一些原理還不太清楚,那么學(xué)習這個(gè)教程就太必要啦,這個(gè)教程十分詳盡的介紹了爬蟲(chóng)的原理等一些基礎知識,最后教你用爬蟲(chóng)爬名模相片。
前面寫(xiě)了兩個(gè)爬蟲(chóng)腳本,理論和實(shí)踐都有了,這個(gè)時(shí)侯可以再找個(gè)項目練練手,熟悉一下,這個(gè)項目就是教你一步步實(shí)現一個(gè)天貓女郎圖片搜集爬蟲(chóng)。
當然爬蟲(chóng)也是有很多種的,這個(gè)教程就介紹幾種實(shí)現爬蟲(chóng)的方式,從傳統的線(xiàn)程池到使用解釋器,每節課實(shí)現一個(gè)小爬蟲(chóng)。另外學(xué)習解釋器的時(shí)侯,會(huì )從原理入手,以ayncio協(xié)程庫為原型,實(shí)現一個(gè)簡(jiǎn)單的異步編程模型。
課程注重爬蟲(chóng)原理的講解以及python爬蟲(chóng)代碼的實(shí)現。
當然,爬蟲(chóng)的應用地方好多,而不只是便捷自己,比如可以寫(xiě)一個(gè)聊天機器人,用爬蟲(chóng)爬網(wǎng)路上的笑話(huà),然后按照用戶(hù)的問(wèn)題回復相應的笑話(huà)內容,是一個(gè)很實(shí)用和常見(jiàn)的一個(gè)功能,學(xué)會(huì )將爬蟲(chóng)應用到實(shí)際的項目中是十分便捷的。
【蘋(píng)果IP代理】 8大高效的Python爬蟲(chóng)框架,你用過(guò)幾個(gè)?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 279 次瀏覽 ? 2020-06-09 08:01
4.Portia Portia 是一個(gè)開(kāi)源可視化爬蟲(chóng)工具,可使您在不需要任何編程知識的情況下爬取網(wǎng)站!簡(jiǎn)單地注釋您感興趣的頁(yè)面爬蟲(chóng)代理軟件爬蟲(chóng)代理軟件,Portia 將創(chuàng )建一個(gè)蜘蛛來(lái)從類(lèi)似的頁(yè)面提取數據。5.Newspaper Newspaper 可以拿來(lái)提取新聞、文章和內容剖析。使用多線(xiàn) 程,支持 10 多種語(yǔ)言等。 6.Beautiful Soup Beautiful Soup 是一個(gè)可以從 HTML 或 XML 文件中提取數據 的 Python 庫.它還能通過(guò)你喜歡的轉換器實(shí)現慣用的文檔導航, 查找,修改文檔的方法.Beautiful Soup 會(huì )幫你節約數小時(shí)甚至數天 的工作時(shí)間。 7.Grab Grab 是一個(gè)用于建立 Web 刮板的 Python 框架。借助 Grab, 您可以建立各類(lèi)復雜的網(wǎng)頁(yè)抓取工具,從簡(jiǎn)單的 5 行腳本到處理 數百萬(wàn)個(gè)網(wǎng)頁(yè)的復雜異步網(wǎng)站抓取工具。Grab 提供一個(gè) API 用于 執行網(wǎng)路懇求和處理接收到的內容,例如與 HTML 文檔的 DOM 樹(shù)進(jìn)行交互。 8.Cola Cola 是一個(gè)分布式的爬蟲(chóng)框架,對于用戶(hù)來(lái)說(shuō),只需編撰幾 個(gè)特定的函數,而無(wú)需關(guān)注分布式運行的細節。任務(wù)會(huì )手動(dòng)分配 到多臺機器上,整個(gè)過(guò)程對用戶(hù)是透明的。 查看全部
【蘋(píng)果 IP 代理】8 大高效的 Python 爬蟲(chóng)框架,你用過(guò)幾個(gè)? 【蘋(píng)果 IP 代理】大數據時(shí)代下,數據采集推動(dòng)著(zhù)數據剖析, 數據剖析加快發(fā)展。但是在這個(gè)過(guò)程中會(huì )出現好多問(wèn)題。拿最簡(jiǎn) 單最基礎的爬蟲(chóng)采集數據為例,過(guò)程中還會(huì )面臨,IP 被封,爬取 受限、違法操作等多種問(wèn)題,所以在爬取數據之前,一定要了解 好預爬網(wǎng)站是否涉及違規操作,找到合適的代理 IP 訪(fǎng)問(wèn)網(wǎng)站等 一系列問(wèn)題。今天我們就來(lái)講講這些高效的爬蟲(chóng)框架。 1.Scrapy Scrapy 是一個(gè)為了爬取網(wǎng)站數據,提取結構性數據而編撰的 應用框架。 可以應用在包括數據挖掘,信息處理或儲存歷史數 據等一系列的程序中。。用這個(gè)框架可以輕松爬出來(lái)如亞馬遜商 品信息之類(lèi)的數據。 2.PySpider pyspider 是一個(gè)用 python 實(shí)現的功能強悍的網(wǎng)路爬蟲(chóng)系統, 能在瀏覽器界面上進(jìn)行腳本的編撰,功能的調度和爬取結果的實(shí) 時(shí)查看,后端使用常用的數據庫進(jìn)行爬取結果的儲存,還能定時(shí) 設置任務(wù)與任務(wù)優(yōu)先級等。 3.Crawley Crawley 可以高速爬取對應網(wǎng)站的內容,支持關(guān)系和非關(guān)系 數據庫,數據可以導入為 JSON、XML 等。
4.Portia Portia 是一個(gè)開(kāi)源可視化爬蟲(chóng)工具,可使您在不需要任何編程知識的情況下爬取網(wǎng)站!簡(jiǎn)單地注釋您感興趣的頁(yè)面爬蟲(chóng)代理軟件爬蟲(chóng)代理軟件,Portia 將創(chuàng )建一個(gè)蜘蛛來(lái)從類(lèi)似的頁(yè)面提取數據。5.Newspaper Newspaper 可以拿來(lái)提取新聞、文章和內容剖析。使用多線(xiàn) 程,支持 10 多種語(yǔ)言等。 6.Beautiful Soup Beautiful Soup 是一個(gè)可以從 HTML 或 XML 文件中提取數據 的 Python 庫.它還能通過(guò)你喜歡的轉換器實(shí)現慣用的文檔導航, 查找,修改文檔的方法.Beautiful Soup 會(huì )幫你節約數小時(shí)甚至數天 的工作時(shí)間。 7.Grab Grab 是一個(gè)用于建立 Web 刮板的 Python 框架。借助 Grab, 您可以建立各類(lèi)復雜的網(wǎng)頁(yè)抓取工具,從簡(jiǎn)單的 5 行腳本到處理 數百萬(wàn)個(gè)網(wǎng)頁(yè)的復雜異步網(wǎng)站抓取工具。Grab 提供一個(gè) API 用于 執行網(wǎng)路懇求和處理接收到的內容,例如與 HTML 文檔的 DOM 樹(shù)進(jìn)行交互。 8.Cola Cola 是一個(gè)分布式的爬蟲(chóng)框架,對于用戶(hù)來(lái)說(shuō),只需編撰幾 個(gè)特定的函數,而無(wú)需關(guān)注分布式運行的細節。任務(wù)會(huì )手動(dòng)分配 到多臺機器上,整個(gè)過(guò)程對用戶(hù)是透明的。
終于知曉python網(wǎng)路爬蟲(chóng)的作用
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 281 次瀏覽 ? 2020-06-08 08:00
python網(wǎng)路爬蟲(chóng)的作用
1.做為通用搜索引擎網(wǎng)頁(yè)收集器。
2.做垂直搜索引擎.
3.科學(xué)研究:在線(xiàn)人類(lèi)行為,在線(xiàn)社群演變,人類(lèi)動(dòng)力學(xué)研究,計量社會(huì )學(xué),復雜網(wǎng)路,數據挖掘,等領(lǐng)域的實(shí)證研究都須要大量數據,網(wǎng)絡(luò )爬蟲(chóng)是搜集相關(guān)數據的神器。
4.偷窺,hacking,發(fā)垃圾郵件……
request懇求包含哪些
當我們通過(guò)瀏覽器向服務(wù)器發(fā)送request懇求時(shí),這個(gè)request包含了一些哪些信息呢?我們可以通過(guò)chrome的開(kāi)發(fā)者工具進(jìn)行說(shuō)明(如果不知道怎樣使用看本篇備注)。
請求方法:最常用的懇求方法包括get懇求和post懇求。post懇求在開(kāi)發(fā)中最常見(jiàn)的是通過(guò)表單進(jìn)行遞交,從用戶(hù)角度來(lái)講網(wǎng)絡(luò )爬蟲(chóng) 作用,最常見(jiàn)的就是登入驗證。當你須要輸入一些信息進(jìn)行登陸的時(shí)侯,這次懇求即為post懇求。
url統一資源定位符:一個(gè)網(wǎng)址,一張圖片,一個(gè)視頻等都可以用url去定義。當我們懇求一個(gè)網(wǎng)頁(yè)時(shí),我們可以查看network標簽網(wǎng)絡(luò )爬蟲(chóng) 作用,第一個(gè)一般是一個(gè)document,也就是說(shuō)這個(gè)document是一個(gè)未加外部圖片、css、js等渲染的html代碼,在這個(gè)document的下邊我們會(huì )聽(tīng)到一系列的jpg,js等,這是瀏覽器按照html代碼發(fā)起的一次又一次的懇求,而懇求的地址,即為html文檔中圖片、js等的url地址
request headers:請求頭,包括此次懇求的懇求類(lèi)型,cookie信息以及瀏覽器類(lèi)型等。 這個(gè)懇求頭在我們進(jìn)行網(wǎng)頁(yè)抓取的時(shí)侯還是有些作用的,服務(wù)器會(huì )通過(guò)解析懇求頭來(lái)進(jìn)行信息的初審,判斷此次懇求是一次合法的懇求。所以當我們通過(guò)程序偽裝瀏覽器進(jìn)行懇求的時(shí)侯,就可以設置一下懇求頭的信息。
請求體:post懇求會(huì )把用戶(hù)信息包裝在form-data上面進(jìn)行遞交,因此相比于get懇求,post懇求的Headers標簽的內容會(huì )多出Form Data這個(gè)信息包。get懇求可以簡(jiǎn)單的理解為普通的搜索回車(chē),信息將會(huì )以?間隔添加在url的旁邊。
為什么python適宜寫(xiě)爬蟲(chóng)
1)抓取網(wǎng)頁(yè)本身的插口
相比與其他靜態(tài)編程語(yǔ)言,如java,c#,C++,python抓取網(wǎng)頁(yè)文檔的插口更簡(jiǎn)約;相比其他動(dòng)態(tài)腳本語(yǔ)言,如perl,shell,python的urllib2包提供了較為完整的訪(fǎng)問(wèn)網(wǎng)頁(yè)文檔的API。(當然ruby也是挺好的選擇)
此外,抓取網(wǎng)頁(yè)有時(shí)候須要模擬瀏覽器的行為,很多網(wǎng)站對于死板的爬蟲(chóng)抓取都是封殺的。這是我們須要模擬user agent的行為構造合適的懇求,譬如模擬用戶(hù)登錄、模擬session/cookie的儲存和設置。在python里都有特別優(yōu)秀的第三方包幫你搞定,如Requests,mechanize
2)網(wǎng)頁(yè)抓取后的處理
抓取的網(wǎng)頁(yè)一般須要處理,比如過(guò)濾html標簽,提取文本等。python的beautifulsoap提供了簡(jiǎn)約的文檔處理功能,能用極短的代碼完成大部分文檔的處理。
其實(shí)以上功能好多語(yǔ)言和工具都能做,但是用python才能干得最快,最干凈。Life is short, u need python.
聚焦爬蟲(chóng)過(guò)濾方式
1.淺聚焦爬蟲(chóng)
選取符合目標主題的種子URL,例如我們定義抓取的信息為急聘信息,我們便可將急聘網(wǎng)站的URL(拉勾網(wǎng)、大街網(wǎng)等)作為種子URL,這樣便保證了抓取內容與我們定義的主題的一致性。
2.深聚焦爬蟲(chóng)
一般有兩種,一是針對內容二是針對URL。其中針對內容的如頁(yè)面中絕大部分超鏈接都是帶有錨文本的,我們可以依據錨文本進(jìn)行篩選。 查看全部
python網(wǎng)路爬蟲(chóng)的作用
1.做為通用搜索引擎網(wǎng)頁(yè)收集器。
2.做垂直搜索引擎.
3.科學(xué)研究:在線(xiàn)人類(lèi)行為,在線(xiàn)社群演變,人類(lèi)動(dòng)力學(xué)研究,計量社會(huì )學(xué),復雜網(wǎng)路,數據挖掘,等領(lǐng)域的實(shí)證研究都須要大量數據,網(wǎng)絡(luò )爬蟲(chóng)是搜集相關(guān)數據的神器。
4.偷窺,hacking,發(fā)垃圾郵件……
request懇求包含哪些
當我們通過(guò)瀏覽器向服務(wù)器發(fā)送request懇求時(shí),這個(gè)request包含了一些哪些信息呢?我們可以通過(guò)chrome的開(kāi)發(fā)者工具進(jìn)行說(shuō)明(如果不知道怎樣使用看本篇備注)。
請求方法:最常用的懇求方法包括get懇求和post懇求。post懇求在開(kāi)發(fā)中最常見(jiàn)的是通過(guò)表單進(jìn)行遞交,從用戶(hù)角度來(lái)講網(wǎng)絡(luò )爬蟲(chóng) 作用,最常見(jiàn)的就是登入驗證。當你須要輸入一些信息進(jìn)行登陸的時(shí)侯,這次懇求即為post懇求。
url統一資源定位符:一個(gè)網(wǎng)址,一張圖片,一個(gè)視頻等都可以用url去定義。當我們懇求一個(gè)網(wǎng)頁(yè)時(shí),我們可以查看network標簽網(wǎng)絡(luò )爬蟲(chóng) 作用,第一個(gè)一般是一個(gè)document,也就是說(shuō)這個(gè)document是一個(gè)未加外部圖片、css、js等渲染的html代碼,在這個(gè)document的下邊我們會(huì )聽(tīng)到一系列的jpg,js等,這是瀏覽器按照html代碼發(fā)起的一次又一次的懇求,而懇求的地址,即為html文檔中圖片、js等的url地址
request headers:請求頭,包括此次懇求的懇求類(lèi)型,cookie信息以及瀏覽器類(lèi)型等。 這個(gè)懇求頭在我們進(jìn)行網(wǎng)頁(yè)抓取的時(shí)侯還是有些作用的,服務(wù)器會(huì )通過(guò)解析懇求頭來(lái)進(jìn)行信息的初審,判斷此次懇求是一次合法的懇求。所以當我們通過(guò)程序偽裝瀏覽器進(jìn)行懇求的時(shí)侯,就可以設置一下懇求頭的信息。
請求體:post懇求會(huì )把用戶(hù)信息包裝在form-data上面進(jìn)行遞交,因此相比于get懇求,post懇求的Headers標簽的內容會(huì )多出Form Data這個(gè)信息包。get懇求可以簡(jiǎn)單的理解為普通的搜索回車(chē),信息將會(huì )以?間隔添加在url的旁邊。
為什么python適宜寫(xiě)爬蟲(chóng)
1)抓取網(wǎng)頁(yè)本身的插口
相比與其他靜態(tài)編程語(yǔ)言,如java,c#,C++,python抓取網(wǎng)頁(yè)文檔的插口更簡(jiǎn)約;相比其他動(dòng)態(tài)腳本語(yǔ)言,如perl,shell,python的urllib2包提供了較為完整的訪(fǎng)問(wèn)網(wǎng)頁(yè)文檔的API。(當然ruby也是挺好的選擇)
此外,抓取網(wǎng)頁(yè)有時(shí)候須要模擬瀏覽器的行為,很多網(wǎng)站對于死板的爬蟲(chóng)抓取都是封殺的。這是我們須要模擬user agent的行為構造合適的懇求,譬如模擬用戶(hù)登錄、模擬session/cookie的儲存和設置。在python里都有特別優(yōu)秀的第三方包幫你搞定,如Requests,mechanize
2)網(wǎng)頁(yè)抓取后的處理
抓取的網(wǎng)頁(yè)一般須要處理,比如過(guò)濾html標簽,提取文本等。python的beautifulsoap提供了簡(jiǎn)約的文檔處理功能,能用極短的代碼完成大部分文檔的處理。
其實(shí)以上功能好多語(yǔ)言和工具都能做,但是用python才能干得最快,最干凈。Life is short, u need python.
聚焦爬蟲(chóng)過(guò)濾方式
1.淺聚焦爬蟲(chóng)
選取符合目標主題的種子URL,例如我們定義抓取的信息為急聘信息,我們便可將急聘網(wǎng)站的URL(拉勾網(wǎng)、大街網(wǎng)等)作為種子URL,這樣便保證了抓取內容與我們定義的主題的一致性。
2.深聚焦爬蟲(chóng)
一般有兩種,一是針對內容二是針對URL。其中針對內容的如頁(yè)面中絕大部分超鏈接都是帶有錨文本的,我們可以依據錨文本進(jìn)行篩選。


