亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久

python多線(xiàn)程并發(fā)

python多線(xiàn)程并發(fā)

使用Python編撰多線(xiàn)程爬蟲(chóng)抓取百度貼吧郵箱與手機號

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 502 次瀏覽 ? 2020-07-05 08:00 ? 來(lái)自相關(guān)話(huà)題

  不知道你們春節都是如何過(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黑魔法之描述符 查看全部

  不知道你們春節都是如何過(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)到底比其他語(yǔ)言好在哪兒呢?

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 305 次瀏覽 ? 2020-05-25 08:02 ? 來(lái)自相關(guān)話(huà)題

  07-22
  
  2038
  哪種語(yǔ)言合適寫(xiě)爬蟲(chóng)程序
  1、如果是定向爬取幾個(gè)頁(yè)面,做一些簡(jiǎn)單的頁(yè)面解析,爬取效率不是核心要求,這么用哪些語(yǔ)言差別不大。其實(shí)要是頁(yè)面結構復雜,正則表達式寫(xiě)得巨復雜,尤其是用過(guò)這些支持xpath的解釋器/爬蟲(chóng)庫后,才會(huì )發(fā)覺(jué)此種方法盡管入門(mén)門(mén)檻低,但擴充性、可維護性等都奇差。因而此種情況下還是推薦采用一些現成的爬蟲(chóng)庫,例如xpath、多線(xiàn)程支持還是必須考慮的誘因。2、如果是定向爬取,且主要目標是解析...
  延瓚
  01-01
  
  1萬(wàn)+
  Python/打響2019年第一炮-Python爬蟲(chóng)入門(mén)(一)
  打響2019第一炮-Python爬蟲(chóng)入門(mén)?2018年早已成為過(guò)去,還記得在2018年元旦寫(xiě)過(guò)一篇【Shell編程】打響2018第一炮-shell編程之for循環(huán)句子,那在此時(shí)此刻,也是寫(xiě)一篇關(guān)于編程方面,不過(guò)要比18年的稍稍中級點(diǎn)。So,mark一下,也希望對您有所幫助。?步入題外話(huà),在雙十二想必你們都逛過(guò)網(wǎng)店and易迅,例如我們須要買(mǎi)一部手機或筆記本,而且我們須要點(diǎn)開(kāi)手機或則筆記本頁(yè)面看......
  ROSE_ty的博客
  03-04
  
  2897
  Python爬蟲(chóng)出現?亂碼的解決辦法
  明天學(xué)習Python爬蟲(chóng),再讀取頁(yè)面內容時(shí)出現以下情況,雖然使用了‘utf-8’后來(lái)通過(guò)閱讀文章,將編碼改為GBK后可正常顯示...
  ahkeyan的博客
  03-15
  
  1933
  網(wǎng)路爬蟲(chóng)嘗試(VB編撰)
  PrivateSubForm_Load()a=getHTTPPage(“”)b=Split(a,“[”)(1)c=Split(b,“]”)(0)MsgBoxcEndSubFunctiongetHTTPPage(url)OnErrorResumeNextDimhttpSethttp=CreateObj...
  qq_41514083的博客
  07-17
  
  1307
  IDEA中JDBC的使用--完成對于數據庫中數據的增刪改查
  IDEA中JDBC的使用--完成對于數據庫中數據的增刪改查1.在IDEA中新建一個(gè)項目2.進(jìn)行各個(gè)類(lèi)的編撰3.項目結果展示1.在IDEA中新建一個(gè)項目1.1點(diǎn)擊右上角file,在new中選擇project,在兩側選擇Java項目,選擇自己所安裝的SDK包,點(diǎn)擊next1.2繼續點(diǎn)擊next1.3決定項目的名子以及項目?jì)Υ娴奈募A,然后點(diǎn)擊finish,完成項目的創(chuàng )建2.進(jìn)行各個(gè)類(lèi)的......
  weixin_33863087的博客
  04-25
  
  2255
  爬蟲(chóng)可以使用哪些語(yǔ)言
  有好多剛才做爬蟲(chóng)工作者得菜鳥(niǎo)常常會(huì )問(wèn)道這樣一個(gè)問(wèn)題,做爬蟲(chóng)須要哪些語(yǔ)言,個(gè)人認為任何語(yǔ)言,只要具備訪(fǎng)問(wèn)網(wǎng)路的標準庫,都可以做到這一點(diǎn)。其實(shí)了解必要的爬蟲(chóng)工具也是必然的,比如代理IP剛才接觸爬蟲(chóng),好多菜鳥(niǎo)會(huì )苦惱于用Python來(lái)做爬蟲(chóng),而且無(wú)論是JAVA,PHP還是其他更低級語(yǔ)言,都可以很便捷的實(shí)現,靜態(tài)語(yǔ)言出現錯誤的可能性很低,低級語(yǔ)言運行速率會(huì )更快一些。并且Python的優(yōu)勢在于庫更......
  大數據
  04-24
  
  2341
  網(wǎng)路爬蟲(chóng)有哪些用?如何爬?手把手教你爬網(wǎng)頁(yè)(Python代碼)
  導讀:本文主要分為兩個(gè)部份:一部份是網(wǎng)路爬蟲(chóng)的概述,幫助你們詳盡了解網(wǎng)路爬蟲(chóng);另一部份是HTTP懇求的Python實(shí)現,幫助你們了解Python中實(shí)現HTTP懇求的各類(lèi)方...
  小藍棗的博客
  03-06
  
  4846
  Python爬蟲(chóng)篇-爬取頁(yè)面所有可用的鏈接
  原理也很簡(jiǎn)單,html鏈接都是在a元素里的,我們就是匹配出所有的a元素,其實(shí)a可以是空的鏈接,空的鏈接是None,也可能是無(wú)效的鏈接。我們通過(guò)urllib庫的request來(lái)測試鏈接的有效性。當鏈接無(wú)效的話(huà)會(huì )拋出異常,我們把異常捕獲下來(lái),并提示下來(lái),沒(méi)有異常就是有效的,我們直接顯示下來(lái)就好了。...
  點(diǎn)點(diǎn)寒彬的博客
  05-16
  
  5萬(wàn)+
  簡(jiǎn)單談?wù)凱ython與Go的區別
  背景工作中的主力語(yǔ)言是Python,明年要搞性能測試的工具,因為GIL鎖的緣由,Python的性能實(shí)在是低迷,須要學(xué)一門(mén)性能高的語(yǔ)言來(lái)世成性能測試的壓力端。為此我把眼神置于了如今的新秀Go。經(jīng)過(guò)一段時(shí)間的學(xué)習,也寫(xiě)了一個(gè)小工具,記一下這兩個(gè)語(yǔ)言的區別。需求工具是一個(gè)小爬蟲(chóng),拿來(lái)爬某網(wǎng)站的某個(gè)產(chǎn)品的迭代記錄,實(shí)現邏輯就是運行腳本后,使用者從命令行輸入個(gè)別元素(產(chǎn)品ID等)后網(wǎng)絡(luò )爬蟲(chóng)語(yǔ)言,腳本導入......
  捉蟲(chóng)李高人
  03-05
  
  3萬(wàn)+
  閑話(huà)網(wǎng)路爬蟲(chóng)-CSharp對比Python
  這一期給男子伴們普及下網(wǎng)路爬蟲(chóng)這塊的東西,吹下牛,宣傳一波C#爬蟲(chóng)的優(yōu)勢,希望Python的老鐵們輕噴,哈哈!大致對比了下Python爬蟲(chóng)和C#爬蟲(chóng)的優(yōu)劣勢,可以汲取Python爬蟲(chóng)的框架,進(jìn)一步封裝好C#爬蟲(chóng)須要用到的方方面面,然后用上去還是會(huì )蠻爽的,起碼單看在數據抓取方面不輸Python,Python應該是借助上去做它更擅長(cháng)的其他方面的事情,而不是大勢宣傳它在爬蟲(chóng)方面的......
  Yeoman92的博客
  10-17
  
  6358
  python爬蟲(chóng):使用selenium+ChromeDriver爬取途家網(wǎng)
  本站(途家網(wǎng))通過(guò)常規抓頁(yè)面的方式不能獲取數據,可以使用selenium+ChromeDriver來(lái)獲取頁(yè)面數據。
  dengguawei0519的博客
  02-08
  
  129
 ?。ㄞD)各類(lèi)語(yǔ)言寫(xiě)網(wǎng)路爬蟲(chóng)有哪些優(yōu)點(diǎn)缺點(diǎn)
  我用PHP和Python都寫(xiě)過(guò)爬蟲(chóng)和正文提取程序。最開(kāi)始使用PHP所以先談?wù)凱HP的優(yōu)點(diǎn):1.語(yǔ)言比較簡(jiǎn)單,PHP是極其隨便的一種語(yǔ)言。寫(xiě)上去容易讓你把精力放到你要做的事情上,而不是各類(lèi)句型規則等等。2.各類(lèi)功能模塊齊全,這兒分兩部份:1.網(wǎng)頁(yè)下載:curl等擴充庫;2.文檔解析:dom、xpath、tidy、各種轉碼工具,可能跟題主的問(wèn)題不太一樣,我的爬蟲(chóng)須要提取正......
  hs947463167的博客
  03-06
  
  3300
  基于python的-提高爬蟲(chóng)效率的方法
  #-*-coding:utf-8-*-"""明顯提高爬蟲(chóng)效率的方法:1.換個(gè)性能更好的機器2.網(wǎng)路使用光纖3.多線(xiàn)程4.多進(jìn)程5.分布式6.提高數據的寫(xiě)入速率""""""反爬蟲(chóng)的應對舉措:1.隨機更改User-Agent2.禁用Cookie追蹤3.放慢爬蟲(chóng)速率4......
  shenjian58的博客
  03-22
  
  3萬(wàn)+
  男人更看重女孩的體型臉部,還是思想?
  常常,我們看不進(jìn)去大段大段的邏輯。深刻的哲理,常常短而精悍,一陣見(jiàn)血。問(wèn):產(chǎn)品總監挺漂亮的,有茶點(diǎn)動(dòng),但不曉得合不般配。女孩更看重女孩的體型臉部,還是...
  靜水流深的博客
  03-29
  
  4069
  python爬蟲(chóng)(1)-使用requests和beautifulsoup庫爬取中國天氣網(wǎng)
  python爬蟲(chóng)(1)-使用requests和beautifulsoup庫爬取中國天氣網(wǎng)使用工具及打算python3.7(python3以上都可以)pycharmIDE(本人習慣使用pycharm,也可以使用其他的)URL:、requests、lxml庫(p...
  天鎮少年
  10-16
  
  2萬(wàn)+
  Python爬蟲(chóng)的N種坐姿
  問(wèn)題的來(lái)歷??前幾天,在陌陌公眾號(Python爬蟲(chóng)及算法)上有個(gè)人問(wèn)了筆者一個(gè)問(wèn)題,怎樣借助爬蟲(chóng)來(lái)實(shí)現如下的需求,須要爬取的網(wǎng)頁(yè)如下(網(wǎng)址為::WhatLinksHere/Q5&limit=500&from=0):??我們的需求為爬取白色框框內的名人(有500條記錄,圖片只展......
  weixin_42530834的博客
  06-23
  
  3萬(wàn)+
  一、最簡(jiǎn)單的爬蟲(chóng)(python3爬蟲(chóng)小白系列文章)
  運行平臺:WindowsPython版本:Python3.xIDE:Pycharm2017.2.4看了崔老師的python3網(wǎng)路爬蟲(chóng)實(shí)戰,獲益頗豐,為了幫助自己更好的理解這種知識點(diǎn),于是準備趁著(zhù)這股熱乎勁,針對爬蟲(chóng)實(shí)戰進(jìn)行一系列的教程。閱讀文章前,我會(huì )默認你早已具備一下幾個(gè)要素1.python3安裝完畢Windows:
  Zhangguohao666的博客
  03-30
  
  4萬(wàn)+
  Python爬蟲(chóng),高清美圖我全都要(彼岸桌面墻紙)
  爬取彼岸桌面網(wǎng)站較為簡(jiǎn)單,用到了requests、lxml、BeautifulSoup4
  啟艦
  03-23
  
  3萬(wàn)+
  程序員結業(yè)去大公司好還是小公司好?
  其實(shí)大公司并不是人人都能進(jìn),但我仍建議還未結業(yè)的朋友,竭力地通過(guò)校招向大公司擠,即便擠進(jìn)去,你這一生會(huì )容易好多。大公司那里好?沒(méi)能進(jìn)大公司如何辦?答案都在這兒了,記得幫我點(diǎn)贊哦。目錄:技術(shù)氣氛內部晉升與跳槽啥也沒(méi)學(xué)會(huì ),公司倒閉了?不同的人脈圈,注定會(huì )有不同的結果沒(méi)能去大廠(chǎng)如何辦?一、技術(shù)氣氛綜觀(guān)整個(gè)程序員技術(shù)領(lǐng)域,那個(gè)在行業(yè)有所名氣的大牛,不是在大廠(chǎng)?并且眾所......
  weixin_34132768的博客
  12-12
  
  599
  為何python爬蟲(chóng)工程師崗位如此火爆?
  哪些是網(wǎng)路爬蟲(chóng)?網(wǎng)路爬蟲(chóng)是一個(gè)手動(dòng)提取網(wǎng)頁(yè)的程序,它為搜索引擎從萬(wàn)維網(wǎng)上下載網(wǎng)頁(yè),是搜索引擎的重要組成。傳統爬蟲(chóng)從一個(gè)或若干初始網(wǎng)頁(yè)的URL開(kāi)始,獲得初始網(wǎng)頁(yè)上的URL,在抓取網(wǎng)頁(yè)的過(guò)程中,不斷從當前頁(yè)面上抽取新的URL裝入隊列,直至滿(mǎn)足系統的一定停止條件。爬蟲(chóng)有哪些用?做為通用搜索引擎網(wǎng)頁(yè)搜集器。(google,baidu)做垂直搜索引擎.科學(xué)研究:在線(xiàn)人類(lèi)行為,在線(xiàn)社群演變,人類(lèi)動(dòng)力學(xué)研究,計......
  學(xué)習python的正確坐姿
  05-06
  
  1209
  python爬蟲(chóng)13|秒爬,python這多線(xiàn)程爬取速率也太猛了,此次就是要讓你的爬蟲(chóng)效率杠杠的
  快快了啊嘿小侄兒想啥呢明天這篇爬蟲(chóng)教程的主題就是一個(gè)字快想要做到秒爬就須要曉得哪些是多進(jìn)程哪些是多線(xiàn)程哪些是輪詢(xún)(微線(xiàn)程)你先去沏杯茶坐出來(lái)小帥b這就好好給你說(shuō)道說(shuō)道關(guān)于線(xiàn)程這玩意兒沏好茶了嗎這么...
  weixin_34273481的博客
  05-31
  
  1728
  8個(gè)最高效的Python爬蟲(chóng)框架,你用過(guò)幾個(gè)?
  小編搜集了一些較為高效的Python爬蟲(chóng)框架。分享給你們。1.ScrapyScrapy是一個(gè)為了爬取網(wǎng)站數據,提取結構性數據而編撰的應用框架??梢詰迷诎〝祿诰?,信息處理或儲存歷史數據等一系列的程序中。。用這個(gè)框架可以輕松爬出來(lái)如亞馬遜商品信息之類(lèi)的數據。項目地址:是一個(gè)用python實(shí)現的功能......
  空悲切
  12-23
  
  1萬(wàn)+
  怎么高貴地使用c語(yǔ)言編撰爬蟲(chóng)
  序言你們在平?;蚨嗷蛏俚鼐蜁?huì )有編撰網(wǎng)路爬蟲(chóng)的需求。通常來(lái)說(shuō),編撰爬蟲(chóng)的首選自然非python莫屬,除此之外,java等語(yǔ)言也是不錯的選擇。選擇上述語(yǔ)言的誘因不僅僅在于它們均有十分不錯的網(wǎng)路懇求庫和字符串處理庫,還在于基于上述語(yǔ)言的爬蟲(chóng)框架十分之多和健全。良好的爬蟲(chóng)框架可以確保爬蟲(chóng)程序的穩定性,以及編撰程序的方便性。所以,這個(gè)cspider爬蟲(chóng)庫的使命在于,我們才能使用c語(yǔ)言,仍然還能高貴地編撰爬...
  CSDN資訊
  09-03
  
  4萬(wàn)+
  學(xué)Python后究竟能干哪些?網(wǎng)友:我太難了
  覺(jué)得全世界營(yíng)銷(xiāo)文都在推Python,并且找不到工作的話(huà),又有那個(gè)機構會(huì )站下來(lái)給我推薦工作?筆者冷靜剖析多方數據,想跟你們說(shuō):關(guān)于趕超老牌霸主Java,過(guò)去幾年間Pytho...
  Rainbow
  04-28
  
  2萬(wàn)+
  python爬蟲(chóng)之一:爬取網(wǎng)頁(yè)小說(shuō)(魂破九天)
  近日做一個(gè)項目須要用到python,只懂皮毛的我花了三天時(shí)間將python重新?lián)炱鹂幸豢?,終于對python有了一定的認識。之后有按照爬蟲(chóng)基本原理爬取了一本小說(shuō),其他爬取小說(shuō)的方式類(lèi)似,結果見(jiàn)個(gè)人資源下載(本想下載分設置為0,結果CSDN設置最低為2分,沒(méi)有積分的可以加我qq要該小說(shuō))。**爬蟲(chóng)原理:1、模擬人打開(kāi)一頁(yè)小說(shuō)網(wǎng)頁(yè)2、將網(wǎng)頁(yè)保存出來(lái)......
  畢易方達的博客
  08-09
  
  7795
  全面了解Java中Native關(guān)鍵字的作用
  初次遇到native是在java.lang.Object源碼中的一個(gè)hashCode方式:1publicnativeinthashCode();為何有個(gè)native呢?這是我所要學(xué)習的地方。所以下邊想要總結下native。一、認識native即JNI,JavaNativeInterface但凡一種語(yǔ)言,都希望是純。例如解決某一個(gè)方案都喜歡就單單這個(gè)語(yǔ)言......
  做人還是高調點(diǎn)
  05-08
  
  4萬(wàn)+
  筆試:第十六章:Java高級開(kāi)發(fā)(16k)
  HashMap底層實(shí)現原理,黑紅樹(shù),B+樹(shù),B樹(shù)的結構原理Spring的AOP和IOC是哪些?它們常見(jiàn)的使用場(chǎng)景有什么?Spring事務(wù),事務(wù)的屬性,傳播行為,數據庫隔離級別Spring和SpringMVC,MyBatis以及SpringBoot的注解分別有什么?SpringMVC的工作原理,SpringBoot框架的優(yōu)點(diǎn),MyBatis框架的優(yōu)點(diǎn)SpringCould組件有什么,她們......
  Bo_wen_的博客
  03-13
  
  16萬(wàn)+
  python網(wǎng)路爬蟲(chóng)入門(mén)(一)———第一個(gè)python爬蟲(chóng)實(shí)例
  近來(lái)七天學(xué)習了一下python,并自己寫(xiě)了一個(gè)網(wǎng)路爬蟲(chóng)的反例。python版本:3.5IDE:pycharm5.0.4要用到的包可以用pycharm下載:File->DefaultSettings->DefaultProject->ProjectInterpreter選擇python版本并點(diǎn)一側的減號安裝想要的包我選擇的網(wǎng)站是中國天氣網(wǎng)中的上海天氣,打算抓取近來(lái)...
  jsmok_xingkong的博客
  11-05
  
  3143
  Python-爬蟲(chóng)初體驗
  在網(wǎng)易云課堂上看的教學(xué)視頻,如今來(lái)鞏固一下知識:1.先確定自己要爬的網(wǎng)站,以新浪新聞網(wǎng)站為例確importrequests#跟java的導包差不多,python叫導出庫res=requests.get('#039;)#爬取網(wǎng)頁(yè)內容res.encoding='utf-8'#將得到的網(wǎng)頁(yè)內容轉碼,防止亂...
  CSDN資訊
  03-27
  
  4萬(wàn)+
  無(wú)代碼時(shí)代將至,程序員怎樣保住飯碗?
  編程語(yǔ)言層出不窮,從最初的機器語(yǔ)言到現在2500種以上的中級語(yǔ)言,程序員們大呼“學(xué)到頭禿”。程序員一邊面臨編程語(yǔ)言不斷推陳出新,一邊面臨因為許多代碼已存在,程序員編撰新應用程序時(shí)存在重復“搬磚”的現象。無(wú)代碼/低代碼編程應運而生。無(wú)代碼/低代碼是一種創(chuàng )建應用的方式,它可以讓開(kāi)發(fā)者使用最少的編碼知識來(lái)快速開(kāi)發(fā)應用程序。開(kāi)發(fā)者通過(guò)圖形界面中,可視化建模來(lái)組裝和配置應用程序。這樣一來(lái),開(kāi)發(fā)者直......
  明明如月的專(zhuān)欄
  03-01
  
  1萬(wàn)+
  將一個(gè)插口響應時(shí)間從2s優(yōu)化到200ms以?xún)鹊囊粋€(gè)案例
  一、背景在開(kāi)發(fā)聯(lián)調階段發(fā)覺(jué)一個(gè)插口的響應時(shí)間非常長(cháng),常常超時(shí),囧…本文講講是怎樣定位到性能困局以及更改的思路,將該插口從2s左右優(yōu)化到200ms以?xún)?。二、步驟2.1定位定位性能困局有兩個(gè)思路,一個(gè)是通過(guò)工具去監控,一個(gè)是通過(guò)經(jīng)驗去猜測。2.1.1工具監控就工具而言,推薦使用arthas,用到的是trace命令具體安裝步驟很簡(jiǎn)單,你們自行研究。我的使用步驟是......
  tboyer
  03-24
  
  95
  python3爬坑日記(二)——大文本讀取
  python3爬坑日記(二)——大文本讀取一般我們使用python讀取文件直接使用:fopen=open("test.txt")str=fopen.read()fopen.close()假如文件內容較小,使用以上方式其實(shí)沒(méi)問(wèn)題。并且,有時(shí)我們須要讀取類(lèi)似字典,日志等富含大量?jì)热莸奈募r(shí)使用上述方式因為顯存緣由常常會(huì )拋出異常。這時(shí)請使用:withopen("test.tx......
  aa804738534的博客
  01-19
  
  646
  STL(四)容器手動(dòng)排序set
  #include<set>#include<iostream>#include<set>#include<string>usingnamespacestd;template<typenameT>voidshowset(set<T>v){for(typenamestd::set...
  薛定諤的雄貓的博客
  04-30
  
  2萬(wàn)+
  怎樣柔美的替換掉代碼中的ifelse
  平常我們在寫(xiě)代碼時(shí),處理不同的業(yè)務(wù)邏輯,用得最多的就是if和else,簡(jiǎn)單粗魯省事,并且ifelse不是最好的方法,本文將通過(guò)設計模式來(lái)替換ifelse,使代碼更高貴簡(jiǎn)約。
  非知名程序員
  01-30
  
  7萬(wàn)+
  非典逼出了天貓和易迅,新冠病毒才能逼出哪些?
  loonggg讀完須要5分鐘速讀僅需2分鐘你們好,我是大家的市長(cháng)。我曉得你們在家里都憋壞了,你們可能相對于封閉在家里“坐月子”,更希望才能盡快下班。明天我帶著(zhù)你們換個(gè)思路來(lái)聊一個(gè)問(wèn)題...
  九章算法的博客
  02-06
  
  19萬(wàn)+
  B站上有什么挺好的學(xué)習資源?
  哇說(shuō)起B站,在小九眼中就是寶藏般的存在,放休假宅在家時(shí)三天刷6、7個(gè)小時(shí)不在話(huà)下,更別提去年的跨年晚宴,我簡(jiǎn)直是跪著(zhù)看完的??!最早你們聚在在B站是為了追番,再后來(lái)我在里面刷歐美新曲和漂亮小妹妹的街舞視頻,近來(lái)三年我和周?chē)耐瑢W(xué)們早已把B站當成學(xué)習課室了,但是學(xué)習成本還免費,真是個(gè)勵志的好平臺ヽ(.??ˇдˇ??;)?下邊我們就來(lái)盤(pán)點(diǎn)一下B站上優(yōu)質(zhì)的學(xué)習資源:綜合類(lèi)Oeasy:綜合......
  王澤嶺的博客
  08-19
  
  479
  幾種語(yǔ)言在爬蟲(chóng)場(chǎng)景下的力量對比
  PHP爬蟲(chóng):代碼簡(jiǎn)單,并發(fā)處理能力較弱:因為當時(shí)PHP沒(méi)有線(xiàn)程、進(jìn)程功能要想實(shí)現并發(fā)須要借用多路復用模型R語(yǔ)言爬蟲(chóng):操作簡(jiǎn)單,功能太弱,只適用于小規模的爬取,不適宜大規模的爬取Python爬蟲(chóng):有著(zhù)各類(lèi)成熟的爬蟲(chóng)框架(eg:scrapy家族),可以便捷高效的下載網(wǎng)頁(yè)而且支持多線(xiàn)程,進(jìn)程模型成熟穩定,爬蟲(chóng)是是一個(gè)典型的多任務(wù)處理場(chǎng)景,懇求頁(yè)面時(shí)會(huì )有較長(cháng)的延后,總體來(lái)說(shuō)更多的是等待,多線(xiàn)......
  九章算法的博客
  03-17
  
  4580
  作為程序員,有沒(méi)有讓你倍感既無(wú)語(yǔ)又崩潰的代碼注釋?zhuān)?br />   作為一個(gè)程序員,堪稱(chēng)是天天通宵來(lái)加班,也難以閱遍無(wú)數的程序代碼,不曉得有多少次看到這些讓人既倍感無(wú)語(yǔ)又奔潰的代碼注釋了。你以為自己能看懂這種代碼,但是有信心可以?xún)?yōu)化這種代碼,一旦你開(kāi)始嘗試這種代碼,你將會(huì )被困在無(wú)盡的熬夜中,在痛斥中結束這段痛楚的歷程。更有有網(wǎng)友坦承,自己寫(xiě)代碼都是拼音變量名和英文注釋?zhuān)瑩谋惶叱龀绦騿T隊伍。下邊這個(gè)代碼注釋大約說(shuō)出了好多寫(xiě)代碼人的心里話(huà)了。//我寫(xiě)這一行的時(shí)侯......
  CSDN大學(xué)
  03-10
  
  2萬(wàn)+
  剛回應!刪庫報復!一行代碼蒸發(fā)數10億!
  年后開(kāi)工大戲,又降低一出:刪庫跑路!此舉直接給公司帶來(lái)數10億的估值蒸發(fā)損失,并引起一段“狗血宿怨劇情”,說(shuō)實(shí)話(huà)電視劇都不敢如此拍!此次不是他人,正是陌陌生態(tài)的第三方服務(wù)商微盟,在這個(gè)"遠程辦公”的節骨眼出事了。2月25日,微盟集團(SEHK:02013)發(fā)布公告稱(chēng),Saas生產(chǎn)環(huán)境及數據受到職工“人為破壞”導致公司當前暫時(shí)未能向顧客提供SaaS產(chǎn)品。犯罪嫌疑人是微盟研制......
  爪白白的個(gè)人博客
  04-25
  
  5萬(wàn)+
  總結了150余個(gè)神奇網(wǎng)站,你不來(lái)看看嗎?
  原博客再更新,可能就沒(méi)了,然后將持續更新本篇博客。
  11-03
  
  8645
  二次型(求梯度)——公式的簡(jiǎn)化
  1.基本方程
  程序人生的博客
  02-11
  
  5636
  大地震!某大廠(chǎng)“硬核”搶人,放話(huà):只要AI人才,中學(xué)結業(yè)都行!
  特斯拉創(chuàng )始人馬斯克,在2019年曾許下好多承諾網(wǎng)絡(luò )爬蟲(chóng)語(yǔ)言,其中一個(gè)就是:2019年末實(shí)現完全的手動(dòng)駕駛。其實(shí)這個(gè)承諾又成了flag,并且不阻礙他去年繼續為這個(gè)承諾努力。這不,就在上周四,馬斯克之間...
  3y
  03-16
  
  9萬(wàn)+
  我說(shuō)我不會(huì )算法,阿里把我掛了。
  不說(shuō)了,字節跳動(dòng)也反手把我掛了。
  qq_40618664的博客
  05-07
  
  3萬(wàn)+
  Auto.JS實(shí)現抖音,刷寶等刷視頻app,自動(dòng)點(diǎn)贊,手動(dòng)滑屏,手動(dòng)切換視頻
  Auto.JS實(shí)現抖音,刷寶等刷視頻app,自動(dòng)點(diǎn)贊,手動(dòng)滑屏,手動(dòng)切換視頻代碼如下auto();varappName=rawInput("","刷寶短視頻");launchApp(appName);sleep("5000");setScreenMetrics(1080,1920);toast("1023732997");sleep("3000");varnum=200...
  lmseo5hy的博客
  05-14
  
  1萬(wàn)+
  Python與其他語(yǔ)言相比異同點(diǎn)python零基礎入門(mén)
  python作為一門(mén)中級編程語(yǔ)言,它的誕生其實(shí)很碰巧,并且它得到程序員的喜愛(ài)卻是必然之路,以下是Python與其他編程語(yǔ)言的異同點(diǎn)對比:1.Python優(yōu)勢:簡(jiǎn)單易學(xué),才能把用其他語(yǔ)言制做的各類(lèi)模塊很輕松地連結在一起。劣勢:速率較慢,且有一些特定情況下才能出現(未能再現)的bug2.C/C++C/C++優(yōu)勢:可以被嵌入任何現代處理器中,幾乎所有操作系統都支持C/C++,跨平臺性十分好劣勢:學(xué)習......
  WUTab的博客
  07-30
  
  2549
  找出鏈表X和Y中所有2n個(gè)元素的中位數
  算法總論第三版,9.3-8算法:假如兩個(gè)字段寬度為1,選出較小的那種一個(gè)否則,取出兩個(gè)字段的中位數。取有較大中位數的鏈表的低區和較低中位數鏈表的高區,組合成新的寬度為n的鏈表。找出新鏈表的中位數思路:既然用遞歸分治,一定有基本情況,基本情況就是鏈表寬度為1.觀(guān)察會(huì )發(fā)覺(jué)總的中位數介于兩個(gè)字段的中位數之間。詳盡證明如下:設總的中位數是MM,XX的中位數是MXM_X,YY的中位數是...
  程松
  03-30
  
  10萬(wàn)+
  5分鐘,6行代碼教你寫(xiě)爬蟲(chóng)?。╬ython)
  5分鐘,6行代碼教你寫(xiě)會(huì )爬蟲(chóng)!適用人士:對數據量需求不大,簡(jiǎn)單的從網(wǎng)站上爬些數據。好,不浪費時(shí)間了,開(kāi)始!先來(lái)個(gè)反例:輸入以下代碼(共6行)importrequestsfromlxmlimporthtmlurl='#039;#須要爬數據的網(wǎng)址page=requests.Session().get(url)tree=html.f... 查看全部

  07-22
  
  2038
  哪種語(yǔ)言合適寫(xiě)爬蟲(chóng)程序
  1、如果是定向爬取幾個(gè)頁(yè)面,做一些簡(jiǎn)單的頁(yè)面解析,爬取效率不是核心要求,這么用哪些語(yǔ)言差別不大。其實(shí)要是頁(yè)面結構復雜,正則表達式寫(xiě)得巨復雜,尤其是用過(guò)這些支持xpath的解釋器/爬蟲(chóng)庫后,才會(huì )發(fā)覺(jué)此種方法盡管入門(mén)門(mén)檻低,但擴充性、可維護性等都奇差。因而此種情況下還是推薦采用一些現成的爬蟲(chóng)庫,例如xpath、多線(xiàn)程支持還是必須考慮的誘因。2、如果是定向爬取,且主要目標是解析...
  延瓚
  01-01
  
  1萬(wàn)+
  Python/打響2019年第一炮-Python爬蟲(chóng)入門(mén)(一)
  打響2019第一炮-Python爬蟲(chóng)入門(mén)?2018年早已成為過(guò)去,還記得在2018年元旦寫(xiě)過(guò)一篇【Shell編程】打響2018第一炮-shell編程之for循環(huán)句子,那在此時(shí)此刻,也是寫(xiě)一篇關(guān)于編程方面,不過(guò)要比18年的稍稍中級點(diǎn)。So,mark一下,也希望對您有所幫助。?步入題外話(huà),在雙十二想必你們都逛過(guò)網(wǎng)店and易迅,例如我們須要買(mǎi)一部手機或筆記本,而且我們須要點(diǎn)開(kāi)手機或則筆記本頁(yè)面看......
  ROSE_ty的博客
  03-04
  
  2897
  Python爬蟲(chóng)出現?亂碼的解決辦法
  明天學(xué)習Python爬蟲(chóng),再讀取頁(yè)面內容時(shí)出現以下情況,雖然使用了‘utf-8’后來(lái)通過(guò)閱讀文章,將編碼改為GBK后可正常顯示...
  ahkeyan的博客
  03-15
  
  1933
  網(wǎng)路爬蟲(chóng)嘗試(VB編撰)
  PrivateSubForm_Load()a=getHTTPPage(“”)b=Split(a,“[”)(1)c=Split(b,“]”)(0)MsgBoxcEndSubFunctiongetHTTPPage(url)OnErrorResumeNextDimhttpSethttp=CreateObj...
  qq_41514083的博客
  07-17
  
  1307
  IDEA中JDBC的使用--完成對于數據庫中數據的增刪改查
  IDEA中JDBC的使用--完成對于數據庫中數據的增刪改查1.在IDEA中新建一個(gè)項目2.進(jìn)行各個(gè)類(lèi)的編撰3.項目結果展示1.在IDEA中新建一個(gè)項目1.1點(diǎn)擊右上角file,在new中選擇project,在兩側選擇Java項目,選擇自己所安裝的SDK包,點(diǎn)擊next1.2繼續點(diǎn)擊next1.3決定項目的名子以及項目?jì)Υ娴奈募A,然后點(diǎn)擊finish,完成項目的創(chuàng )建2.進(jìn)行各個(gè)類(lèi)的......
  weixin_33863087的博客
  04-25
  
  2255
  爬蟲(chóng)可以使用哪些語(yǔ)言
  有好多剛才做爬蟲(chóng)工作者得菜鳥(niǎo)常常會(huì )問(wèn)道這樣一個(gè)問(wèn)題,做爬蟲(chóng)須要哪些語(yǔ)言,個(gè)人認為任何語(yǔ)言,只要具備訪(fǎng)問(wèn)網(wǎng)路的標準庫,都可以做到這一點(diǎn)。其實(shí)了解必要的爬蟲(chóng)工具也是必然的,比如代理IP剛才接觸爬蟲(chóng),好多菜鳥(niǎo)會(huì )苦惱于用Python來(lái)做爬蟲(chóng),而且無(wú)論是JAVA,PHP還是其他更低級語(yǔ)言,都可以很便捷的實(shí)現,靜態(tài)語(yǔ)言出現錯誤的可能性很低,低級語(yǔ)言運行速率會(huì )更快一些。并且Python的優(yōu)勢在于庫更......
  大數據
  04-24
  
  2341
  網(wǎng)路爬蟲(chóng)有哪些用?如何爬?手把手教你爬網(wǎng)頁(yè)(Python代碼)
  導讀:本文主要分為兩個(gè)部份:一部份是網(wǎng)路爬蟲(chóng)的概述,幫助你們詳盡了解網(wǎng)路爬蟲(chóng);另一部份是HTTP懇求的Python實(shí)現,幫助你們了解Python中實(shí)現HTTP懇求的各類(lèi)方...
  小藍棗的博客
  03-06
  
  4846
  Python爬蟲(chóng)篇-爬取頁(yè)面所有可用的鏈接
  原理也很簡(jiǎn)單,html鏈接都是在a元素里的,我們就是匹配出所有的a元素,其實(shí)a可以是空的鏈接,空的鏈接是None,也可能是無(wú)效的鏈接。我們通過(guò)urllib庫的request來(lái)測試鏈接的有效性。當鏈接無(wú)效的話(huà)會(huì )拋出異常,我們把異常捕獲下來(lái),并提示下來(lái),沒(méi)有異常就是有效的,我們直接顯示下來(lái)就好了。...
  點(diǎn)點(diǎn)寒彬的博客
  05-16
  
  5萬(wàn)+
  簡(jiǎn)單談?wù)凱ython與Go的區別
  背景工作中的主力語(yǔ)言是Python,明年要搞性能測試的工具,因為GIL鎖的緣由,Python的性能實(shí)在是低迷,須要學(xué)一門(mén)性能高的語(yǔ)言來(lái)世成性能測試的壓力端。為此我把眼神置于了如今的新秀Go。經(jīng)過(guò)一段時(shí)間的學(xué)習,也寫(xiě)了一個(gè)小工具,記一下這兩個(gè)語(yǔ)言的區別。需求工具是一個(gè)小爬蟲(chóng),拿來(lái)爬某網(wǎng)站的某個(gè)產(chǎn)品的迭代記錄,實(shí)現邏輯就是運行腳本后,使用者從命令行輸入個(gè)別元素(產(chǎn)品ID等)后網(wǎng)絡(luò )爬蟲(chóng)語(yǔ)言,腳本導入......
  捉蟲(chóng)李高人
  03-05
  
  3萬(wàn)+
  閑話(huà)網(wǎng)路爬蟲(chóng)-CSharp對比Python
  這一期給男子伴們普及下網(wǎng)路爬蟲(chóng)這塊的東西,吹下牛,宣傳一波C#爬蟲(chóng)的優(yōu)勢,希望Python的老鐵們輕噴,哈哈!大致對比了下Python爬蟲(chóng)和C#爬蟲(chóng)的優(yōu)劣勢,可以汲取Python爬蟲(chóng)的框架,進(jìn)一步封裝好C#爬蟲(chóng)須要用到的方方面面,然后用上去還是會(huì )蠻爽的,起碼單看在數據抓取方面不輸Python,Python應該是借助上去做它更擅長(cháng)的其他方面的事情,而不是大勢宣傳它在爬蟲(chóng)方面的......
  Yeoman92的博客
  10-17
  
  6358
  python爬蟲(chóng):使用selenium+ChromeDriver爬取途家網(wǎng)
  本站(途家網(wǎng))通過(guò)常規抓頁(yè)面的方式不能獲取數據,可以使用selenium+ChromeDriver來(lái)獲取頁(yè)面數據。
  dengguawei0519的博客
  02-08
  
  129
 ?。ㄞD)各類(lèi)語(yǔ)言寫(xiě)網(wǎng)路爬蟲(chóng)有哪些優(yōu)點(diǎn)缺點(diǎn)
  我用PHP和Python都寫(xiě)過(guò)爬蟲(chóng)和正文提取程序。最開(kāi)始使用PHP所以先談?wù)凱HP的優(yōu)點(diǎn):1.語(yǔ)言比較簡(jiǎn)單,PHP是極其隨便的一種語(yǔ)言。寫(xiě)上去容易讓你把精力放到你要做的事情上,而不是各類(lèi)句型規則等等。2.各類(lèi)功能模塊齊全,這兒分兩部份:1.網(wǎng)頁(yè)下載:curl等擴充庫;2.文檔解析:dom、xpath、tidy、各種轉碼工具,可能跟題主的問(wèn)題不太一樣,我的爬蟲(chóng)須要提取正......
  hs947463167的博客
  03-06
  
  3300
  基于python的-提高爬蟲(chóng)效率的方法
  #-*-coding:utf-8-*-"""明顯提高爬蟲(chóng)效率的方法:1.換個(gè)性能更好的機器2.網(wǎng)路使用光纖3.多線(xiàn)程4.多進(jìn)程5.分布式6.提高數據的寫(xiě)入速率""""""反爬蟲(chóng)的應對舉措:1.隨機更改User-Agent2.禁用Cookie追蹤3.放慢爬蟲(chóng)速率4......
  shenjian58的博客
  03-22
  
  3萬(wàn)+
  男人更看重女孩的體型臉部,還是思想?
  常常,我們看不進(jìn)去大段大段的邏輯。深刻的哲理,常常短而精悍,一陣見(jiàn)血。問(wèn):產(chǎn)品總監挺漂亮的,有茶點(diǎn)動(dòng),但不曉得合不般配。女孩更看重女孩的體型臉部,還是...
  靜水流深的博客
  03-29
  
  4069
  python爬蟲(chóng)(1)-使用requests和beautifulsoup庫爬取中國天氣網(wǎng)
  python爬蟲(chóng)(1)-使用requests和beautifulsoup庫爬取中國天氣網(wǎng)使用工具及打算python3.7(python3以上都可以)pycharmIDE(本人習慣使用pycharm,也可以使用其他的)URL:、requests、lxml庫(p...
  天鎮少年
  10-16
  
  2萬(wàn)+
  Python爬蟲(chóng)的N種坐姿
  問(wèn)題的來(lái)歷??前幾天,在陌陌公眾號(Python爬蟲(chóng)及算法)上有個(gè)人問(wèn)了筆者一個(gè)問(wèn)題,怎樣借助爬蟲(chóng)來(lái)實(shí)現如下的需求,須要爬取的網(wǎng)頁(yè)如下(網(wǎng)址為::WhatLinksHere/Q5&limit=500&from=0):??我們的需求為爬取白色框框內的名人(有500條記錄,圖片只展......
  weixin_42530834的博客
  06-23
  
  3萬(wàn)+
  一、最簡(jiǎn)單的爬蟲(chóng)(python3爬蟲(chóng)小白系列文章)
  運行平臺:WindowsPython版本:Python3.xIDE:Pycharm2017.2.4看了崔老師的python3網(wǎng)路爬蟲(chóng)實(shí)戰,獲益頗豐,為了幫助自己更好的理解這種知識點(diǎn),于是準備趁著(zhù)這股熱乎勁,針對爬蟲(chóng)實(shí)戰進(jìn)行一系列的教程。閱讀文章前,我會(huì )默認你早已具備一下幾個(gè)要素1.python3安裝完畢Windows:
  Zhangguohao666的博客
  03-30
  
  4萬(wàn)+
  Python爬蟲(chóng),高清美圖我全都要(彼岸桌面墻紙)
  爬取彼岸桌面網(wǎng)站較為簡(jiǎn)單,用到了requests、lxml、BeautifulSoup4
  啟艦
  03-23
  
  3萬(wàn)+
  程序員結業(yè)去大公司好還是小公司好?
  其實(shí)大公司并不是人人都能進(jìn),但我仍建議還未結業(yè)的朋友,竭力地通過(guò)校招向大公司擠,即便擠進(jìn)去,你這一生會(huì )容易好多。大公司那里好?沒(méi)能進(jìn)大公司如何辦?答案都在這兒了,記得幫我點(diǎn)贊哦。目錄:技術(shù)氣氛內部晉升與跳槽啥也沒(méi)學(xué)會(huì ),公司倒閉了?不同的人脈圈,注定會(huì )有不同的結果沒(méi)能去大廠(chǎng)如何辦?一、技術(shù)氣氛綜觀(guān)整個(gè)程序員技術(shù)領(lǐng)域,那個(gè)在行業(yè)有所名氣的大牛,不是在大廠(chǎng)?并且眾所......
  weixin_34132768的博客
  12-12
  
  599
  為何python爬蟲(chóng)工程師崗位如此火爆?
  哪些是網(wǎng)路爬蟲(chóng)?網(wǎng)路爬蟲(chóng)是一個(gè)手動(dòng)提取網(wǎng)頁(yè)的程序,它為搜索引擎從萬(wàn)維網(wǎng)上下載網(wǎng)頁(yè),是搜索引擎的重要組成。傳統爬蟲(chóng)從一個(gè)或若干初始網(wǎng)頁(yè)的URL開(kāi)始,獲得初始網(wǎng)頁(yè)上的URL,在抓取網(wǎng)頁(yè)的過(guò)程中,不斷從當前頁(yè)面上抽取新的URL裝入隊列,直至滿(mǎn)足系統的一定停止條件。爬蟲(chóng)有哪些用?做為通用搜索引擎網(wǎng)頁(yè)搜集器。(google,baidu)做垂直搜索引擎.科學(xué)研究:在線(xiàn)人類(lèi)行為,在線(xiàn)社群演變,人類(lèi)動(dòng)力學(xué)研究,計......
  學(xué)習python的正確坐姿
  05-06
  
  1209
  python爬蟲(chóng)13|秒爬,python這多線(xiàn)程爬取速率也太猛了,此次就是要讓你的爬蟲(chóng)效率杠杠的
  快快了啊嘿小侄兒想啥呢明天這篇爬蟲(chóng)教程的主題就是一個(gè)字快想要做到秒爬就須要曉得哪些是多進(jìn)程哪些是多線(xiàn)程哪些是輪詢(xún)(微線(xiàn)程)你先去沏杯茶坐出來(lái)小帥b這就好好給你說(shuō)道說(shuō)道關(guān)于線(xiàn)程這玩意兒沏好茶了嗎這么...
  weixin_34273481的博客
  05-31
  
  1728
  8個(gè)最高效的Python爬蟲(chóng)框架,你用過(guò)幾個(gè)?
  小編搜集了一些較為高效的Python爬蟲(chóng)框架。分享給你們。1.ScrapyScrapy是一個(gè)為了爬取網(wǎng)站數據,提取結構性數據而編撰的應用框架??梢詰迷诎〝祿诰?,信息處理或儲存歷史數據等一系列的程序中。。用這個(gè)框架可以輕松爬出來(lái)如亞馬遜商品信息之類(lèi)的數據。項目地址:是一個(gè)用python實(shí)現的功能......
  空悲切
  12-23
  
  1萬(wàn)+
  怎么高貴地使用c語(yǔ)言編撰爬蟲(chóng)
  序言你們在平?;蚨嗷蛏俚鼐蜁?huì )有編撰網(wǎng)路爬蟲(chóng)的需求。通常來(lái)說(shuō),編撰爬蟲(chóng)的首選自然非python莫屬,除此之外,java等語(yǔ)言也是不錯的選擇。選擇上述語(yǔ)言的誘因不僅僅在于它們均有十分不錯的網(wǎng)路懇求庫和字符串處理庫,還在于基于上述語(yǔ)言的爬蟲(chóng)框架十分之多和健全。良好的爬蟲(chóng)框架可以確保爬蟲(chóng)程序的穩定性,以及編撰程序的方便性。所以,這個(gè)cspider爬蟲(chóng)庫的使命在于,我們才能使用c語(yǔ)言,仍然還能高貴地編撰爬...
  CSDN資訊
  09-03
  
  4萬(wàn)+
  學(xué)Python后究竟能干哪些?網(wǎng)友:我太難了
  覺(jué)得全世界營(yíng)銷(xiāo)文都在推Python,并且找不到工作的話(huà),又有那個(gè)機構會(huì )站下來(lái)給我推薦工作?筆者冷靜剖析多方數據,想跟你們說(shuō):關(guān)于趕超老牌霸主Java,過(guò)去幾年間Pytho...
  Rainbow
  04-28
  
  2萬(wàn)+
  python爬蟲(chóng)之一:爬取網(wǎng)頁(yè)小說(shuō)(魂破九天)
  近日做一個(gè)項目須要用到python,只懂皮毛的我花了三天時(shí)間將python重新?lián)炱鹂幸豢?,終于對python有了一定的認識。之后有按照爬蟲(chóng)基本原理爬取了一本小說(shuō),其他爬取小說(shuō)的方式類(lèi)似,結果見(jiàn)個(gè)人資源下載(本想下載分設置為0,結果CSDN設置最低為2分,沒(méi)有積分的可以加我qq要該小說(shuō))。**爬蟲(chóng)原理:1、模擬人打開(kāi)一頁(yè)小說(shuō)網(wǎng)頁(yè)2、將網(wǎng)頁(yè)保存出來(lái)......
  畢易方達的博客
  08-09
  
  7795
  全面了解Java中Native關(guān)鍵字的作用
  初次遇到native是在java.lang.Object源碼中的一個(gè)hashCode方式:1publicnativeinthashCode();為何有個(gè)native呢?這是我所要學(xué)習的地方。所以下邊想要總結下native。一、認識native即JNI,JavaNativeInterface但凡一種語(yǔ)言,都希望是純。例如解決某一個(gè)方案都喜歡就單單這個(gè)語(yǔ)言......
  做人還是高調點(diǎn)
  05-08
  
  4萬(wàn)+
  筆試:第十六章:Java高級開(kāi)發(fā)(16k)
  HashMap底層實(shí)現原理,黑紅樹(shù),B+樹(shù),B樹(shù)的結構原理Spring的AOP和IOC是哪些?它們常見(jiàn)的使用場(chǎng)景有什么?Spring事務(wù),事務(wù)的屬性,傳播行為,數據庫隔離級別Spring和SpringMVC,MyBatis以及SpringBoot的注解分別有什么?SpringMVC的工作原理,SpringBoot框架的優(yōu)點(diǎn),MyBatis框架的優(yōu)點(diǎn)SpringCould組件有什么,她們......
  Bo_wen_的博客
  03-13
  
  16萬(wàn)+
  python網(wǎng)路爬蟲(chóng)入門(mén)(一)———第一個(gè)python爬蟲(chóng)實(shí)例
  近來(lái)七天學(xué)習了一下python,并自己寫(xiě)了一個(gè)網(wǎng)路爬蟲(chóng)的反例。python版本:3.5IDE:pycharm5.0.4要用到的包可以用pycharm下載:File->DefaultSettings->DefaultProject->ProjectInterpreter選擇python版本并點(diǎn)一側的減號安裝想要的包我選擇的網(wǎng)站是中國天氣網(wǎng)中的上海天氣,打算抓取近來(lái)...
  jsmok_xingkong的博客
  11-05
  
  3143
  Python-爬蟲(chóng)初體驗
  在網(wǎng)易云課堂上看的教學(xué)視頻,如今來(lái)鞏固一下知識:1.先確定自己要爬的網(wǎng)站,以新浪新聞網(wǎng)站為例確importrequests#跟java的導包差不多,python叫導出庫res=requests.get('#039;)#爬取網(wǎng)頁(yè)內容res.encoding='utf-8'#將得到的網(wǎng)頁(yè)內容轉碼,防止亂...
  CSDN資訊
  03-27
  
  4萬(wàn)+
  無(wú)代碼時(shí)代將至,程序員怎樣保住飯碗?
  編程語(yǔ)言層出不窮,從最初的機器語(yǔ)言到現在2500種以上的中級語(yǔ)言,程序員們大呼“學(xué)到頭禿”。程序員一邊面臨編程語(yǔ)言不斷推陳出新,一邊面臨因為許多代碼已存在,程序員編撰新應用程序時(shí)存在重復“搬磚”的現象。無(wú)代碼/低代碼編程應運而生。無(wú)代碼/低代碼是一種創(chuàng )建應用的方式,它可以讓開(kāi)發(fā)者使用最少的編碼知識來(lái)快速開(kāi)發(fā)應用程序。開(kāi)發(fā)者通過(guò)圖形界面中,可視化建模來(lái)組裝和配置應用程序。這樣一來(lái),開(kāi)發(fā)者直......
  明明如月的專(zhuān)欄
  03-01
  
  1萬(wàn)+
  將一個(gè)插口響應時(shí)間從2s優(yōu)化到200ms以?xún)鹊囊粋€(gè)案例
  一、背景在開(kāi)發(fā)聯(lián)調階段發(fā)覺(jué)一個(gè)插口的響應時(shí)間非常長(cháng),常常超時(shí),囧…本文講講是怎樣定位到性能困局以及更改的思路,將該插口從2s左右優(yōu)化到200ms以?xún)?。二、步驟2.1定位定位性能困局有兩個(gè)思路,一個(gè)是通過(guò)工具去監控,一個(gè)是通過(guò)經(jīng)驗去猜測。2.1.1工具監控就工具而言,推薦使用arthas,用到的是trace命令具體安裝步驟很簡(jiǎn)單,你們自行研究。我的使用步驟是......
  tboyer
  03-24
  
  95
  python3爬坑日記(二)——大文本讀取
  python3爬坑日記(二)——大文本讀取一般我們使用python讀取文件直接使用:fopen=open("test.txt")str=fopen.read()fopen.close()假如文件內容較小,使用以上方式其實(shí)沒(méi)問(wèn)題。并且,有時(shí)我們須要讀取類(lèi)似字典,日志等富含大量?jì)热莸奈募r(shí)使用上述方式因為顯存緣由常常會(huì )拋出異常。這時(shí)請使用:withopen("test.tx......
  aa804738534的博客
  01-19
  
  646
  STL(四)容器手動(dòng)排序set
  #include<set>#include<iostream>#include<set>#include<string>usingnamespacestd;template<typenameT>voidshowset(set<T>v){for(typenamestd::set...
  薛定諤的雄貓的博客
  04-30
  
  2萬(wàn)+
  怎樣柔美的替換掉代碼中的ifelse
  平常我們在寫(xiě)代碼時(shí),處理不同的業(yè)務(wù)邏輯,用得最多的就是if和else,簡(jiǎn)單粗魯省事,并且ifelse不是最好的方法,本文將通過(guò)設計模式來(lái)替換ifelse,使代碼更高貴簡(jiǎn)約。
  非知名程序員
  01-30
  
  7萬(wàn)+
  非典逼出了天貓和易迅,新冠病毒才能逼出哪些?
  loonggg讀完須要5分鐘速讀僅需2分鐘你們好,我是大家的市長(cháng)。我曉得你們在家里都憋壞了,你們可能相對于封閉在家里“坐月子”,更希望才能盡快下班。明天我帶著(zhù)你們換個(gè)思路來(lái)聊一個(gè)問(wèn)題...
  九章算法的博客
  02-06
  
  19萬(wàn)+
  B站上有什么挺好的學(xué)習資源?
  哇說(shuō)起B站,在小九眼中就是寶藏般的存在,放休假宅在家時(shí)三天刷6、7個(gè)小時(shí)不在話(huà)下,更別提去年的跨年晚宴,我簡(jiǎn)直是跪著(zhù)看完的??!最早你們聚在在B站是為了追番,再后來(lái)我在里面刷歐美新曲和漂亮小妹妹的街舞視頻,近來(lái)三年我和周?chē)耐瑢W(xué)們早已把B站當成學(xué)習課室了,但是學(xué)習成本還免費,真是個(gè)勵志的好平臺ヽ(.??ˇдˇ??;)?下邊我們就來(lái)盤(pán)點(diǎn)一下B站上優(yōu)質(zhì)的學(xué)習資源:綜合類(lèi)Oeasy:綜合......
  王澤嶺的博客
  08-19
  
  479
  幾種語(yǔ)言在爬蟲(chóng)場(chǎng)景下的力量對比
  PHP爬蟲(chóng):代碼簡(jiǎn)單,并發(fā)處理能力較弱:因為當時(shí)PHP沒(méi)有線(xiàn)程、進(jìn)程功能要想實(shí)現并發(fā)須要借用多路復用模型R語(yǔ)言爬蟲(chóng):操作簡(jiǎn)單,功能太弱,只適用于小規模的爬取,不適宜大規模的爬取Python爬蟲(chóng):有著(zhù)各類(lèi)成熟的爬蟲(chóng)框架(eg:scrapy家族),可以便捷高效的下載網(wǎng)頁(yè)而且支持多線(xiàn)程,進(jìn)程模型成熟穩定,爬蟲(chóng)是是一個(gè)典型的多任務(wù)處理場(chǎng)景,懇求頁(yè)面時(shí)會(huì )有較長(cháng)的延后,總體來(lái)說(shuō)更多的是等待,多線(xiàn)......
  九章算法的博客
  03-17
  
  4580
  作為程序員,有沒(méi)有讓你倍感既無(wú)語(yǔ)又崩潰的代碼注釋?zhuān)?br />   作為一個(gè)程序員,堪稱(chēng)是天天通宵來(lái)加班,也難以閱遍無(wú)數的程序代碼,不曉得有多少次看到這些讓人既倍感無(wú)語(yǔ)又奔潰的代碼注釋了。你以為自己能看懂這種代碼,但是有信心可以?xún)?yōu)化這種代碼,一旦你開(kāi)始嘗試這種代碼,你將會(huì )被困在無(wú)盡的熬夜中,在痛斥中結束這段痛楚的歷程。更有有網(wǎng)友坦承,自己寫(xiě)代碼都是拼音變量名和英文注釋?zhuān)瑩谋惶叱龀绦騿T隊伍。下邊這個(gè)代碼注釋大約說(shuō)出了好多寫(xiě)代碼人的心里話(huà)了。//我寫(xiě)這一行的時(shí)侯......
  CSDN大學(xué)
  03-10
  
  2萬(wàn)+
  剛回應!刪庫報復!一行代碼蒸發(fā)數10億!
  年后開(kāi)工大戲,又降低一出:刪庫跑路!此舉直接給公司帶來(lái)數10億的估值蒸發(fā)損失,并引起一段“狗血宿怨劇情”,說(shuō)實(shí)話(huà)電視劇都不敢如此拍!此次不是他人,正是陌陌生態(tài)的第三方服務(wù)商微盟,在這個(gè)"遠程辦公”的節骨眼出事了。2月25日,微盟集團(SEHK:02013)發(fā)布公告稱(chēng),Saas生產(chǎn)環(huán)境及數據受到職工“人為破壞”導致公司當前暫時(shí)未能向顧客提供SaaS產(chǎn)品。犯罪嫌疑人是微盟研制......
  爪白白的個(gè)人博客
  04-25
  
  5萬(wàn)+
  總結了150余個(gè)神奇網(wǎng)站,你不來(lái)看看嗎?
  原博客再更新,可能就沒(méi)了,然后將持續更新本篇博客。
  11-03
  
  8645
  二次型(求梯度)——公式的簡(jiǎn)化
  1.基本方程
  程序人生的博客
  02-11
  
  5636
  大地震!某大廠(chǎng)“硬核”搶人,放話(huà):只要AI人才,中學(xué)結業(yè)都行!
  特斯拉創(chuàng )始人馬斯克,在2019年曾許下好多承諾網(wǎng)絡(luò )爬蟲(chóng)語(yǔ)言,其中一個(gè)就是:2019年末實(shí)現完全的手動(dòng)駕駛。其實(shí)這個(gè)承諾又成了flag,并且不阻礙他去年繼續為這個(gè)承諾努力。這不,就在上周四,馬斯克之間...
  3y
  03-16
  
  9萬(wàn)+
  我說(shuō)我不會(huì )算法,阿里把我掛了。
  不說(shuō)了,字節跳動(dòng)也反手把我掛了。
  qq_40618664的博客
  05-07
  
  3萬(wàn)+
  Auto.JS實(shí)現抖音,刷寶等刷視頻app,自動(dòng)點(diǎn)贊,手動(dòng)滑屏,手動(dòng)切換視頻
  Auto.JS實(shí)現抖音,刷寶等刷視頻app,自動(dòng)點(diǎn)贊,手動(dòng)滑屏,手動(dòng)切換視頻代碼如下auto();varappName=rawInput("","刷寶短視頻");launchApp(appName);sleep("5000");setScreenMetrics(1080,1920);toast("1023732997");sleep("3000");varnum=200...
  lmseo5hy的博客
  05-14
  
  1萬(wàn)+
  Python與其他語(yǔ)言相比異同點(diǎn)python零基礎入門(mén)
  python作為一門(mén)中級編程語(yǔ)言,它的誕生其實(shí)很碰巧,并且它得到程序員的喜愛(ài)卻是必然之路,以下是Python與其他編程語(yǔ)言的異同點(diǎn)對比:1.Python優(yōu)勢:簡(jiǎn)單易學(xué),才能把用其他語(yǔ)言制做的各類(lèi)模塊很輕松地連結在一起。劣勢:速率較慢,且有一些特定情況下才能出現(未能再現)的bug2.C/C++C/C++優(yōu)勢:可以被嵌入任何現代處理器中,幾乎所有操作系統都支持C/C++,跨平臺性十分好劣勢:學(xué)習......
  WUTab的博客
  07-30
  
  2549
  找出鏈表X和Y中所有2n個(gè)元素的中位數
  算法總論第三版,9.3-8算法:假如兩個(gè)字段寬度為1,選出較小的那種一個(gè)否則,取出兩個(gè)字段的中位數。取有較大中位數的鏈表的低區和較低中位數鏈表的高區,組合成新的寬度為n的鏈表。找出新鏈表的中位數思路:既然用遞歸分治,一定有基本情況,基本情況就是鏈表寬度為1.觀(guān)察會(huì )發(fā)覺(jué)總的中位數介于兩個(gè)字段的中位數之間。詳盡證明如下:設總的中位數是MM,XX的中位數是MXM_X,YY的中位數是...
  程松
  03-30
  
  10萬(wàn)+
  5分鐘,6行代碼教你寫(xiě)爬蟲(chóng)?。╬ython)
  5分鐘,6行代碼教你寫(xiě)會(huì )爬蟲(chóng)!適用人士:對數據量需求不大,簡(jiǎn)單的從網(wǎng)站上爬些數據。好,不浪費時(shí)間了,開(kāi)始!先來(lái)個(gè)反例:輸入以下代碼(共6行)importrequestsfromlxmlimporthtmlurl='#039;#須要爬數據的網(wǎng)址page=requests.Session().get(url)tree=html.f...

【黑馬程序員】Python爬蟲(chóng)是哪些?爬蟲(chóng)教程

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 493 次瀏覽 ? 2020-05-19 08:01 ? 來(lái)自相關(guān)話(huà)題

  
  【黑馬程序員】Python 爬蟲(chóng)是哪些?爬蟲(chóng)教程假如你仔細觀(guān)察,就不難發(fā)覺(jué),懂爬蟲(chóng)、學(xué)習爬蟲(chóng)的人越來(lái)越多,一方面,互聯(lián)網(wǎng)可以獲取 的數據越來(lái)越多,另一方面,像 Python 這樣的編程語(yǔ)言提供越來(lái)越多的優(yōu)秀工具,讓爬蟲(chóng) 變得簡(jiǎn)單、容易上手。 利用爬蟲(chóng)我們可以獲取大量的價(jià)值數據,從而獲得感性認識中不能得到的信息,比如: 知乎:爬取優(yōu)質(zhì)答案,為你篩選出各話(huà)題下最優(yōu)質(zhì)的內容。淘寶、京東:抓取商品、評論及 銷(xiāo)量數據,對各類(lèi)商品及用戶(hù)的消費場(chǎng)景進(jìn)行剖析。安居客、鏈家:抓取房產(chǎn)買(mǎi)賣(mài)及租售信 息,分析樓市變化趨勢、做不同區域的樓價(jià)剖析。拉勾網(wǎng)、智聯(lián):爬取各種職位信息,分析 各行業(yè)人才需求情況及薪酬水平。雪球網(wǎng):抓取雪球高回報用戶(hù)的行為,對股票市場(chǎng)進(jìn)行分 析和預測。 爬蟲(chóng)是入門(mén) Python 最好的形式,沒(méi)有之一。Python 有很多應用的方向,比如后臺開(kāi)發(fā)、 web 開(kāi)發(fā)、科學(xué)估算等等,但爬蟲(chóng)對于初學(xué)者而言更友好,原理簡(jiǎn)單,幾行代碼能夠實(shí)現 基本的爬蟲(chóng),學(xué)習的過(guò)程愈發(fā)平滑,你能感受更大的成就感。 掌握基本的爬蟲(chóng)后,你再去學(xué)習 Python 數據剖析、web 開(kāi)發(fā)甚至機器學(xué)習,都會(huì )更得心 應手。因為這個(gè)過(guò)程中,Python 基本句型、庫的使用,以及怎樣查找文檔你都十分熟悉了。
   對于小白來(lái)說(shuō),爬蟲(chóng)可能是一件十分復雜、技術(shù)門(mén)檻很高的事情。比如有人覺(jué)得學(xué)爬蟲(chóng)必須 精通 Python,然后哼哧哼哧系統學(xué)習 Python 的每位知識點(diǎn),很久以后發(fā)覺(jué)一直爬不了數 據;有的人則覺(jué)得先要把握網(wǎng)頁(yè)的知識,遂開(kāi)始 HTML\CSS,結果入了后端的坑,瘁…… 但把握正確的方式,在短時(shí)間內做到才能爬取主流網(wǎng)站的數據,其實(shí)十分容易實(shí)現,但建議 你從一開(kāi)始就要有一個(gè)具體的目標。視頻庫網(wǎng)址:資料發(fā)放:3285264708在目標的驅動(dòng)下,你的學(xué)習才能愈發(fā)精準和高效。那些所有你覺(jué)得必須的后置知識,都是可 以在完成目標的過(guò)程小學(xué)到的。這里給你一條平滑的、零基礎快速入門(mén)的學(xué)習路徑。 文章目錄: 1. 學(xué)習 Python 包并實(shí)現基本的爬蟲(chóng)過(guò)程 2. 了解非結構化數據的儲存 3. 學(xué)習 scrapy,搭建工程化爬蟲(chóng) 4. 學(xué)習數據庫知識,應對大規模數據儲存與提取 5. 掌握各類(lèi)方法,應對特殊網(wǎng)站的反爬舉措 6. 分布式爬蟲(chóng),實(shí)現大規模并發(fā)采集,提升效率-? 學(xué)習 Python 包并實(shí)現基本的爬蟲(chóng)過(guò)程大部分爬蟲(chóng)都是按“發(fā)送懇求——獲得頁(yè)面——解析頁(yè)面——抽取并存儲內容”這樣的流 程來(lái)進(jìn)行,這或許也是模擬了我們使用瀏覽器獲取網(wǎng)頁(yè)信息的過(guò)程。
   Python 中爬蟲(chóng)相關(guān)的包好多:urllib、requests、bs4、scrapy、pyspider 等,建議從 requests+Xpath 開(kāi)始,requests 負責聯(lián)接網(wǎng)站,返回網(wǎng)頁(yè),Xpath 用于解析網(wǎng)頁(yè),便于 抽取數據。 如果你用過(guò) BeautifulSoup,會(huì )發(fā)覺(jué) Xpath 要省事不少,一層一層檢測元素代碼的工作, 全都省略了。這樣出來(lái)基本套路都差不多,一般的靜態(tài)網(wǎng)站根本不在話(huà)下,豆瓣、糗事百科、 騰訊新聞等基本上都可以上手了。 當然假如你須要爬取異步加載的網(wǎng)站,可以學(xué)習瀏覽器抓包剖析真實(shí)懇求或則學(xué)習 Selenium 來(lái)實(shí)現自動(dòng)化,這樣,知乎、時(shí)光網(wǎng)、貓途鷹這種動(dòng)態(tài)的網(wǎng)站也可以迎刃而解。視頻庫網(wǎng)址:資料發(fā)放:3285264708-? 了解非結構化數據的儲存爬回去的數據可以直接用文檔方式存在本地,也可以存入數據庫中。 開(kāi)始數據量不大的時(shí)侯,你可以直接通過(guò) Python 的句型或 pandas 的方式將數據存為 csv 這樣的文件。 當然你可能發(fā)覺(jué)爬回去的數據并不是干凈的python爬蟲(chóng)是什么意思,可能會(huì )有缺位、錯誤等等,你還須要對數據進(jìn) 行清洗,可以學(xué)習 pandas 包的基本用法來(lái)做數據的預處理,得到更干凈的數據。
  -? 學(xué)習 scrapy,搭建工程化的爬蟲(chóng)把握后面的技術(shù)通常量級的數據和代碼基本沒(méi)有問(wèn)題了,但是在碰到十分復雜的情況,可能 仍然會(huì )力不從心,這個(gè)時(shí)侯,強大的 scrapy 框架就十分有用了。 scrapy 是一個(gè)功能十分強悍的爬蟲(chóng)框架,它除了能方便地建立 request,還有強悍的 selector 能夠便捷地解析 response,然而它最使人驚喜的還是它超高的性能,讓你可以 將爬蟲(chóng)工程化、模塊化。 學(xué)會(huì ) scrapy,你可以自己去搭建一些爬蟲(chóng)框架,你就基本具備爬蟲(chóng)工程師的思維了。-? 學(xué)習數據庫基礎,應對大規模數據儲存爬回去的數據量小的時(shí)侯,你可以用文檔的方式來(lái)儲存,一旦數據量大了,這就有點(diǎn)行不通 了。所以把握一種數據庫是必須的,學(xué)習目前比較主流的 MongoDB 就 OK。視頻庫網(wǎng)址:資料發(fā)放:3285264708MongoDB 可以便捷你去儲存一些非結構化的數據,比如各類(lèi)評論的文本,圖片的鏈接等 等。你也可以借助 PyMongo,更方便地在 Python 中操作 MongoDB。 因為這兒要用到的數據庫知識似乎十分簡(jiǎn)單,主要是數據怎么入庫、如何進(jìn)行提取,在須要 的時(shí)侯再學(xué)習就行。
  -? 掌握各類(lèi)方法,應對特殊網(wǎng)站的反爬舉措其實(shí),爬蟲(chóng)過(guò)程中也會(huì )經(jīng)歷一些絕望啊,比如被網(wǎng)站封 IP、比如各類(lèi)奇怪的驗證碼、 userAgent 訪(fǎng)問(wèn)限制、各種動(dòng)態(tài)加載等等。 遇到這種反爬蟲(chóng)的手段,當然還須要一些中級的方法來(lái)應對,常規的例如訪(fǎng)問(wèn)頻度控制、使 用代理 IP 池、抓包、驗證碼的 OCR 處理等等。 往往網(wǎng)站在高效開(kāi)發(fā)和反爬蟲(chóng)之間會(huì )偏向后者,這也為爬蟲(chóng)提供了空間,掌握這種應對反爬 蟲(chóng)的方法,絕大部分的網(wǎng)站已經(jīng)難不到你了。-? 分布式爬蟲(chóng),實(shí)現大規模并發(fā)采集爬取基本數據早已不是問(wèn)題了,你的困局會(huì )集中到爬取海量數據的效率。這個(gè)時(shí)侯,相信你 會(huì )很自然地接觸到一個(gè)很厲害的名子:分布式爬蟲(chóng)。 分布式這個(gè)東西,聽(tīng)上去太驚悚,但畢竟就是借助多線(xiàn)程的原理使多個(gè)爬蟲(chóng)同時(shí)工作,需要 你把握 Scrapy + MongoDB + Redis 這三種工具。 Scrapy 前面我們說(shuō)過(guò)了,用于做基本的頁(yè)面爬取,MongoDB 用于儲存爬取的數據,Redis 則拿來(lái)儲存要爬取的網(wǎng)頁(yè)隊列,也就是任務(wù)隊列。視頻庫網(wǎng)址:資料發(fā)放:3285264708所以有些東西看起來(lái)太嚇人,但畢竟分解開(kāi)來(lái),也不過(guò)如此。當你才能寫(xiě)分布式的爬蟲(chóng)的時(shí) 候,那么你可以去嘗試構建一些基本的爬蟲(chóng)構架了python爬蟲(chóng)是什么意思,實(shí)現一些愈發(fā)自動(dòng)化的數據獲取。
   你看,這一條學(xué)習路徑出來(lái),你已經(jīng)可以成為老司機了,非常的順暢。所以在一開(kāi)始的時(shí)侯, 盡量不要系統地去啃一些東西,找一個(gè)實(shí)際的項目(開(kāi)始可以從豆瓣、小豬這些簡(jiǎn)單的入手), 直接開(kāi)始就好。 因為爬蟲(chóng)這些技術(shù),既不需要你系統地精通一門(mén)語(yǔ)言,也不需要多么深奧的數據庫技術(shù),高 效的坐姿就是從實(shí)際的項目中去學(xué)習這種零散的知識點(diǎn),你能保證每次學(xué)到的都是最須要的 那部份。 當然惟一麻煩的是,在具體的問(wèn)題中,如何找到具體須要的那部份學(xué)習資源、如何篩選和甄 別,是好多初學(xué)者面臨的一個(gè)大問(wèn)題。黑馬程序員視頻庫網(wǎng)址:(海量熱門(mén)編程視頻、資料免費學(xué)習) 學(xué)習路線(xiàn)圖、學(xué)習大綱、各階段知識點(diǎn)、資料云盤(pán)免費發(fā)放+QQ 3285264708 / 3549664195視頻庫網(wǎng)址:資料發(fā)放:3285264708 查看全部

  
  【黑馬程序員】Python 爬蟲(chóng)是哪些?爬蟲(chóng)教程假如你仔細觀(guān)察,就不難發(fā)覺(jué),懂爬蟲(chóng)、學(xué)習爬蟲(chóng)的人越來(lái)越多,一方面,互聯(lián)網(wǎng)可以獲取 的數據越來(lái)越多,另一方面,像 Python 這樣的編程語(yǔ)言提供越來(lái)越多的優(yōu)秀工具,讓爬蟲(chóng) 變得簡(jiǎn)單、容易上手。 利用爬蟲(chóng)我們可以獲取大量的價(jià)值數據,從而獲得感性認識中不能得到的信息,比如: 知乎:爬取優(yōu)質(zhì)答案,為你篩選出各話(huà)題下最優(yōu)質(zhì)的內容。淘寶、京東:抓取商品、評論及 銷(xiāo)量數據,對各類(lèi)商品及用戶(hù)的消費場(chǎng)景進(jìn)行剖析。安居客、鏈家:抓取房產(chǎn)買(mǎi)賣(mài)及租售信 息,分析樓市變化趨勢、做不同區域的樓價(jià)剖析。拉勾網(wǎng)、智聯(lián):爬取各種職位信息,分析 各行業(yè)人才需求情況及薪酬水平。雪球網(wǎng):抓取雪球高回報用戶(hù)的行為,對股票市場(chǎng)進(jìn)行分 析和預測。 爬蟲(chóng)是入門(mén) Python 最好的形式,沒(méi)有之一。Python 有很多應用的方向,比如后臺開(kāi)發(fā)、 web 開(kāi)發(fā)、科學(xué)估算等等,但爬蟲(chóng)對于初學(xué)者而言更友好,原理簡(jiǎn)單,幾行代碼能夠實(shí)現 基本的爬蟲(chóng),學(xué)習的過(guò)程愈發(fā)平滑,你能感受更大的成就感。 掌握基本的爬蟲(chóng)后,你再去學(xué)習 Python 數據剖析、web 開(kāi)發(fā)甚至機器學(xué)習,都會(huì )更得心 應手。因為這個(gè)過(guò)程中,Python 基本句型、庫的使用,以及怎樣查找文檔你都十分熟悉了。
   對于小白來(lái)說(shuō),爬蟲(chóng)可能是一件十分復雜、技術(shù)門(mén)檻很高的事情。比如有人覺(jué)得學(xué)爬蟲(chóng)必須 精通 Python,然后哼哧哼哧系統學(xué)習 Python 的每位知識點(diǎn),很久以后發(fā)覺(jué)一直爬不了數 據;有的人則覺(jué)得先要把握網(wǎng)頁(yè)的知識,遂開(kāi)始 HTML\CSS,結果入了后端的坑,瘁…… 但把握正確的方式,在短時(shí)間內做到才能爬取主流網(wǎng)站的數據,其實(shí)十分容易實(shí)現,但建議 你從一開(kāi)始就要有一個(gè)具體的目標。視頻庫網(wǎng)址:資料發(fā)放:3285264708在目標的驅動(dòng)下,你的學(xué)習才能愈發(fā)精準和高效。那些所有你覺(jué)得必須的后置知識,都是可 以在完成目標的過(guò)程小學(xué)到的。這里給你一條平滑的、零基礎快速入門(mén)的學(xué)習路徑。 文章目錄: 1. 學(xué)習 Python 包并實(shí)現基本的爬蟲(chóng)過(guò)程 2. 了解非結構化數據的儲存 3. 學(xué)習 scrapy,搭建工程化爬蟲(chóng) 4. 學(xué)習數據庫知識,應對大規模數據儲存與提取 5. 掌握各類(lèi)方法,應對特殊網(wǎng)站的反爬舉措 6. 分布式爬蟲(chóng),實(shí)現大規模并發(fā)采集,提升效率-? 學(xué)習 Python 包并實(shí)現基本的爬蟲(chóng)過(guò)程大部分爬蟲(chóng)都是按“發(fā)送懇求——獲得頁(yè)面——解析頁(yè)面——抽取并存儲內容”這樣的流 程來(lái)進(jìn)行,這或許也是模擬了我們使用瀏覽器獲取網(wǎng)頁(yè)信息的過(guò)程。
   Python 中爬蟲(chóng)相關(guān)的包好多:urllib、requests、bs4、scrapy、pyspider 等,建議從 requests+Xpath 開(kāi)始,requests 負責聯(lián)接網(wǎng)站,返回網(wǎng)頁(yè),Xpath 用于解析網(wǎng)頁(yè),便于 抽取數據。 如果你用過(guò) BeautifulSoup,會(huì )發(fā)覺(jué) Xpath 要省事不少,一層一層檢測元素代碼的工作, 全都省略了。這樣出來(lái)基本套路都差不多,一般的靜態(tài)網(wǎng)站根本不在話(huà)下,豆瓣、糗事百科、 騰訊新聞等基本上都可以上手了。 當然假如你須要爬取異步加載的網(wǎng)站,可以學(xué)習瀏覽器抓包剖析真實(shí)懇求或則學(xué)習 Selenium 來(lái)實(shí)現自動(dòng)化,這樣,知乎、時(shí)光網(wǎng)、貓途鷹這種動(dòng)態(tài)的網(wǎng)站也可以迎刃而解。視頻庫網(wǎng)址:資料發(fā)放:3285264708-? 了解非結構化數據的儲存爬回去的數據可以直接用文檔方式存在本地,也可以存入數據庫中。 開(kāi)始數據量不大的時(shí)侯,你可以直接通過(guò) Python 的句型或 pandas 的方式將數據存為 csv 這樣的文件。 當然你可能發(fā)覺(jué)爬回去的數據并不是干凈的python爬蟲(chóng)是什么意思,可能會(huì )有缺位、錯誤等等,你還須要對數據進(jìn) 行清洗,可以學(xué)習 pandas 包的基本用法來(lái)做數據的預處理,得到更干凈的數據。
  -? 學(xué)習 scrapy,搭建工程化的爬蟲(chóng)把握后面的技術(shù)通常量級的數據和代碼基本沒(méi)有問(wèn)題了,但是在碰到十分復雜的情況,可能 仍然會(huì )力不從心,這個(gè)時(shí)侯,強大的 scrapy 框架就十分有用了。 scrapy 是一個(gè)功能十分強悍的爬蟲(chóng)框架,它除了能方便地建立 request,還有強悍的 selector 能夠便捷地解析 response,然而它最使人驚喜的還是它超高的性能,讓你可以 將爬蟲(chóng)工程化、模塊化。 學(xué)會(huì ) scrapy,你可以自己去搭建一些爬蟲(chóng)框架,你就基本具備爬蟲(chóng)工程師的思維了。-? 學(xué)習數據庫基礎,應對大規模數據儲存爬回去的數據量小的時(shí)侯,你可以用文檔的方式來(lái)儲存,一旦數據量大了,這就有點(diǎn)行不通 了。所以把握一種數據庫是必須的,學(xué)習目前比較主流的 MongoDB 就 OK。視頻庫網(wǎng)址:資料發(fā)放:3285264708MongoDB 可以便捷你去儲存一些非結構化的數據,比如各類(lèi)評論的文本,圖片的鏈接等 等。你也可以借助 PyMongo,更方便地在 Python 中操作 MongoDB。 因為這兒要用到的數據庫知識似乎十分簡(jiǎn)單,主要是數據怎么入庫、如何進(jìn)行提取,在須要 的時(shí)侯再學(xué)習就行。
  -? 掌握各類(lèi)方法,應對特殊網(wǎng)站的反爬舉措其實(shí),爬蟲(chóng)過(guò)程中也會(huì )經(jīng)歷一些絕望啊,比如被網(wǎng)站封 IP、比如各類(lèi)奇怪的驗證碼、 userAgent 訪(fǎng)問(wèn)限制、各種動(dòng)態(tài)加載等等。 遇到這種反爬蟲(chóng)的手段,當然還須要一些中級的方法來(lái)應對,常規的例如訪(fǎng)問(wèn)頻度控制、使 用代理 IP 池、抓包、驗證碼的 OCR 處理等等。 往往網(wǎng)站在高效開(kāi)發(fā)和反爬蟲(chóng)之間會(huì )偏向后者,這也為爬蟲(chóng)提供了空間,掌握這種應對反爬 蟲(chóng)的方法,絕大部分的網(wǎng)站已經(jīng)難不到你了。-? 分布式爬蟲(chóng),實(shí)現大規模并發(fā)采集爬取基本數據早已不是問(wèn)題了,你的困局會(huì )集中到爬取海量數據的效率。這個(gè)時(shí)侯,相信你 會(huì )很自然地接觸到一個(gè)很厲害的名子:分布式爬蟲(chóng)。 分布式這個(gè)東西,聽(tīng)上去太驚悚,但畢竟就是借助多線(xiàn)程的原理使多個(gè)爬蟲(chóng)同時(shí)工作,需要 你把握 Scrapy + MongoDB + Redis 這三種工具。 Scrapy 前面我們說(shuō)過(guò)了,用于做基本的頁(yè)面爬取,MongoDB 用于儲存爬取的數據,Redis 則拿來(lái)儲存要爬取的網(wǎng)頁(yè)隊列,也就是任務(wù)隊列。視頻庫網(wǎng)址:資料發(fā)放:3285264708所以有些東西看起來(lái)太嚇人,但畢竟分解開(kāi)來(lái),也不過(guò)如此。當你才能寫(xiě)分布式的爬蟲(chóng)的時(shí) 候,那么你可以去嘗試構建一些基本的爬蟲(chóng)構架了python爬蟲(chóng)是什么意思,實(shí)現一些愈發(fā)自動(dòng)化的數據獲取。
   你看,這一條學(xué)習路徑出來(lái),你已經(jīng)可以成為老司機了,非常的順暢。所以在一開(kāi)始的時(shí)侯, 盡量不要系統地去啃一些東西,找一個(gè)實(shí)際的項目(開(kāi)始可以從豆瓣、小豬這些簡(jiǎn)單的入手), 直接開(kāi)始就好。 因為爬蟲(chóng)這些技術(shù),既不需要你系統地精通一門(mén)語(yǔ)言,也不需要多么深奧的數據庫技術(shù),高 效的坐姿就是從實(shí)際的項目中去學(xué)習這種零散的知識點(diǎn),你能保證每次學(xué)到的都是最須要的 那部份。 當然惟一麻煩的是,在具體的問(wèn)題中,如何找到具體須要的那部份學(xué)習資源、如何篩選和甄 別,是好多初學(xué)者面臨的一個(gè)大問(wèn)題。黑馬程序員視頻庫網(wǎng)址:(海量熱門(mén)編程視頻、資料免費學(xué)習) 學(xué)習路線(xiàn)圖、學(xué)習大綱、各階段知識點(diǎn)、資料云盤(pán)免費發(fā)放+QQ 3285264708 / 3549664195視頻庫網(wǎng)址:資料發(fā)放:3285264708

爬蟲(chóng)技術(shù)淺析

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 379 次瀏覽 ? 2020-05-02 08:09 ? 來(lái)自相關(guān)話(huà)題

    談到爬蟲(chóng)構架,不得不提的是Scrapy的爬蟲(chóng)構架。Scrapy,是Python開(kāi)發(fā)的一個(gè)快速,高層次的爬蟲(chóng)框架,用于抓取web站點(diǎn)并從頁(yè)面中提取結構化的數據。Scrapy用途廣泛,可以用于數據挖掘、監測和自動(dòng)化測試。Scrapy吸引人的地方在于它是一個(gè)框架,任何人都可以依照需求便捷的更改。它也提供了多種類(lèi)型爬蟲(chóng)的子類(lèi),如BaseSpider、sitemap爬蟲(chóng)等。
  上圖是Scrapy的構架圖,綠線(xiàn)是數據流向,首先從初始URL 開(kāi)始,Scheduler 會(huì )將其交給 Downloader 進(jìn)行下載,下載以后會(huì )交給 Spider 進(jìn)行剖析,需要保存的數據則會(huì )被送到Item Pipeline,那是對數據進(jìn)行后期處理。另外,在數據流動(dòng)的通道里還可以安裝各類(lèi)中間件,進(jìn)行必要的處理。 因此在開(kāi)發(fā)爬蟲(chóng)的時(shí)侯,最好也先規劃好各類(lèi)模塊。我的做法是單獨規劃下載模塊,爬行模塊,調度模塊,數據儲存模塊。
  頁(yè)面下載分為靜態(tài)和動(dòng)態(tài)兩種下載形式。
  傳統爬蟲(chóng)借助的是靜態(tài)下載形式,靜態(tài)下載的優(yōu)勢是下載過(guò)程快,但是頁(yè)面只是一個(gè)無(wú)趣的html,因此頁(yè)面鏈接剖析中獲取的只是< a >標簽的href屬性或則大神可以自己剖析js,form之類(lèi)的標簽捕獲一些鏈接。在python中可以借助urllib2模塊或requests模塊實(shí)現功能。 動(dòng)態(tài)爬蟲(chóng)在web2.0時(shí)代則有特殊的優(yōu)勢,由于網(wǎng)頁(yè)會(huì )使用javascript處理,網(wǎng)頁(yè)內容通過(guò)Ajax異步獲取。所以,動(dòng)態(tài)爬蟲(chóng)須要剖析經(jīng)過(guò)javascript處理和ajax獲取內容后的頁(yè)面。目前簡(jiǎn)單的解決方式是通過(guò)基于webkit的模塊直接處理。PYQT4、Splinter和Selenium這三個(gè)模塊都可以達到目的。對于爬蟲(chóng)而言,瀏覽器界面是不需要的,因此使用一個(gè)headless browser是十分實(shí)惠的,HtmlUnit和phantomjs都是可以使用的headless browser。
  
  以上這段代碼是訪(fǎng)問(wèn)新浪網(wǎng)主站。通過(guò)對比靜態(tài)抓取頁(yè)面和動(dòng)態(tài)抓取頁(yè)面的厚度和對比靜態(tài)抓取頁(yè)面和動(dòng)態(tài)抓取頁(yè)面內抓取的鏈接個(gè)數。
  
  在靜態(tài)抓取中,頁(yè)面的寬度是563838,頁(yè)面內抓取的鏈接數目只有166個(gè)。而在動(dòng)態(tài)抓取中,頁(yè)面的寬度下降到了695991,而鏈接數達到了1422,有了逾10倍的提高。
  抓鏈接表達式
  正則:re.compile("href=\"([^\"]*)\"")
  Xpath:xpath('//*[@href]')
  頁(yè)面解析是實(shí)現抓取頁(yè)面內鏈接和抓取特定數據的模塊,頁(yè)面解析主要是對字符串的處理,而html是一種特殊的字符串,在Python中re、beautifulsoup、HTMLParser、lxml等模塊都可以解決問(wèn)題。對于鏈接,主要抓取a標簽下的href屬性,還有其他一些標簽的src屬性。
  URL去重是爬蟲(chóng)運行中一項關(guān)鍵的步驟,由于運行中的爬蟲(chóng)主要阻塞在網(wǎng)路交互中,因此防止重復的網(wǎng)路交互至關(guān)重要。爬蟲(chóng)通常會(huì )將待抓取的URL置于一個(gè)隊列中,從抓取后的網(wǎng)頁(yè)中提取到新的URL,在她們被裝入隊列之前,首先要確定這種新的URL沒(méi)有被抓取過(guò),如果之前早已抓取過(guò)了,就不再裝入隊列了。
  Hash表
  利用hash表做去重操作通常是最容易想到的方式,因為hash表查詢(xún)的時(shí)間復雜度是O(1),而且在hash表足夠大的情況下,hash沖突的機率就顯得太小,因此URL是否重復的判定準確性就十分高。利用hash表去重的這個(gè)做法是一個(gè)比較簡(jiǎn)單的解決方式。但是普通hash表也有顯著(zhù)的缺陷爬蟲(chóng)技術(shù),在考慮顯存的情況下,使用一張大的hash表是不妥的。Python中可以使用字典這一數據結構。
  URL壓縮
  如果hash表中,當每位節點(diǎn)存儲的是一個(gè)str方式的具體URL,是十分占用顯存的,如果把這個(gè)URL進(jìn)行壓縮成一個(gè)int型變量,內存占用程度上便有了3倍以上的縮小。因此可以借助Python的hashlib模塊來(lái)進(jìn)行URL壓縮。 思路:把hash表的節點(diǎn)的數據結構設置為集合,集合內貯存壓縮后的URL。
  Bloom Filter
  Bloom Filter是通過(guò)很少的錯誤換取了儲存空間的極大節約。Bloom Filter 是通過(guò)一組k 個(gè)定義在n 個(gè)輸入key 上的Hash Function,將上述n 個(gè)key 映射到m 位上的數據容器。
  
  上圖太清楚的說(shuō)明了Bloom Filter的優(yōu)勢,在可控的容器寬度內,所有hash函數對同一個(gè)元素估算的hash值都為1時(shí),就判定這個(gè)元素存在。 Python中hashlib,自帶多種hash函數,有MD5,sha1,sha224,sha256,sha384,sha512。代碼中還可以進(jìn)行加水處理,還是很方便的。 Bloom Filter也會(huì )形成沖突的情況,具體內容查看文章結尾的參考文章。
  在Python編程過(guò)程中,可以使用jaybaird提供的BloomFilter插口,或者自己造輪子。
  小細節
  有個(gè)小細節,在構建hash表的時(shí)侯選擇容器很重要。hash表占用空間很大是個(gè)太不爽的問(wèn)題,因此針對爬蟲(chóng)去重,下列方式可以解決一些問(wèn)題。
  
  上面這段代碼簡(jiǎn)單驗證了生成容器的運行時(shí)間。
  
  由上圖可以看出,建立一個(gè)寬度為1億的容器時(shí),選擇list容器程序的運行時(shí)間耗費了7.2s,而選擇字符串作為容器時(shí),才耗費了0.2s的運行時(shí)間。
  接下來(lái)瞧瞧顯存的占用情況。
  
  如果構建1億的列表占用了794660k顯存。
  
  而構建1億寬度的字符串卻占用了109720k顯存,空間占用大概降低了700000k。
  初級算法
  對于URL相似性,我只是實(shí)踐一個(gè)十分簡(jiǎn)單的技巧。
  在保證不進(jìn)行重復爬去的情況下,還須要對類(lèi)似的URL進(jìn)行判定。我采用的是sponge和ly5066113提供的思路。具體資料在參考文章里。
  下列是一組可以判定為相像的URL組
  按照預期,以上URL歸并后應當為
  思路如下,需要提取如下特點(diǎn)
  1,host字符串
  2,目錄深度(以’/’分割)
  3,尾頁(yè)特點(diǎn)
  具體算法
  
  算法本身太菜,各位一看才能懂。
  實(shí)際療效:
  
  上圖顯示了把8個(gè)不一樣的url,算出了2個(gè)值。通過(guò)實(shí)踐,在一張千萬(wàn)級的hash表中,沖突的情況是可以接受的。
  Python中的并發(fā)操作主要涉及的模型有:多線(xiàn)程模型、多進(jìn)程模型、協(xié)程模型。Elias專(zhuān)門(mén)寫(xiě)了一篇文章爬蟲(chóng)技術(shù),來(lái)比較常用的幾種模型并發(fā)方案的性能。對于爬蟲(chóng)本身來(lái)說(shuō),限制爬蟲(chóng)速率主要來(lái)自目標服務(wù)器的響應速率,因此選擇一個(gè)控制上去順手的模塊才是對的。
  多線(xiàn)程模型,是最容易上手的,Python中自帶的threading模塊能挺好的實(shí)現并發(fā)需求,配合Queue模塊來(lái)實(shí)現共享數據。
  多進(jìn)程模型和多線(xiàn)程模型類(lèi)似,multiprocessing模塊中也有類(lèi)似的Queue模塊來(lái)實(shí)現數據共享。在linux中,用戶(hù)態(tài)的進(jìn)程可以借助多核心的優(yōu)勢,因此在多核背景下,能解決爬蟲(chóng)的并發(fā)問(wèn)題。
  協(xié)程模型,在Elias的文章中,基于greenlet實(shí)現的解釋器程序的性能僅次于Stackless Python,大致比Stackless Python慢一倍,比其他方案快接近一個(gè)數量級。因此基于gevent(封裝了greenlet)的并發(fā)程序會(huì )有挺好的性能優(yōu)勢。
  具體說(shuō)明下gevent(非阻塞異步IO)。,“Gevent是一種基于解釋器的Python網(wǎng)絡(luò )庫,它用到Greenlet提供的,封裝了libevent風(fēng)波循環(huán)的高層同步API?!?br />   從實(shí)際的編程療效來(lái)看,協(xié)程模型確實(shí)表現非常好,運行結果的可控性顯著(zhù)強了不少, gevent庫的封裝易用性極強。
  數據儲存本身設計的技術(shù)就十分多,作為小菜不敢亂說(shuō),但是工作還是有一些小經(jīng)驗是可以分享的。
  前提:使用關(guān)系數據庫,測試中選擇的是mysql,其他類(lèi)似sqlite,SqlServer思路上沒(méi)有區別。
  當我們進(jìn)行數據儲存時(shí),目的就是降低與數據庫的交互操作,這樣可以增強性能。通常情況下,每當一個(gè)URL節點(diǎn)被讀取,就進(jìn)行一次數據儲存,對于這樣的邏輯進(jìn)行無(wú)限循環(huán)。其實(shí)這樣的性能體驗是十分差的,存儲速率特別慢。
  進(jìn)階做法,為了減輕與數據庫的交互次數,每次與數據庫交互從之前傳送1個(gè)節點(diǎn)弄成傳送10個(gè)節點(diǎn),到傳送100個(gè)節點(diǎn)內容,這樣效率變有了10倍至100倍的提高,在實(shí)際應用中,效果是非常好的。:D
  爬蟲(chóng)模型
  
  目前這個(gè)爬蟲(chóng)模型如上圖,調度模塊是核心模塊。調度模塊分別與下載模塊,析取模塊,存儲模塊共享三個(gè)隊列,下載模塊與析取模塊共享一個(gè)隊列。數據傳遞方向如圖示。 查看全部
    談到爬蟲(chóng)構架,不得不提的是Scrapy的爬蟲(chóng)構架。Scrapy,是Python開(kāi)發(fā)的一個(gè)快速,高層次的爬蟲(chóng)框架,用于抓取web站點(diǎn)并從頁(yè)面中提取結構化的數據。Scrapy用途廣泛,可以用于數據挖掘、監測和自動(dòng)化測試。Scrapy吸引人的地方在于它是一個(gè)框架,任何人都可以依照需求便捷的更改。它也提供了多種類(lèi)型爬蟲(chóng)的子類(lèi),如BaseSpider、sitemap爬蟲(chóng)等。
  上圖是Scrapy的構架圖,綠線(xiàn)是數據流向,首先從初始URL 開(kāi)始,Scheduler 會(huì )將其交給 Downloader 進(jìn)行下載,下載以后會(huì )交給 Spider 進(jìn)行剖析,需要保存的數據則會(huì )被送到Item Pipeline,那是對數據進(jìn)行后期處理。另外,在數據流動(dòng)的通道里還可以安裝各類(lèi)中間件,進(jìn)行必要的處理。 因此在開(kāi)發(fā)爬蟲(chóng)的時(shí)侯,最好也先規劃好各類(lèi)模塊。我的做法是單獨規劃下載模塊,爬行模塊,調度模塊,數據儲存模塊。
  頁(yè)面下載分為靜態(tài)和動(dòng)態(tài)兩種下載形式。
  傳統爬蟲(chóng)借助的是靜態(tài)下載形式,靜態(tài)下載的優(yōu)勢是下載過(guò)程快,但是頁(yè)面只是一個(gè)無(wú)趣的html,因此頁(yè)面鏈接剖析中獲取的只是< a >標簽的href屬性或則大神可以自己剖析js,form之類(lèi)的標簽捕獲一些鏈接。在python中可以借助urllib2模塊或requests模塊實(shí)現功能。 動(dòng)態(tài)爬蟲(chóng)在web2.0時(shí)代則有特殊的優(yōu)勢,由于網(wǎng)頁(yè)會(huì )使用javascript處理,網(wǎng)頁(yè)內容通過(guò)Ajax異步獲取。所以,動(dòng)態(tài)爬蟲(chóng)須要剖析經(jīng)過(guò)javascript處理和ajax獲取內容后的頁(yè)面。目前簡(jiǎn)單的解決方式是通過(guò)基于webkit的模塊直接處理。PYQT4、Splinter和Selenium這三個(gè)模塊都可以達到目的。對于爬蟲(chóng)而言,瀏覽器界面是不需要的,因此使用一個(gè)headless browser是十分實(shí)惠的,HtmlUnit和phantomjs都是可以使用的headless browser。
  
  以上這段代碼是訪(fǎng)問(wèn)新浪網(wǎng)主站。通過(guò)對比靜態(tài)抓取頁(yè)面和動(dòng)態(tài)抓取頁(yè)面的厚度和對比靜態(tài)抓取頁(yè)面和動(dòng)態(tài)抓取頁(yè)面內抓取的鏈接個(gè)數。
  
  在靜態(tài)抓取中,頁(yè)面的寬度是563838,頁(yè)面內抓取的鏈接數目只有166個(gè)。而在動(dòng)態(tài)抓取中,頁(yè)面的寬度下降到了695991,而鏈接數達到了1422,有了逾10倍的提高。
  抓鏈接表達式
  正則:re.compile("href=\"([^\"]*)\"")
  Xpath:xpath('//*[@href]')
  頁(yè)面解析是實(shí)現抓取頁(yè)面內鏈接和抓取特定數據的模塊,頁(yè)面解析主要是對字符串的處理,而html是一種特殊的字符串,在Python中re、beautifulsoup、HTMLParser、lxml等模塊都可以解決問(wèn)題。對于鏈接,主要抓取a標簽下的href屬性,還有其他一些標簽的src屬性。
  URL去重是爬蟲(chóng)運行中一項關(guān)鍵的步驟,由于運行中的爬蟲(chóng)主要阻塞在網(wǎng)路交互中,因此防止重復的網(wǎng)路交互至關(guān)重要。爬蟲(chóng)通常會(huì )將待抓取的URL置于一個(gè)隊列中,從抓取后的網(wǎng)頁(yè)中提取到新的URL,在她們被裝入隊列之前,首先要確定這種新的URL沒(méi)有被抓取過(guò),如果之前早已抓取過(guò)了,就不再裝入隊列了。
  Hash表
  利用hash表做去重操作通常是最容易想到的方式,因為hash表查詢(xún)的時(shí)間復雜度是O(1),而且在hash表足夠大的情況下,hash沖突的機率就顯得太小,因此URL是否重復的判定準確性就十分高。利用hash表去重的這個(gè)做法是一個(gè)比較簡(jiǎn)單的解決方式。但是普通hash表也有顯著(zhù)的缺陷爬蟲(chóng)技術(shù),在考慮顯存的情況下,使用一張大的hash表是不妥的。Python中可以使用字典這一數據結構。
  URL壓縮
  如果hash表中,當每位節點(diǎn)存儲的是一個(gè)str方式的具體URL,是十分占用顯存的,如果把這個(gè)URL進(jìn)行壓縮成一個(gè)int型變量,內存占用程度上便有了3倍以上的縮小。因此可以借助Python的hashlib模塊來(lái)進(jìn)行URL壓縮。 思路:把hash表的節點(diǎn)的數據結構設置為集合,集合內貯存壓縮后的URL。
  Bloom Filter
  Bloom Filter是通過(guò)很少的錯誤換取了儲存空間的極大節約。Bloom Filter 是通過(guò)一組k 個(gè)定義在n 個(gè)輸入key 上的Hash Function,將上述n 個(gè)key 映射到m 位上的數據容器。
  
  上圖太清楚的說(shuō)明了Bloom Filter的優(yōu)勢,在可控的容器寬度內,所有hash函數對同一個(gè)元素估算的hash值都為1時(shí),就判定這個(gè)元素存在。 Python中hashlib,自帶多種hash函數,有MD5,sha1,sha224,sha256,sha384,sha512。代碼中還可以進(jìn)行加水處理,還是很方便的。 Bloom Filter也會(huì )形成沖突的情況,具體內容查看文章結尾的參考文章。
  在Python編程過(guò)程中,可以使用jaybaird提供的BloomFilter插口,或者自己造輪子。
  小細節
  有個(gè)小細節,在構建hash表的時(shí)侯選擇容器很重要。hash表占用空間很大是個(gè)太不爽的問(wèn)題,因此針對爬蟲(chóng)去重,下列方式可以解決一些問(wèn)題。
  
  上面這段代碼簡(jiǎn)單驗證了生成容器的運行時(shí)間。
  
  由上圖可以看出,建立一個(gè)寬度為1億的容器時(shí),選擇list容器程序的運行時(shí)間耗費了7.2s,而選擇字符串作為容器時(shí),才耗費了0.2s的運行時(shí)間。
  接下來(lái)瞧瞧顯存的占用情況。
  
  如果構建1億的列表占用了794660k顯存。
  
  而構建1億寬度的字符串卻占用了109720k顯存,空間占用大概降低了700000k。
  初級算法
  對于URL相似性,我只是實(shí)踐一個(gè)十分簡(jiǎn)單的技巧。
  在保證不進(jìn)行重復爬去的情況下,還須要對類(lèi)似的URL進(jìn)行判定。我采用的是sponge和ly5066113提供的思路。具體資料在參考文章里。
  下列是一組可以判定為相像的URL組
  按照預期,以上URL歸并后應當為
  思路如下,需要提取如下特點(diǎn)
  1,host字符串
  2,目錄深度(以’/’分割)
  3,尾頁(yè)特點(diǎn)
  具體算法
  
  算法本身太菜,各位一看才能懂。
  實(shí)際療效:
  
  上圖顯示了把8個(gè)不一樣的url,算出了2個(gè)值。通過(guò)實(shí)踐,在一張千萬(wàn)級的hash表中,沖突的情況是可以接受的。
  Python中的并發(fā)操作主要涉及的模型有:多線(xiàn)程模型、多進(jìn)程模型、協(xié)程模型。Elias專(zhuān)門(mén)寫(xiě)了一篇文章爬蟲(chóng)技術(shù),來(lái)比較常用的幾種模型并發(fā)方案的性能。對于爬蟲(chóng)本身來(lái)說(shuō),限制爬蟲(chóng)速率主要來(lái)自目標服務(wù)器的響應速率,因此選擇一個(gè)控制上去順手的模塊才是對的。
  多線(xiàn)程模型,是最容易上手的,Python中自帶的threading模塊能挺好的實(shí)現并發(fā)需求,配合Queue模塊來(lái)實(shí)現共享數據。
  多進(jìn)程模型和多線(xiàn)程模型類(lèi)似,multiprocessing模塊中也有類(lèi)似的Queue模塊來(lái)實(shí)現數據共享。在linux中,用戶(hù)態(tài)的進(jìn)程可以借助多核心的優(yōu)勢,因此在多核背景下,能解決爬蟲(chóng)的并發(fā)問(wèn)題。
  協(xié)程模型,在Elias的文章中,基于greenlet實(shí)現的解釋器程序的性能僅次于Stackless Python,大致比Stackless Python慢一倍,比其他方案快接近一個(gè)數量級。因此基于gevent(封裝了greenlet)的并發(fā)程序會(huì )有挺好的性能優(yōu)勢。
  具體說(shuō)明下gevent(非阻塞異步IO)。,“Gevent是一種基于解釋器的Python網(wǎng)絡(luò )庫,它用到Greenlet提供的,封裝了libevent風(fēng)波循環(huán)的高層同步API?!?br />   從實(shí)際的編程療效來(lái)看,協(xié)程模型確實(shí)表現非常好,運行結果的可控性顯著(zhù)強了不少, gevent庫的封裝易用性極強。
  數據儲存本身設計的技術(shù)就十分多,作為小菜不敢亂說(shuō),但是工作還是有一些小經(jīng)驗是可以分享的。
  前提:使用關(guān)系數據庫,測試中選擇的是mysql,其他類(lèi)似sqlite,SqlServer思路上沒(méi)有區別。
  當我們進(jìn)行數據儲存時(shí),目的就是降低與數據庫的交互操作,這樣可以增強性能。通常情況下,每當一個(gè)URL節點(diǎn)被讀取,就進(jìn)行一次數據儲存,對于這樣的邏輯進(jìn)行無(wú)限循環(huán)。其實(shí)這樣的性能體驗是十分差的,存儲速率特別慢。
  進(jìn)階做法,為了減輕與數據庫的交互次數,每次與數據庫交互從之前傳送1個(gè)節點(diǎn)弄成傳送10個(gè)節點(diǎn),到傳送100個(gè)節點(diǎn)內容,這樣效率變有了10倍至100倍的提高,在實(shí)際應用中,效果是非常好的。:D
  爬蟲(chóng)模型
  
  目前這個(gè)爬蟲(chóng)模型如上圖,調度模塊是核心模塊。調度模塊分別與下載模塊,析取模塊,存儲模塊共享三個(gè)隊列,下載模塊與析取模塊共享一個(gè)隊列。數據傳遞方向如圖示。

Python庫大全

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 347 次瀏覽 ? 2020-04-05 11:09 ? 來(lái)自相關(guān)話(huà)題

  
  urlib -網(wǎng)絡(luò )庫(stdlib)。requests -網(wǎng)絡(luò )庫。
  grab -網(wǎng)絡(luò )庫(基于pycurl)。pycurl -網(wǎng)絡(luò )庫(綁定libcurl)
  ullib3 - Python HTTP庫,安全連接池、支持文件post、可用性高。httplib2一網(wǎng)絡(luò )庫。
  RoboBrowser -一個(gè)簡(jiǎn)單的、極具Python風(fēng)格的Python庫,無(wú)需獨立的瀏覽器即可瀏覽網(wǎng)頁(yè)。
  MechanicalSoup一個(gè)與網(wǎng)站自動(dòng)交互Python庫。
  mechanize -有狀態(tài)、可編程的Web瀏覽庫。socket -底層網(wǎng)路插口(stdlib)。
  Unirest for Python - Unirest是一套可用于 多種語(yǔ)言的輕量級的HTTP庫。
  hyper - Python的HTTP/2客戶(hù)端。
  PySocks - SocksiPy更新并積極維護的版本,包括錯誤修補和一些其他的特點(diǎn)。作為socket模塊的直接替換。
  網(wǎng)絡(luò )爬蟲(chóng)框架
  grab -網(wǎng)絡(luò )爬蟲(chóng)框架(基 于pycur/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)微框架。HTML/XML解析器
  lxml - C語(yǔ)言編撰高效HTML/ XML處理庫。支持XPath。
  cssselect -解析DOM樹(shù)和CSS選擇器。pyquery -解析DOM樹(shù)和jQuery選擇器。
  BeautIFulSoup -低效HTML/ XML處理庫,純Python實(shí)現。
  html5lib -根據WHATWG規范生成HTML/ XML文檔的DOM。該規范被用在現今所有的瀏覽器上。
  feedparser一解析RSS/ATOM feeds。
  MarkupSafe -為XML/HTML/XHTML提供了安全通配符的字符串。
  xmltodict-一個(gè)可以使你在處理XML時(shí)覺(jué)得象在處理JSON一樣的Python模塊。
  xhtml2pdf -將HTML/CSS轉換為PDF。
  untangle -輕松實(shí)現將XML文件轉換為Python對象。清理
  Bleach -清理HTML (需要html5lib)。sanitize -為混亂的數據世界帶來(lái)端午。文本處理
  用于解析和操作簡(jiǎn)單文本的庫。
  difflib - (Python標準庫) 幫助進(jìn)行差異化比較。
  Levenshtein一快速估算L evenshtein距離和字符串相似度。
  fuzzywuzzy -模糊字符串匹配。esmre -正則表達式加速器。
  ftfy-自動(dòng)整理Unicode文本,減少碎片化。.自然語(yǔ)言處理
  處理人類(lèi)語(yǔ)言問(wèn)題的庫。
  NLTK -編寫(xiě)Python程序來(lái)處理人類(lèi)語(yǔ)言數據的最好平臺。
  Pattern一Python的網(wǎng)路挖掘模塊。他有自然語(yǔ)言處理工具,機器學(xué)習以及其它。
  TextBlob -為深入自然語(yǔ)言處理任務(wù)提供了一致的API。是基于NLTK以及Pattern的巨人之肩上發(fā)展的。
  jieba-中文動(dòng)詞工具。
  SnowNLP -中文文本處理庫。
  loso-另一個(gè)英文分詞庫。瀏覽器自動(dòng)化與仿真
  selenium一自動(dòng)化真正的瀏覽器(Chrome瀏覽器,火狐瀏覽器,Opera瀏覽器, IE瀏覽器)。
  Ghost.py -對PyQt的webkit的封裝(需 要PyQT)。
  Spynner -對PyQt的webkit的封裝(需要PyQT),
  Splinter -通用API瀏覽器模擬器(seleniumweb驅動(dòng),Django顧客 端,Zope) 。多重處理
  threading - Python標準庫的線(xiàn)程運行。對于I/0密集型任務(wù)太有效。對于CPU綁定的任務(wù)沒(méi)用,因為python GIL。
  multiprocessing -標準的Python庫運行多進(jìn)程。
  celery -基于分布式消息傳遞的異步任務(wù)隊列/作業(yè)隊列。;
  concurrent-futures一concurrent-futures模塊為調用異步執行提供了一個(gè)高層次的插口。
  異步網(wǎng)路編程庫
  asyncio- (在Python 3.4 +版本以上的Python標準庫)異步I/O, 時(shí)間循環(huán),協(xié)同程序和任務(wù)。
  Twisted一基于風(fēng)波驅動(dòng)的網(wǎng)路引|擎框架。Tornado -一個(gè)網(wǎng)路框架和異步網(wǎng)路庫。pulsar - Python風(fēng)波驅動(dòng)的并發(fā)框架。
  diesel - Python的基于紅色風(fēng)波的I/O框架。gevent -一個(gè)使用greenlet的基于解釋器的Python網(wǎng)路庫。
  eventlet -有WSGI支持的異步框架。
  Tomorrow -異步代碼的奇妙的修飾句型。隊列
  celery -基于分布式消息傳遞的異步任務(wù)隊列/作業(yè)隊列。
  huey -小型多線(xiàn)程任務(wù)隊列。
  mrq - Mr. Queue -使用redis &amp; Gevent的Python分布式工作任務(wù)隊列。
  RQ -基于Redis的輕量級任務(wù)隊列管理器。simpleq--個(gè)簡(jiǎn)單的,可無(wú)限擴充,基于A(yíng)mazon SQS的隊列。
  python-geARMan一Gearman的Python API。
  云計算
  picloud -云端執行Python代碼。
  dominoup.com -云端執行R,Python和matlab代碼網(wǎng)頁(yè)內容提取
  提取網(wǎng)頁(yè)內容的庫。
  HTML頁(yè)面的文本和元數據
  newspaper -用Python進(jìn)行新聞提取、文章提I取和內容策展。
  html2text -將HTML轉為Markdown格式文本。
  python-goose一HTML內容/文章提取器。lassie -人性化的網(wǎng)頁(yè)內容檢索工具WebSocket
  用于WebSocket的庫。
  Crossbar -開(kāi)源的應用消息傳遞路由器
  (Python實(shí)現的用于A(yíng)utobahn的WebSocket和WAMP)。
  AutobahnPython -提供了WebSocket合同和WAMP合同的Python實(shí)現而且開(kāi)源。
  WebSocket-for-Python - Python 2和3以及PyPy的WebSocket客戶(hù)端和服務(wù)器庫。DNS解析
  dnsyo -在全球超過(guò)1 500個(gè)的DNS服務(wù)器.上檢測你的DNS。
  pycares - c-ares的插口。c-ares是 進(jìn)行DNS懇求和異步名稱(chēng)決議的C語(yǔ)言庫。
  計算機視覺(jué)
  SimpleCV -用于照相機、圖像處理、特征提取、格式轉換的簡(jiǎn)介,可讀性強的插口(基于OpenCV)。
  Flask是一個(gè)輕量級的Web應用框架,使用Python編撰?;赪erkzeugWSGI工具箱和Jinja2模板引擎。使用BSD授權。
  Flask也被稱(chēng)為"microframework" ,因為它使用簡(jiǎn)單的核心,用extension降低其他功能。Flask沒(méi)有默認使用的數據庫、窗體驗證工具。然而,Flask保留了擴增的彈性,可以用Flask-extension加入這種功能: ORM、窗體驗證工具、文件上傳、各種開(kāi)放式身分驗證技術(shù)。
  Web2py是一個(gè)用Python語(yǔ)言 編寫(xiě)的免費的開(kāi)源Web框架,旨在敏捷快速的開(kāi)發(fā)Web應用,具有快速、可擴充、安全以及可移植的數據庫驅動(dòng)的應用,遵循LGPLv3開(kāi) 源合同。
  Web2py提供一站式的解決方案,整個(gè)開(kāi)發(fā)過(guò)程都可以在瀏覽器上進(jìn)行,提供了Web版的在線(xiàn)開(kāi)發(fā),HTML模版編撰,靜態(tài)文件的上傳,數據庫的編撰的功能。其它的還有日志功能,以及一個(gè)自動(dòng)化的admin插口。
  4.Tornado
  Tornado即是一.個(gè)Web server(對此本文不作闡述)python分布式爬蟲(chóng)框架,同時(shí)又是一個(gè)類(lèi)web.py的micro-framework,作為框架Tornado的思想主要來(lái)源于Web.py,大家在Web.py的網(wǎng)站首頁(yè)也可以見(jiàn)到Tornado的大鱷Bret Taylor的那么一段話(huà)(他這兒說(shuō)的FriendFeed用的框架跟Tornado可以看作是一個(gè)東西) :
  "[web.pyinspired the] Web framework we useat FriendFeed [and] the webapp frameworkthat ships with App Engin...”
  因為有這層關(guān)系,后面不再單獨討論Tornado。
  5.CherryPy
  CherryPy是一種用于Python的、簡(jiǎn)單而特別有用的Web框架,其主要作用是以盡可能少的操作將Web服務(wù)器與Python代碼聯(lián)接,其功能包括外置的剖析功能、靈活的插件系統以及一次運行多個(gè)HTTP服務(wù)器的功能python分布式爬蟲(chóng)框架,可與運行在最新版本的Python、Jython、 Android上。 查看全部

  
  urlib -網(wǎng)絡(luò )庫(stdlib)。requests -網(wǎng)絡(luò )庫。
  grab -網(wǎng)絡(luò )庫(基于pycurl)。pycurl -網(wǎng)絡(luò )庫(綁定libcurl)
  ullib3 - Python HTTP庫,安全連接池、支持文件post、可用性高。httplib2一網(wǎng)絡(luò )庫。
  RoboBrowser -一個(gè)簡(jiǎn)單的、極具Python風(fēng)格的Python庫,無(wú)需獨立的瀏覽器即可瀏覽網(wǎng)頁(yè)。
  MechanicalSoup一個(gè)與網(wǎng)站自動(dòng)交互Python庫。
  mechanize -有狀態(tài)、可編程的Web瀏覽庫。socket -底層網(wǎng)路插口(stdlib)。
  Unirest for Python - Unirest是一套可用于 多種語(yǔ)言的輕量級的HTTP庫。
  hyper - Python的HTTP/2客戶(hù)端。
  PySocks - SocksiPy更新并積極維護的版本,包括錯誤修補和一些其他的特點(diǎn)。作為socket模塊的直接替換。
  網(wǎng)絡(luò )爬蟲(chóng)框架
  grab -網(wǎng)絡(luò )爬蟲(chóng)框架(基 于pycur/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)微框架。HTML/XML解析器
  lxml - C語(yǔ)言編撰高效HTML/ XML處理庫。支持XPath。
  cssselect -解析DOM樹(shù)和CSS選擇器。pyquery -解析DOM樹(shù)和jQuery選擇器。
  BeautIFulSoup -低效HTML/ XML處理庫,純Python實(shí)現。
  html5lib -根據WHATWG規范生成HTML/ XML文檔的DOM。該規范被用在現今所有的瀏覽器上。
  feedparser一解析RSS/ATOM feeds。
  MarkupSafe -為XML/HTML/XHTML提供了安全通配符的字符串。
  xmltodict-一個(gè)可以使你在處理XML時(shí)覺(jué)得象在處理JSON一樣的Python模塊。
  xhtml2pdf -將HTML/CSS轉換為PDF。
  untangle -輕松實(shí)現將XML文件轉換為Python對象。清理
  Bleach -清理HTML (需要html5lib)。sanitize -為混亂的數據世界帶來(lái)端午。文本處理
  用于解析和操作簡(jiǎn)單文本的庫。
  difflib - (Python標準庫) 幫助進(jìn)行差異化比較。
  Levenshtein一快速估算L evenshtein距離和字符串相似度。
  fuzzywuzzy -模糊字符串匹配。esmre -正則表達式加速器。
  ftfy-自動(dòng)整理Unicode文本,減少碎片化。.自然語(yǔ)言處理
  處理人類(lèi)語(yǔ)言問(wèn)題的庫。
  NLTK -編寫(xiě)Python程序來(lái)處理人類(lèi)語(yǔ)言數據的最好平臺。
  Pattern一Python的網(wǎng)路挖掘模塊。他有自然語(yǔ)言處理工具,機器學(xué)習以及其它。
  TextBlob -為深入自然語(yǔ)言處理任務(wù)提供了一致的API。是基于NLTK以及Pattern的巨人之肩上發(fā)展的。
  jieba-中文動(dòng)詞工具。
  SnowNLP -中文文本處理庫。
  loso-另一個(gè)英文分詞庫。瀏覽器自動(dòng)化與仿真
  selenium一自動(dòng)化真正的瀏覽器(Chrome瀏覽器,火狐瀏覽器,Opera瀏覽器, IE瀏覽器)。
  Ghost.py -對PyQt的webkit的封裝(需 要PyQT)。
  Spynner -對PyQt的webkit的封裝(需要PyQT),
  Splinter -通用API瀏覽器模擬器(seleniumweb驅動(dòng),Django顧客 端,Zope) 。多重處理
  threading - Python標準庫的線(xiàn)程運行。對于I/0密集型任務(wù)太有效。對于CPU綁定的任務(wù)沒(méi)用,因為python GIL。
  multiprocessing -標準的Python庫運行多進(jìn)程。
  celery -基于分布式消息傳遞的異步任務(wù)隊列/作業(yè)隊列。;
  concurrent-futures一concurrent-futures模塊為調用異步執行提供了一個(gè)高層次的插口。
  異步網(wǎng)路編程庫
  asyncio- (在Python 3.4 +版本以上的Python標準庫)異步I/O, 時(shí)間循環(huán),協(xié)同程序和任務(wù)。
  Twisted一基于風(fēng)波驅動(dòng)的網(wǎng)路引|擎框架。Tornado -一個(gè)網(wǎng)路框架和異步網(wǎng)路庫。pulsar - Python風(fēng)波驅動(dòng)的并發(fā)框架。
  diesel - Python的基于紅色風(fēng)波的I/O框架。gevent -一個(gè)使用greenlet的基于解釋器的Python網(wǎng)路庫。
  eventlet -有WSGI支持的異步框架。
  Tomorrow -異步代碼的奇妙的修飾句型。隊列
  celery -基于分布式消息傳遞的異步任務(wù)隊列/作業(yè)隊列。
  huey -小型多線(xiàn)程任務(wù)隊列。
  mrq - Mr. Queue -使用redis &amp; Gevent的Python分布式工作任務(wù)隊列。
  RQ -基于Redis的輕量級任務(wù)隊列管理器。simpleq--個(gè)簡(jiǎn)單的,可無(wú)限擴充,基于A(yíng)mazon SQS的隊列。
  python-geARMan一Gearman的Python API。
  云計算
  picloud -云端執行Python代碼。
  dominoup.com -云端執行R,Python和matlab代碼網(wǎng)頁(yè)內容提取
  提取網(wǎng)頁(yè)內容的庫。
  HTML頁(yè)面的文本和元數據
  newspaper -用Python進(jìn)行新聞提取、文章提I取和內容策展。
  html2text -將HTML轉為Markdown格式文本。
  python-goose一HTML內容/文章提取器。lassie -人性化的網(wǎng)頁(yè)內容檢索工具WebSocket
  用于WebSocket的庫。
  Crossbar -開(kāi)源的應用消息傳遞路由器
  (Python實(shí)現的用于A(yíng)utobahn的WebSocket和WAMP)。
  AutobahnPython -提供了WebSocket合同和WAMP合同的Python實(shí)現而且開(kāi)源。
  WebSocket-for-Python - Python 2和3以及PyPy的WebSocket客戶(hù)端和服務(wù)器庫。DNS解析
  dnsyo -在全球超過(guò)1 500個(gè)的DNS服務(wù)器.上檢測你的DNS。
  pycares - c-ares的插口。c-ares是 進(jìn)行DNS懇求和異步名稱(chēng)決議的C語(yǔ)言庫。
  計算機視覺(jué)
  SimpleCV -用于照相機、圖像處理、特征提取、格式轉換的簡(jiǎn)介,可讀性強的插口(基于OpenCV)。
  Flask是一個(gè)輕量級的Web應用框架,使用Python編撰?;赪erkzeugWSGI工具箱和Jinja2模板引擎。使用BSD授權。
  Flask也被稱(chēng)為"microframework" ,因為它使用簡(jiǎn)單的核心,用extension降低其他功能。Flask沒(méi)有默認使用的數據庫、窗體驗證工具。然而,Flask保留了擴增的彈性,可以用Flask-extension加入這種功能: ORM、窗體驗證工具、文件上傳、各種開(kāi)放式身分驗證技術(shù)。
  Web2py是一個(gè)用Python語(yǔ)言 編寫(xiě)的免費的開(kāi)源Web框架,旨在敏捷快速的開(kāi)發(fā)Web應用,具有快速、可擴充、安全以及可移植的數據庫驅動(dòng)的應用,遵循LGPLv3開(kāi) 源合同。
  Web2py提供一站式的解決方案,整個(gè)開(kāi)發(fā)過(guò)程都可以在瀏覽器上進(jìn)行,提供了Web版的在線(xiàn)開(kāi)發(fā),HTML模版編撰,靜態(tài)文件的上傳,數據庫的編撰的功能。其它的還有日志功能,以及一個(gè)自動(dòng)化的admin插口。
  4.Tornado
  Tornado即是一.個(gè)Web server(對此本文不作闡述)python分布式爬蟲(chóng)框架,同時(shí)又是一個(gè)類(lèi)web.py的micro-framework,作為框架Tornado的思想主要來(lái)源于Web.py,大家在Web.py的網(wǎng)站首頁(yè)也可以見(jiàn)到Tornado的大鱷Bret Taylor的那么一段話(huà)(他這兒說(shuō)的FriendFeed用的框架跟Tornado可以看作是一個(gè)東西) :
  "[web.pyinspired the] Web framework we useat FriendFeed [and] the webapp frameworkthat ships with App Engin...”
  因為有這層關(guān)系,后面不再單獨討論Tornado。
  5.CherryPy
  CherryPy是一種用于Python的、簡(jiǎn)單而特別有用的Web框架,其主要作用是以盡可能少的操作將Web服務(wù)器與Python代碼聯(lián)接,其功能包括外置的剖析功能、靈活的插件系統以及一次運行多個(gè)HTTP服務(wù)器的功能python分布式爬蟲(chóng)框架,可與運行在最新版本的Python、Jython、 Android上。

使用Python編撰多線(xiàn)程爬蟲(chóng)抓取百度貼吧郵箱與手機號

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 502 次瀏覽 ? 2020-07-05 08:00 ? 來(lái)自相關(guān)話(huà)題

  不知道你們春節都是如何過(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黑魔法之描述符 查看全部

  不知道你們春節都是如何過(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)到底比其他語(yǔ)言好在哪兒呢?

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 305 次瀏覽 ? 2020-05-25 08:02 ? 來(lái)自相關(guān)話(huà)題

  07-22
  
  2038
  哪種語(yǔ)言合適寫(xiě)爬蟲(chóng)程序
  1、如果是定向爬取幾個(gè)頁(yè)面,做一些簡(jiǎn)單的頁(yè)面解析,爬取效率不是核心要求,這么用哪些語(yǔ)言差別不大。其實(shí)要是頁(yè)面結構復雜,正則表達式寫(xiě)得巨復雜,尤其是用過(guò)這些支持xpath的解釋器/爬蟲(chóng)庫后,才會(huì )發(fā)覺(jué)此種方法盡管入門(mén)門(mén)檻低,但擴充性、可維護性等都奇差。因而此種情況下還是推薦采用一些現成的爬蟲(chóng)庫,例如xpath、多線(xiàn)程支持還是必須考慮的誘因。2、如果是定向爬取,且主要目標是解析...
  延瓚
  01-01
  
  1萬(wàn)+
  Python/打響2019年第一炮-Python爬蟲(chóng)入門(mén)(一)
  打響2019第一炮-Python爬蟲(chóng)入門(mén)?2018年早已成為過(guò)去,還記得在2018年元旦寫(xiě)過(guò)一篇【Shell編程】打響2018第一炮-shell編程之for循環(huán)句子,那在此時(shí)此刻,也是寫(xiě)一篇關(guān)于編程方面,不過(guò)要比18年的稍稍中級點(diǎn)。So,mark一下,也希望對您有所幫助。?步入題外話(huà),在雙十二想必你們都逛過(guò)網(wǎng)店and易迅,例如我們須要買(mǎi)一部手機或筆記本,而且我們須要點(diǎn)開(kāi)手機或則筆記本頁(yè)面看......
  ROSE_ty的博客
  03-04
  
  2897
  Python爬蟲(chóng)出現?亂碼的解決辦法
  明天學(xué)習Python爬蟲(chóng),再讀取頁(yè)面內容時(shí)出現以下情況,雖然使用了‘utf-8’后來(lái)通過(guò)閱讀文章,將編碼改為GBK后可正常顯示...
  ahkeyan的博客
  03-15
  
  1933
  網(wǎng)路爬蟲(chóng)嘗試(VB編撰)
  PrivateSubForm_Load()a=getHTTPPage(“”)b=Split(a,“[”)(1)c=Split(b,“]”)(0)MsgBoxcEndSubFunctiongetHTTPPage(url)OnErrorResumeNextDimhttpSethttp=CreateObj...
  qq_41514083的博客
  07-17
  
  1307
  IDEA中JDBC的使用--完成對于數據庫中數據的增刪改查
  IDEA中JDBC的使用--完成對于數據庫中數據的增刪改查1.在IDEA中新建一個(gè)項目2.進(jìn)行各個(gè)類(lèi)的編撰3.項目結果展示1.在IDEA中新建一個(gè)項目1.1點(diǎn)擊右上角file,在new中選擇project,在兩側選擇Java項目,選擇自己所安裝的SDK包,點(diǎn)擊next1.2繼續點(diǎn)擊next1.3決定項目的名子以及項目?jì)Υ娴奈募A,然后點(diǎn)擊finish,完成項目的創(chuàng )建2.進(jìn)行各個(gè)類(lèi)的......
  weixin_33863087的博客
  04-25
  
  2255
  爬蟲(chóng)可以使用哪些語(yǔ)言
  有好多剛才做爬蟲(chóng)工作者得菜鳥(niǎo)常常會(huì )問(wèn)道這樣一個(gè)問(wèn)題,做爬蟲(chóng)須要哪些語(yǔ)言,個(gè)人認為任何語(yǔ)言,只要具備訪(fǎng)問(wèn)網(wǎng)路的標準庫,都可以做到這一點(diǎn)。其實(shí)了解必要的爬蟲(chóng)工具也是必然的,比如代理IP剛才接觸爬蟲(chóng),好多菜鳥(niǎo)會(huì )苦惱于用Python來(lái)做爬蟲(chóng),而且無(wú)論是JAVA,PHP還是其他更低級語(yǔ)言,都可以很便捷的實(shí)現,靜態(tài)語(yǔ)言出現錯誤的可能性很低,低級語(yǔ)言運行速率會(huì )更快一些。并且Python的優(yōu)勢在于庫更......
  大數據
  04-24
  
  2341
  網(wǎng)路爬蟲(chóng)有哪些用?如何爬?手把手教你爬網(wǎng)頁(yè)(Python代碼)
  導讀:本文主要分為兩個(gè)部份:一部份是網(wǎng)路爬蟲(chóng)的概述,幫助你們詳盡了解網(wǎng)路爬蟲(chóng);另一部份是HTTP懇求的Python實(shí)現,幫助你們了解Python中實(shí)現HTTP懇求的各類(lèi)方...
  小藍棗的博客
  03-06
  
  4846
  Python爬蟲(chóng)篇-爬取頁(yè)面所有可用的鏈接
  原理也很簡(jiǎn)單,html鏈接都是在a元素里的,我們就是匹配出所有的a元素,其實(shí)a可以是空的鏈接,空的鏈接是None,也可能是無(wú)效的鏈接。我們通過(guò)urllib庫的request來(lái)測試鏈接的有效性。當鏈接無(wú)效的話(huà)會(huì )拋出異常,我們把異常捕獲下來(lái),并提示下來(lái),沒(méi)有異常就是有效的,我們直接顯示下來(lái)就好了。...
  點(diǎn)點(diǎn)寒彬的博客
  05-16
  
  5萬(wàn)+
  簡(jiǎn)單談?wù)凱ython與Go的區別
  背景工作中的主力語(yǔ)言是Python,明年要搞性能測試的工具,因為GIL鎖的緣由,Python的性能實(shí)在是低迷,須要學(xué)一門(mén)性能高的語(yǔ)言來(lái)世成性能測試的壓力端。為此我把眼神置于了如今的新秀Go。經(jīng)過(guò)一段時(shí)間的學(xué)習,也寫(xiě)了一個(gè)小工具,記一下這兩個(gè)語(yǔ)言的區別。需求工具是一個(gè)小爬蟲(chóng),拿來(lái)爬某網(wǎng)站的某個(gè)產(chǎn)品的迭代記錄,實(shí)現邏輯就是運行腳本后,使用者從命令行輸入個(gè)別元素(產(chǎn)品ID等)后網(wǎng)絡(luò )爬蟲(chóng)語(yǔ)言,腳本導入......
  捉蟲(chóng)李高人
  03-05
  
  3萬(wàn)+
  閑話(huà)網(wǎng)路爬蟲(chóng)-CSharp對比Python
  這一期給男子伴們普及下網(wǎng)路爬蟲(chóng)這塊的東西,吹下牛,宣傳一波C#爬蟲(chóng)的優(yōu)勢,希望Python的老鐵們輕噴,哈哈!大致對比了下Python爬蟲(chóng)和C#爬蟲(chóng)的優(yōu)劣勢,可以汲取Python爬蟲(chóng)的框架,進(jìn)一步封裝好C#爬蟲(chóng)須要用到的方方面面,然后用上去還是會(huì )蠻爽的,起碼單看在數據抓取方面不輸Python,Python應該是借助上去做它更擅長(cháng)的其他方面的事情,而不是大勢宣傳它在爬蟲(chóng)方面的......
  Yeoman92的博客
  10-17
  
  6358
  python爬蟲(chóng):使用selenium+ChromeDriver爬取途家網(wǎng)
  本站(途家網(wǎng))通過(guò)常規抓頁(yè)面的方式不能獲取數據,可以使用selenium+ChromeDriver來(lái)獲取頁(yè)面數據。
  dengguawei0519的博客
  02-08
  
  129
 ?。ㄞD)各類(lèi)語(yǔ)言寫(xiě)網(wǎng)路爬蟲(chóng)有哪些優(yōu)點(diǎn)缺點(diǎn)
  我用PHP和Python都寫(xiě)過(guò)爬蟲(chóng)和正文提取程序。最開(kāi)始使用PHP所以先談?wù)凱HP的優(yōu)點(diǎn):1.語(yǔ)言比較簡(jiǎn)單,PHP是極其隨便的一種語(yǔ)言。寫(xiě)上去容易讓你把精力放到你要做的事情上,而不是各類(lèi)句型規則等等。2.各類(lèi)功能模塊齊全,這兒分兩部份:1.網(wǎng)頁(yè)下載:curl等擴充庫;2.文檔解析:dom、xpath、tidy、各種轉碼工具,可能跟題主的問(wèn)題不太一樣,我的爬蟲(chóng)須要提取正......
  hs947463167的博客
  03-06
  
  3300
  基于python的-提高爬蟲(chóng)效率的方法
  #-*-coding:utf-8-*-"""明顯提高爬蟲(chóng)效率的方法:1.換個(gè)性能更好的機器2.網(wǎng)路使用光纖3.多線(xiàn)程4.多進(jìn)程5.分布式6.提高數據的寫(xiě)入速率""""""反爬蟲(chóng)的應對舉措:1.隨機更改User-Agent2.禁用Cookie追蹤3.放慢爬蟲(chóng)速率4......
  shenjian58的博客
  03-22
  
  3萬(wàn)+
  男人更看重女孩的體型臉部,還是思想?
  常常,我們看不進(jìn)去大段大段的邏輯。深刻的哲理,常常短而精悍,一陣見(jiàn)血。問(wèn):產(chǎn)品總監挺漂亮的,有茶點(diǎn)動(dòng),但不曉得合不般配。女孩更看重女孩的體型臉部,還是...
  靜水流深的博客
  03-29
  
  4069
  python爬蟲(chóng)(1)-使用requests和beautifulsoup庫爬取中國天氣網(wǎng)
  python爬蟲(chóng)(1)-使用requests和beautifulsoup庫爬取中國天氣網(wǎng)使用工具及打算python3.7(python3以上都可以)pycharmIDE(本人習慣使用pycharm,也可以使用其他的)URL:、requests、lxml庫(p...
  天鎮少年
  10-16
  
  2萬(wàn)+
  Python爬蟲(chóng)的N種坐姿
  問(wèn)題的來(lái)歷??前幾天,在陌陌公眾號(Python爬蟲(chóng)及算法)上有個(gè)人問(wèn)了筆者一個(gè)問(wèn)題,怎樣借助爬蟲(chóng)來(lái)實(shí)現如下的需求,須要爬取的網(wǎng)頁(yè)如下(網(wǎng)址為::WhatLinksHere/Q5&amp;amp;limit=500&amp;amp;from=0):??我們的需求為爬取白色框框內的名人(有500條記錄,圖片只展......
  weixin_42530834的博客
  06-23
  
  3萬(wàn)+
  一、最簡(jiǎn)單的爬蟲(chóng)(python3爬蟲(chóng)小白系列文章)
  運行平臺:WindowsPython版本:Python3.xIDE:Pycharm2017.2.4看了崔老師的python3網(wǎng)路爬蟲(chóng)實(shí)戰,獲益頗豐,為了幫助自己更好的理解這種知識點(diǎn),于是準備趁著(zhù)這股熱乎勁,針對爬蟲(chóng)實(shí)戰進(jìn)行一系列的教程。閱讀文章前,我會(huì )默認你早已具備一下幾個(gè)要素1.python3安裝完畢Windows:
  Zhangguohao666的博客
  03-30
  
  4萬(wàn)+
  Python爬蟲(chóng),高清美圖我全都要(彼岸桌面墻紙)
  爬取彼岸桌面網(wǎng)站較為簡(jiǎn)單,用到了requests、lxml、BeautifulSoup4
  啟艦
  03-23
  
  3萬(wàn)+
  程序員結業(yè)去大公司好還是小公司好?
  其實(shí)大公司并不是人人都能進(jìn),但我仍建議還未結業(yè)的朋友,竭力地通過(guò)校招向大公司擠,即便擠進(jìn)去,你這一生會(huì )容易好多。大公司那里好?沒(méi)能進(jìn)大公司如何辦?答案都在這兒了,記得幫我點(diǎn)贊哦。目錄:技術(shù)氣氛內部晉升與跳槽啥也沒(méi)學(xué)會(huì ),公司倒閉了?不同的人脈圈,注定會(huì )有不同的結果沒(méi)能去大廠(chǎng)如何辦?一、技術(shù)氣氛綜觀(guān)整個(gè)程序員技術(shù)領(lǐng)域,那個(gè)在行業(yè)有所名氣的大牛,不是在大廠(chǎng)?并且眾所......
  weixin_34132768的博客
  12-12
  
  599
  為何python爬蟲(chóng)工程師崗位如此火爆?
  哪些是網(wǎng)路爬蟲(chóng)?網(wǎng)路爬蟲(chóng)是一個(gè)手動(dòng)提取網(wǎng)頁(yè)的程序,它為搜索引擎從萬(wàn)維網(wǎng)上下載網(wǎng)頁(yè),是搜索引擎的重要組成。傳統爬蟲(chóng)從一個(gè)或若干初始網(wǎng)頁(yè)的URL開(kāi)始,獲得初始網(wǎng)頁(yè)上的URL,在抓取網(wǎng)頁(yè)的過(guò)程中,不斷從當前頁(yè)面上抽取新的URL裝入隊列,直至滿(mǎn)足系統的一定停止條件。爬蟲(chóng)有哪些用?做為通用搜索引擎網(wǎng)頁(yè)搜集器。(google,baidu)做垂直搜索引擎.科學(xué)研究:在線(xiàn)人類(lèi)行為,在線(xiàn)社群演變,人類(lèi)動(dòng)力學(xué)研究,計......
  學(xué)習python的正確坐姿
  05-06
  
  1209
  python爬蟲(chóng)13|秒爬,python這多線(xiàn)程爬取速率也太猛了,此次就是要讓你的爬蟲(chóng)效率杠杠的
  快快了啊嘿小侄兒想啥呢明天這篇爬蟲(chóng)教程的主題就是一個(gè)字快想要做到秒爬就須要曉得哪些是多進(jìn)程哪些是多線(xiàn)程哪些是輪詢(xún)(微線(xiàn)程)你先去沏杯茶坐出來(lái)小帥b這就好好給你說(shuō)道說(shuō)道關(guān)于線(xiàn)程這玩意兒沏好茶了嗎這么...
  weixin_34273481的博客
  05-31
  
  1728
  8個(gè)最高效的Python爬蟲(chóng)框架,你用過(guò)幾個(gè)?
  小編搜集了一些較為高效的Python爬蟲(chóng)框架。分享給你們。1.ScrapyScrapy是一個(gè)為了爬取網(wǎng)站數據,提取結構性數據而編撰的應用框架??梢詰迷诎〝祿诰?,信息處理或儲存歷史數據等一系列的程序中。。用這個(gè)框架可以輕松爬出來(lái)如亞馬遜商品信息之類(lèi)的數據。項目地址:是一個(gè)用python實(shí)現的功能......
  空悲切
  12-23
  
  1萬(wàn)+
  怎么高貴地使用c語(yǔ)言編撰爬蟲(chóng)
  序言你們在平?;蚨嗷蛏俚鼐蜁?huì )有編撰網(wǎng)路爬蟲(chóng)的需求。通常來(lái)說(shuō),編撰爬蟲(chóng)的首選自然非python莫屬,除此之外,java等語(yǔ)言也是不錯的選擇。選擇上述語(yǔ)言的誘因不僅僅在于它們均有十分不錯的網(wǎng)路懇求庫和字符串處理庫,還在于基于上述語(yǔ)言的爬蟲(chóng)框架十分之多和健全。良好的爬蟲(chóng)框架可以確保爬蟲(chóng)程序的穩定性,以及編撰程序的方便性。所以,這個(gè)cspider爬蟲(chóng)庫的使命在于,我們才能使用c語(yǔ)言,仍然還能高貴地編撰爬...
  CSDN資訊
  09-03
  
  4萬(wàn)+
  學(xué)Python后究竟能干哪些?網(wǎng)友:我太難了
  覺(jué)得全世界營(yíng)銷(xiāo)文都在推Python,并且找不到工作的話(huà),又有那個(gè)機構會(huì )站下來(lái)給我推薦工作?筆者冷靜剖析多方數據,想跟你們說(shuō):關(guān)于趕超老牌霸主Java,過(guò)去幾年間Pytho...
  Rainbow
  04-28
  
  2萬(wàn)+
  python爬蟲(chóng)之一:爬取網(wǎng)頁(yè)小說(shuō)(魂破九天)
  近日做一個(gè)項目須要用到python,只懂皮毛的我花了三天時(shí)間將python重新?lián)炱鹂幸豢?,終于對python有了一定的認識。之后有按照爬蟲(chóng)基本原理爬取了一本小說(shuō),其他爬取小說(shuō)的方式類(lèi)似,結果見(jiàn)個(gè)人資源下載(本想下載分設置為0,結果CSDN設置最低為2分,沒(méi)有積分的可以加我qq要該小說(shuō))。**爬蟲(chóng)原理:1、模擬人打開(kāi)一頁(yè)小說(shuō)網(wǎng)頁(yè)2、將網(wǎng)頁(yè)保存出來(lái)......
  畢易方達的博客
  08-09
  
  7795
  全面了解Java中Native關(guān)鍵字的作用
  初次遇到native是在java.lang.Object源碼中的一個(gè)hashCode方式:1publicnativeinthashCode();為何有個(gè)native呢?這是我所要學(xué)習的地方。所以下邊想要總結下native。一、認識native即JNI,JavaNativeInterface但凡一種語(yǔ)言,都希望是純。例如解決某一個(gè)方案都喜歡就單單這個(gè)語(yǔ)言......
  做人還是高調點(diǎn)
  05-08
  
  4萬(wàn)+
  筆試:第十六章:Java高級開(kāi)發(fā)(16k)
  HashMap底層實(shí)現原理,黑紅樹(shù),B+樹(shù),B樹(shù)的結構原理Spring的AOP和IOC是哪些?它們常見(jiàn)的使用場(chǎng)景有什么?Spring事務(wù),事務(wù)的屬性,傳播行為,數據庫隔離級別Spring和SpringMVC,MyBatis以及SpringBoot的注解分別有什么?SpringMVC的工作原理,SpringBoot框架的優(yōu)點(diǎn),MyBatis框架的優(yōu)點(diǎn)SpringCould組件有什么,她們......
  Bo_wen_的博客
  03-13
  
  16萬(wàn)+
  python網(wǎng)路爬蟲(chóng)入門(mén)(一)———第一個(gè)python爬蟲(chóng)實(shí)例
  近來(lái)七天學(xué)習了一下python,并自己寫(xiě)了一個(gè)網(wǎng)路爬蟲(chóng)的反例。python版本:3.5IDE:pycharm5.0.4要用到的包可以用pycharm下載:File-&gt;DefaultSettings-&gt;DefaultProject-&gt;ProjectInterpreter選擇python版本并點(diǎn)一側的減號安裝想要的包我選擇的網(wǎng)站是中國天氣網(wǎng)中的上海天氣,打算抓取近來(lái)...
  jsmok_xingkong的博客
  11-05
  
  3143
  Python-爬蟲(chóng)初體驗
  在網(wǎng)易云課堂上看的教學(xué)視頻,如今來(lái)鞏固一下知識:1.先確定自己要爬的網(wǎng)站,以新浪新聞網(wǎng)站為例確importrequests#跟java的導包差不多,python叫導出庫res=requests.get('#039;)#爬取網(wǎng)頁(yè)內容res.encoding='utf-8'#將得到的網(wǎng)頁(yè)內容轉碼,防止亂...
  CSDN資訊
  03-27
  
  4萬(wàn)+
  無(wú)代碼時(shí)代將至,程序員怎樣保住飯碗?
  編程語(yǔ)言層出不窮,從最初的機器語(yǔ)言到現在2500種以上的中級語(yǔ)言,程序員們大呼“學(xué)到頭禿”。程序員一邊面臨編程語(yǔ)言不斷推陳出新,一邊面臨因為許多代碼已存在,程序員編撰新應用程序時(shí)存在重復“搬磚”的現象。無(wú)代碼/低代碼編程應運而生。無(wú)代碼/低代碼是一種創(chuàng )建應用的方式,它可以讓開(kāi)發(fā)者使用最少的編碼知識來(lái)快速開(kāi)發(fā)應用程序。開(kāi)發(fā)者通過(guò)圖形界面中,可視化建模來(lái)組裝和配置應用程序。這樣一來(lái),開(kāi)發(fā)者直......
  明明如月的專(zhuān)欄
  03-01
  
  1萬(wàn)+
  將一個(gè)插口響應時(shí)間從2s優(yōu)化到200ms以?xún)鹊囊粋€(gè)案例
  一、背景在開(kāi)發(fā)聯(lián)調階段發(fā)覺(jué)一個(gè)插口的響應時(shí)間非常長(cháng),常常超時(shí),囧…本文講講是怎樣定位到性能困局以及更改的思路,將該插口從2s左右優(yōu)化到200ms以?xún)?。二、步驟2.1定位定位性能困局有兩個(gè)思路,一個(gè)是通過(guò)工具去監控,一個(gè)是通過(guò)經(jīng)驗去猜測。2.1.1工具監控就工具而言,推薦使用arthas,用到的是trace命令具體安裝步驟很簡(jiǎn)單,你們自行研究。我的使用步驟是......
  tboyer
  03-24
  
  95
  python3爬坑日記(二)——大文本讀取
  python3爬坑日記(二)——大文本讀取一般我們使用python讀取文件直接使用:fopen=open("test.txt")str=fopen.read()fopen.close()假如文件內容較小,使用以上方式其實(shí)沒(méi)問(wèn)題。并且,有時(shí)我們須要讀取類(lèi)似字典,日志等富含大量?jì)热莸奈募r(shí)使用上述方式因為顯存緣由常常會(huì )拋出異常。這時(shí)請使用:withopen("test.tx......
  aa804738534的博客
  01-19
  
  646
  STL(四)容器手動(dòng)排序set
  #include&lt;set&gt;#include&lt;iostream&gt;#include&lt;set&gt;#include&lt;string&gt;usingnamespacestd;template&lt;typenameT&gt;voidshowset(set&lt;T&gt;v){for(typenamestd::set...
  薛定諤的雄貓的博客
  04-30
  
  2萬(wàn)+
  怎樣柔美的替換掉代碼中的ifelse
  平常我們在寫(xiě)代碼時(shí),處理不同的業(yè)務(wù)邏輯,用得最多的就是if和else,簡(jiǎn)單粗魯省事,并且ifelse不是最好的方法,本文將通過(guò)設計模式來(lái)替換ifelse,使代碼更高貴簡(jiǎn)約。
  非知名程序員
  01-30
  
  7萬(wàn)+
  非典逼出了天貓和易迅,新冠病毒才能逼出哪些?
  loonggg讀完須要5分鐘速讀僅需2分鐘你們好,我是大家的市長(cháng)。我曉得你們在家里都憋壞了,你們可能相對于封閉在家里“坐月子”,更希望才能盡快下班。明天我帶著(zhù)你們換個(gè)思路來(lái)聊一個(gè)問(wèn)題...
  九章算法的博客
  02-06
  
  19萬(wàn)+
  B站上有什么挺好的學(xué)習資源?
  哇說(shuō)起B站,在小九眼中就是寶藏般的存在,放休假宅在家時(shí)三天刷6、7個(gè)小時(shí)不在話(huà)下,更別提去年的跨年晚宴,我簡(jiǎn)直是跪著(zhù)看完的??!最早你們聚在在B站是為了追番,再后來(lái)我在里面刷歐美新曲和漂亮小妹妹的街舞視頻,近來(lái)三年我和周?chē)耐瑢W(xué)們早已把B站當成學(xué)習課室了,但是學(xué)習成本還免費,真是個(gè)勵志的好平臺ヽ(.??ˇдˇ??;)?下邊我們就來(lái)盤(pán)點(diǎn)一下B站上優(yōu)質(zhì)的學(xué)習資源:綜合類(lèi)Oeasy:綜合......
  王澤嶺的博客
  08-19
  
  479
  幾種語(yǔ)言在爬蟲(chóng)場(chǎng)景下的力量對比
  PHP爬蟲(chóng):代碼簡(jiǎn)單,并發(fā)處理能力較弱:因為當時(shí)PHP沒(méi)有線(xiàn)程、進(jìn)程功能要想實(shí)現并發(fā)須要借用多路復用模型R語(yǔ)言爬蟲(chóng):操作簡(jiǎn)單,功能太弱,只適用于小規模的爬取,不適宜大規模的爬取Python爬蟲(chóng):有著(zhù)各類(lèi)成熟的爬蟲(chóng)框架(eg:scrapy家族),可以便捷高效的下載網(wǎng)頁(yè)而且支持多線(xiàn)程,進(jìn)程模型成熟穩定,爬蟲(chóng)是是一個(gè)典型的多任務(wù)處理場(chǎng)景,懇求頁(yè)面時(shí)會(huì )有較長(cháng)的延后,總體來(lái)說(shuō)更多的是等待,多線(xiàn)......
  九章算法的博客
  03-17
  
  4580
  作為程序員,有沒(méi)有讓你倍感既無(wú)語(yǔ)又崩潰的代碼注釋?zhuān)?br />   作為一個(gè)程序員,堪稱(chēng)是天天通宵來(lái)加班,也難以閱遍無(wú)數的程序代碼,不曉得有多少次看到這些讓人既倍感無(wú)語(yǔ)又奔潰的代碼注釋了。你以為自己能看懂這種代碼,但是有信心可以?xún)?yōu)化這種代碼,一旦你開(kāi)始嘗試這種代碼,你將會(huì )被困在無(wú)盡的熬夜中,在痛斥中結束這段痛楚的歷程。更有有網(wǎng)友坦承,自己寫(xiě)代碼都是拼音變量名和英文注釋?zhuān)瑩谋惶叱龀绦騿T隊伍。下邊這個(gè)代碼注釋大約說(shuō)出了好多寫(xiě)代碼人的心里話(huà)了。//我寫(xiě)這一行的時(shí)侯......
  CSDN大學(xué)
  03-10
  
  2萬(wàn)+
  剛回應!刪庫報復!一行代碼蒸發(fā)數10億!
  年后開(kāi)工大戲,又降低一出:刪庫跑路!此舉直接給公司帶來(lái)數10億的估值蒸發(fā)損失,并引起一段“狗血宿怨劇情”,說(shuō)實(shí)話(huà)電視劇都不敢如此拍!此次不是他人,正是陌陌生態(tài)的第三方服務(wù)商微盟,在這個(gè)"遠程辦公”的節骨眼出事了。2月25日,微盟集團(SEHK:02013)發(fā)布公告稱(chēng),Saas生產(chǎn)環(huán)境及數據受到職工“人為破壞”導致公司當前暫時(shí)未能向顧客提供SaaS產(chǎn)品。犯罪嫌疑人是微盟研制......
  爪白白的個(gè)人博客
  04-25
  
  5萬(wàn)+
  總結了150余個(gè)神奇網(wǎng)站,你不來(lái)看看嗎?
  原博客再更新,可能就沒(méi)了,然后將持續更新本篇博客。
  11-03
  
  8645
  二次型(求梯度)——公式的簡(jiǎn)化
  1.基本方程
  程序人生的博客
  02-11
  
  5636
  大地震!某大廠(chǎng)“硬核”搶人,放話(huà):只要AI人才,中學(xué)結業(yè)都行!
  特斯拉創(chuàng )始人馬斯克,在2019年曾許下好多承諾網(wǎng)絡(luò )爬蟲(chóng)語(yǔ)言,其中一個(gè)就是:2019年末實(shí)現完全的手動(dòng)駕駛。其實(shí)這個(gè)承諾又成了flag,并且不阻礙他去年繼續為這個(gè)承諾努力。這不,就在上周四,馬斯克之間...
  3y
  03-16
  
  9萬(wàn)+
  我說(shuō)我不會(huì )算法,阿里把我掛了。
  不說(shuō)了,字節跳動(dòng)也反手把我掛了。
  qq_40618664的博客
  05-07
  
  3萬(wàn)+
  Auto.JS實(shí)現抖音,刷寶等刷視頻app,自動(dòng)點(diǎn)贊,手動(dòng)滑屏,手動(dòng)切換視頻
  Auto.JS實(shí)現抖音,刷寶等刷視頻app,自動(dòng)點(diǎn)贊,手動(dòng)滑屏,手動(dòng)切換視頻代碼如下auto();varappName=rawInput("","刷寶短視頻");launchApp(appName);sleep("5000");setScreenMetrics(1080,1920);toast("1023732997");sleep("3000");varnum=200...
  lmseo5hy的博客
  05-14
  
  1萬(wàn)+
  Python與其他語(yǔ)言相比異同點(diǎn)python零基礎入門(mén)
  python作為一門(mén)中級編程語(yǔ)言,它的誕生其實(shí)很碰巧,并且它得到程序員的喜愛(ài)卻是必然之路,以下是Python與其他編程語(yǔ)言的異同點(diǎn)對比:1.Python優(yōu)勢:簡(jiǎn)單易學(xué),才能把用其他語(yǔ)言制做的各類(lèi)模塊很輕松地連結在一起。劣勢:速率較慢,且有一些特定情況下才能出現(未能再現)的bug2.C/C++C/C++優(yōu)勢:可以被嵌入任何現代處理器中,幾乎所有操作系統都支持C/C++,跨平臺性十分好劣勢:學(xué)習......
  WUTab的博客
  07-30
  
  2549
  找出鏈表X和Y中所有2n個(gè)元素的中位數
  算法總論第三版,9.3-8算法:假如兩個(gè)字段寬度為1,選出較小的那種一個(gè)否則,取出兩個(gè)字段的中位數。取有較大中位數的鏈表的低區和較低中位數鏈表的高區,組合成新的寬度為n的鏈表。找出新鏈表的中位數思路:既然用遞歸分治,一定有基本情況,基本情況就是鏈表寬度為1.觀(guān)察會(huì )發(fā)覺(jué)總的中位數介于兩個(gè)字段的中位數之間。詳盡證明如下:設總的中位數是MM,XX的中位數是MXM_X,YY的中位數是...
  程松
  03-30
  
  10萬(wàn)+
  5分鐘,6行代碼教你寫(xiě)爬蟲(chóng)?。╬ython)
  5分鐘,6行代碼教你寫(xiě)會(huì )爬蟲(chóng)!適用人士:對數據量需求不大,簡(jiǎn)單的從網(wǎng)站上爬些數據。好,不浪費時(shí)間了,開(kāi)始!先來(lái)個(gè)反例:輸入以下代碼(共6行)importrequestsfromlxmlimporthtmlurl='#039;#須要爬數據的網(wǎng)址page=requests.Session().get(url)tree=html.f... 查看全部

  07-22
  
  2038
  哪種語(yǔ)言合適寫(xiě)爬蟲(chóng)程序
  1、如果是定向爬取幾個(gè)頁(yè)面,做一些簡(jiǎn)單的頁(yè)面解析,爬取效率不是核心要求,這么用哪些語(yǔ)言差別不大。其實(shí)要是頁(yè)面結構復雜,正則表達式寫(xiě)得巨復雜,尤其是用過(guò)這些支持xpath的解釋器/爬蟲(chóng)庫后,才會(huì )發(fā)覺(jué)此種方法盡管入門(mén)門(mén)檻低,但擴充性、可維護性等都奇差。因而此種情況下還是推薦采用一些現成的爬蟲(chóng)庫,例如xpath、多線(xiàn)程支持還是必須考慮的誘因。2、如果是定向爬取,且主要目標是解析...
  延瓚
  01-01
  
  1萬(wàn)+
  Python/打響2019年第一炮-Python爬蟲(chóng)入門(mén)(一)
  打響2019第一炮-Python爬蟲(chóng)入門(mén)?2018年早已成為過(guò)去,還記得在2018年元旦寫(xiě)過(guò)一篇【Shell編程】打響2018第一炮-shell編程之for循環(huán)句子,那在此時(shí)此刻,也是寫(xiě)一篇關(guān)于編程方面,不過(guò)要比18年的稍稍中級點(diǎn)。So,mark一下,也希望對您有所幫助。?步入題外話(huà),在雙十二想必你們都逛過(guò)網(wǎng)店and易迅,例如我們須要買(mǎi)一部手機或筆記本,而且我們須要點(diǎn)開(kāi)手機或則筆記本頁(yè)面看......
  ROSE_ty的博客
  03-04
  
  2897
  Python爬蟲(chóng)出現?亂碼的解決辦法
  明天學(xué)習Python爬蟲(chóng),再讀取頁(yè)面內容時(shí)出現以下情況,雖然使用了‘utf-8’后來(lái)通過(guò)閱讀文章,將編碼改為GBK后可正常顯示...
  ahkeyan的博客
  03-15
  
  1933
  網(wǎng)路爬蟲(chóng)嘗試(VB編撰)
  PrivateSubForm_Load()a=getHTTPPage(“”)b=Split(a,“[”)(1)c=Split(b,“]”)(0)MsgBoxcEndSubFunctiongetHTTPPage(url)OnErrorResumeNextDimhttpSethttp=CreateObj...
  qq_41514083的博客
  07-17
  
  1307
  IDEA中JDBC的使用--完成對于數據庫中數據的增刪改查
  IDEA中JDBC的使用--完成對于數據庫中數據的增刪改查1.在IDEA中新建一個(gè)項目2.進(jìn)行各個(gè)類(lèi)的編撰3.項目結果展示1.在IDEA中新建一個(gè)項目1.1點(diǎn)擊右上角file,在new中選擇project,在兩側選擇Java項目,選擇自己所安裝的SDK包,點(diǎn)擊next1.2繼續點(diǎn)擊next1.3決定項目的名子以及項目?jì)Υ娴奈募A,然后點(diǎn)擊finish,完成項目的創(chuàng )建2.進(jìn)行各個(gè)類(lèi)的......
  weixin_33863087的博客
  04-25
  
  2255
  爬蟲(chóng)可以使用哪些語(yǔ)言
  有好多剛才做爬蟲(chóng)工作者得菜鳥(niǎo)常常會(huì )問(wèn)道這樣一個(gè)問(wèn)題,做爬蟲(chóng)須要哪些語(yǔ)言,個(gè)人認為任何語(yǔ)言,只要具備訪(fǎng)問(wèn)網(wǎng)路的標準庫,都可以做到這一點(diǎn)。其實(shí)了解必要的爬蟲(chóng)工具也是必然的,比如代理IP剛才接觸爬蟲(chóng),好多菜鳥(niǎo)會(huì )苦惱于用Python來(lái)做爬蟲(chóng),而且無(wú)論是JAVA,PHP還是其他更低級語(yǔ)言,都可以很便捷的實(shí)現,靜態(tài)語(yǔ)言出現錯誤的可能性很低,低級語(yǔ)言運行速率會(huì )更快一些。并且Python的優(yōu)勢在于庫更......
  大數據
  04-24
  
  2341
  網(wǎng)路爬蟲(chóng)有哪些用?如何爬?手把手教你爬網(wǎng)頁(yè)(Python代碼)
  導讀:本文主要分為兩個(gè)部份:一部份是網(wǎng)路爬蟲(chóng)的概述,幫助你們詳盡了解網(wǎng)路爬蟲(chóng);另一部份是HTTP懇求的Python實(shí)現,幫助你們了解Python中實(shí)現HTTP懇求的各類(lèi)方...
  小藍棗的博客
  03-06
  
  4846
  Python爬蟲(chóng)篇-爬取頁(yè)面所有可用的鏈接
  原理也很簡(jiǎn)單,html鏈接都是在a元素里的,我們就是匹配出所有的a元素,其實(shí)a可以是空的鏈接,空的鏈接是None,也可能是無(wú)效的鏈接。我們通過(guò)urllib庫的request來(lái)測試鏈接的有效性。當鏈接無(wú)效的話(huà)會(huì )拋出異常,我們把異常捕獲下來(lái),并提示下來(lái),沒(méi)有異常就是有效的,我們直接顯示下來(lái)就好了。...
  點(diǎn)點(diǎn)寒彬的博客
  05-16
  
  5萬(wàn)+
  簡(jiǎn)單談?wù)凱ython與Go的區別
  背景工作中的主力語(yǔ)言是Python,明年要搞性能測試的工具,因為GIL鎖的緣由,Python的性能實(shí)在是低迷,須要學(xué)一門(mén)性能高的語(yǔ)言來(lái)世成性能測試的壓力端。為此我把眼神置于了如今的新秀Go。經(jīng)過(guò)一段時(shí)間的學(xué)習,也寫(xiě)了一個(gè)小工具,記一下這兩個(gè)語(yǔ)言的區別。需求工具是一個(gè)小爬蟲(chóng),拿來(lái)爬某網(wǎng)站的某個(gè)產(chǎn)品的迭代記錄,實(shí)現邏輯就是運行腳本后,使用者從命令行輸入個(gè)別元素(產(chǎn)品ID等)后網(wǎng)絡(luò )爬蟲(chóng)語(yǔ)言,腳本導入......
  捉蟲(chóng)李高人
  03-05
  
  3萬(wàn)+
  閑話(huà)網(wǎng)路爬蟲(chóng)-CSharp對比Python
  這一期給男子伴們普及下網(wǎng)路爬蟲(chóng)這塊的東西,吹下牛,宣傳一波C#爬蟲(chóng)的優(yōu)勢,希望Python的老鐵們輕噴,哈哈!大致對比了下Python爬蟲(chóng)和C#爬蟲(chóng)的優(yōu)劣勢,可以汲取Python爬蟲(chóng)的框架,進(jìn)一步封裝好C#爬蟲(chóng)須要用到的方方面面,然后用上去還是會(huì )蠻爽的,起碼單看在數據抓取方面不輸Python,Python應該是借助上去做它更擅長(cháng)的其他方面的事情,而不是大勢宣傳它在爬蟲(chóng)方面的......
  Yeoman92的博客
  10-17
  
  6358
  python爬蟲(chóng):使用selenium+ChromeDriver爬取途家網(wǎng)
  本站(途家網(wǎng))通過(guò)常規抓頁(yè)面的方式不能獲取數據,可以使用selenium+ChromeDriver來(lái)獲取頁(yè)面數據。
  dengguawei0519的博客
  02-08
  
  129
 ?。ㄞD)各類(lèi)語(yǔ)言寫(xiě)網(wǎng)路爬蟲(chóng)有哪些優(yōu)點(diǎn)缺點(diǎn)
  我用PHP和Python都寫(xiě)過(guò)爬蟲(chóng)和正文提取程序。最開(kāi)始使用PHP所以先談?wù)凱HP的優(yōu)點(diǎn):1.語(yǔ)言比較簡(jiǎn)單,PHP是極其隨便的一種語(yǔ)言。寫(xiě)上去容易讓你把精力放到你要做的事情上,而不是各類(lèi)句型規則等等。2.各類(lèi)功能模塊齊全,這兒分兩部份:1.網(wǎng)頁(yè)下載:curl等擴充庫;2.文檔解析:dom、xpath、tidy、各種轉碼工具,可能跟題主的問(wèn)題不太一樣,我的爬蟲(chóng)須要提取正......
  hs947463167的博客
  03-06
  
  3300
  基于python的-提高爬蟲(chóng)效率的方法
  #-*-coding:utf-8-*-"""明顯提高爬蟲(chóng)效率的方法:1.換個(gè)性能更好的機器2.網(wǎng)路使用光纖3.多線(xiàn)程4.多進(jìn)程5.分布式6.提高數據的寫(xiě)入速率""""""反爬蟲(chóng)的應對舉措:1.隨機更改User-Agent2.禁用Cookie追蹤3.放慢爬蟲(chóng)速率4......
  shenjian58的博客
  03-22
  
  3萬(wàn)+
  男人更看重女孩的體型臉部,還是思想?
  常常,我們看不進(jìn)去大段大段的邏輯。深刻的哲理,常常短而精悍,一陣見(jiàn)血。問(wèn):產(chǎn)品總監挺漂亮的,有茶點(diǎn)動(dòng),但不曉得合不般配。女孩更看重女孩的體型臉部,還是...
  靜水流深的博客
  03-29
  
  4069
  python爬蟲(chóng)(1)-使用requests和beautifulsoup庫爬取中國天氣網(wǎng)
  python爬蟲(chóng)(1)-使用requests和beautifulsoup庫爬取中國天氣網(wǎng)使用工具及打算python3.7(python3以上都可以)pycharmIDE(本人習慣使用pycharm,也可以使用其他的)URL:、requests、lxml庫(p...
  天鎮少年
  10-16
  
  2萬(wàn)+
  Python爬蟲(chóng)的N種坐姿
  問(wèn)題的來(lái)歷??前幾天,在陌陌公眾號(Python爬蟲(chóng)及算法)上有個(gè)人問(wèn)了筆者一個(gè)問(wèn)題,怎樣借助爬蟲(chóng)來(lái)實(shí)現如下的需求,須要爬取的網(wǎng)頁(yè)如下(網(wǎng)址為::WhatLinksHere/Q5&amp;amp;limit=500&amp;amp;from=0):??我們的需求為爬取白色框框內的名人(有500條記錄,圖片只展......
  weixin_42530834的博客
  06-23
  
  3萬(wàn)+
  一、最簡(jiǎn)單的爬蟲(chóng)(python3爬蟲(chóng)小白系列文章)
  運行平臺:WindowsPython版本:Python3.xIDE:Pycharm2017.2.4看了崔老師的python3網(wǎng)路爬蟲(chóng)實(shí)戰,獲益頗豐,為了幫助自己更好的理解這種知識點(diǎn),于是準備趁著(zhù)這股熱乎勁,針對爬蟲(chóng)實(shí)戰進(jìn)行一系列的教程。閱讀文章前,我會(huì )默認你早已具備一下幾個(gè)要素1.python3安裝完畢Windows:
  Zhangguohao666的博客
  03-30
  
  4萬(wàn)+
  Python爬蟲(chóng),高清美圖我全都要(彼岸桌面墻紙)
  爬取彼岸桌面網(wǎng)站較為簡(jiǎn)單,用到了requests、lxml、BeautifulSoup4
  啟艦
  03-23
  
  3萬(wàn)+
  程序員結業(yè)去大公司好還是小公司好?
  其實(shí)大公司并不是人人都能進(jìn),但我仍建議還未結業(yè)的朋友,竭力地通過(guò)校招向大公司擠,即便擠進(jìn)去,你這一生會(huì )容易好多。大公司那里好?沒(méi)能進(jìn)大公司如何辦?答案都在這兒了,記得幫我點(diǎn)贊哦。目錄:技術(shù)氣氛內部晉升與跳槽啥也沒(méi)學(xué)會(huì ),公司倒閉了?不同的人脈圈,注定會(huì )有不同的結果沒(méi)能去大廠(chǎng)如何辦?一、技術(shù)氣氛綜觀(guān)整個(gè)程序員技術(shù)領(lǐng)域,那個(gè)在行業(yè)有所名氣的大牛,不是在大廠(chǎng)?并且眾所......
  weixin_34132768的博客
  12-12
  
  599
  為何python爬蟲(chóng)工程師崗位如此火爆?
  哪些是網(wǎng)路爬蟲(chóng)?網(wǎng)路爬蟲(chóng)是一個(gè)手動(dòng)提取網(wǎng)頁(yè)的程序,它為搜索引擎從萬(wàn)維網(wǎng)上下載網(wǎng)頁(yè),是搜索引擎的重要組成。傳統爬蟲(chóng)從一個(gè)或若干初始網(wǎng)頁(yè)的URL開(kāi)始,獲得初始網(wǎng)頁(yè)上的URL,在抓取網(wǎng)頁(yè)的過(guò)程中,不斷從當前頁(yè)面上抽取新的URL裝入隊列,直至滿(mǎn)足系統的一定停止條件。爬蟲(chóng)有哪些用?做為通用搜索引擎網(wǎng)頁(yè)搜集器。(google,baidu)做垂直搜索引擎.科學(xué)研究:在線(xiàn)人類(lèi)行為,在線(xiàn)社群演變,人類(lèi)動(dòng)力學(xué)研究,計......
  學(xué)習python的正確坐姿
  05-06
  
  1209
  python爬蟲(chóng)13|秒爬,python這多線(xiàn)程爬取速率也太猛了,此次就是要讓你的爬蟲(chóng)效率杠杠的
  快快了啊嘿小侄兒想啥呢明天這篇爬蟲(chóng)教程的主題就是一個(gè)字快想要做到秒爬就須要曉得哪些是多進(jìn)程哪些是多線(xiàn)程哪些是輪詢(xún)(微線(xiàn)程)你先去沏杯茶坐出來(lái)小帥b這就好好給你說(shuō)道說(shuō)道關(guān)于線(xiàn)程這玩意兒沏好茶了嗎這么...
  weixin_34273481的博客
  05-31
  
  1728
  8個(gè)最高效的Python爬蟲(chóng)框架,你用過(guò)幾個(gè)?
  小編搜集了一些較為高效的Python爬蟲(chóng)框架。分享給你們。1.ScrapyScrapy是一個(gè)為了爬取網(wǎng)站數據,提取結構性數據而編撰的應用框架??梢詰迷诎〝祿诰?,信息處理或儲存歷史數據等一系列的程序中。。用這個(gè)框架可以輕松爬出來(lái)如亞馬遜商品信息之類(lèi)的數據。項目地址:是一個(gè)用python實(shí)現的功能......
  空悲切
  12-23
  
  1萬(wàn)+
  怎么高貴地使用c語(yǔ)言編撰爬蟲(chóng)
  序言你們在平?;蚨嗷蛏俚鼐蜁?huì )有編撰網(wǎng)路爬蟲(chóng)的需求。通常來(lái)說(shuō),編撰爬蟲(chóng)的首選自然非python莫屬,除此之外,java等語(yǔ)言也是不錯的選擇。選擇上述語(yǔ)言的誘因不僅僅在于它們均有十分不錯的網(wǎng)路懇求庫和字符串處理庫,還在于基于上述語(yǔ)言的爬蟲(chóng)框架十分之多和健全。良好的爬蟲(chóng)框架可以確保爬蟲(chóng)程序的穩定性,以及編撰程序的方便性。所以,這個(gè)cspider爬蟲(chóng)庫的使命在于,我們才能使用c語(yǔ)言,仍然還能高貴地編撰爬...
  CSDN資訊
  09-03
  
  4萬(wàn)+
  學(xué)Python后究竟能干哪些?網(wǎng)友:我太難了
  覺(jué)得全世界營(yíng)銷(xiāo)文都在推Python,并且找不到工作的話(huà),又有那個(gè)機構會(huì )站下來(lái)給我推薦工作?筆者冷靜剖析多方數據,想跟你們說(shuō):關(guān)于趕超老牌霸主Java,過(guò)去幾年間Pytho...
  Rainbow
  04-28
  
  2萬(wàn)+
  python爬蟲(chóng)之一:爬取網(wǎng)頁(yè)小說(shuō)(魂破九天)
  近日做一個(gè)項目須要用到python,只懂皮毛的我花了三天時(shí)間將python重新?lián)炱鹂幸豢?,終于對python有了一定的認識。之后有按照爬蟲(chóng)基本原理爬取了一本小說(shuō),其他爬取小說(shuō)的方式類(lèi)似,結果見(jiàn)個(gè)人資源下載(本想下載分設置為0,結果CSDN設置最低為2分,沒(méi)有積分的可以加我qq要該小說(shuō))。**爬蟲(chóng)原理:1、模擬人打開(kāi)一頁(yè)小說(shuō)網(wǎng)頁(yè)2、將網(wǎng)頁(yè)保存出來(lái)......
  畢易方達的博客
  08-09
  
  7795
  全面了解Java中Native關(guān)鍵字的作用
  初次遇到native是在java.lang.Object源碼中的一個(gè)hashCode方式:1publicnativeinthashCode();為何有個(gè)native呢?這是我所要學(xué)習的地方。所以下邊想要總結下native。一、認識native即JNI,JavaNativeInterface但凡一種語(yǔ)言,都希望是純。例如解決某一個(gè)方案都喜歡就單單這個(gè)語(yǔ)言......
  做人還是高調點(diǎn)
  05-08
  
  4萬(wàn)+
  筆試:第十六章:Java高級開(kāi)發(fā)(16k)
  HashMap底層實(shí)現原理,黑紅樹(shù),B+樹(shù),B樹(shù)的結構原理Spring的AOP和IOC是哪些?它們常見(jiàn)的使用場(chǎng)景有什么?Spring事務(wù),事務(wù)的屬性,傳播行為,數據庫隔離級別Spring和SpringMVC,MyBatis以及SpringBoot的注解分別有什么?SpringMVC的工作原理,SpringBoot框架的優(yōu)點(diǎn),MyBatis框架的優(yōu)點(diǎn)SpringCould組件有什么,她們......
  Bo_wen_的博客
  03-13
  
  16萬(wàn)+
  python網(wǎng)路爬蟲(chóng)入門(mén)(一)———第一個(gè)python爬蟲(chóng)實(shí)例
  近來(lái)七天學(xué)習了一下python,并自己寫(xiě)了一個(gè)網(wǎng)路爬蟲(chóng)的反例。python版本:3.5IDE:pycharm5.0.4要用到的包可以用pycharm下載:File-&gt;DefaultSettings-&gt;DefaultProject-&gt;ProjectInterpreter選擇python版本并點(diǎn)一側的減號安裝想要的包我選擇的網(wǎng)站是中國天氣網(wǎng)中的上海天氣,打算抓取近來(lái)...
  jsmok_xingkong的博客
  11-05
  
  3143
  Python-爬蟲(chóng)初體驗
  在網(wǎng)易云課堂上看的教學(xué)視頻,如今來(lái)鞏固一下知識:1.先確定自己要爬的網(wǎng)站,以新浪新聞網(wǎng)站為例確importrequests#跟java的導包差不多,python叫導出庫res=requests.get('#039;)#爬取網(wǎng)頁(yè)內容res.encoding='utf-8'#將得到的網(wǎng)頁(yè)內容轉碼,防止亂...
  CSDN資訊
  03-27
  
  4萬(wàn)+
  無(wú)代碼時(shí)代將至,程序員怎樣保住飯碗?
  編程語(yǔ)言層出不窮,從最初的機器語(yǔ)言到現在2500種以上的中級語(yǔ)言,程序員們大呼“學(xué)到頭禿”。程序員一邊面臨編程語(yǔ)言不斷推陳出新,一邊面臨因為許多代碼已存在,程序員編撰新應用程序時(shí)存在重復“搬磚”的現象。無(wú)代碼/低代碼編程應運而生。無(wú)代碼/低代碼是一種創(chuàng )建應用的方式,它可以讓開(kāi)發(fā)者使用最少的編碼知識來(lái)快速開(kāi)發(fā)應用程序。開(kāi)發(fā)者通過(guò)圖形界面中,可視化建模來(lái)組裝和配置應用程序。這樣一來(lái),開(kāi)發(fā)者直......
  明明如月的專(zhuān)欄
  03-01
  
  1萬(wàn)+
  將一個(gè)插口響應時(shí)間從2s優(yōu)化到200ms以?xún)鹊囊粋€(gè)案例
  一、背景在開(kāi)發(fā)聯(lián)調階段發(fā)覺(jué)一個(gè)插口的響應時(shí)間非常長(cháng),常常超時(shí),囧…本文講講是怎樣定位到性能困局以及更改的思路,將該插口從2s左右優(yōu)化到200ms以?xún)?。二、步驟2.1定位定位性能困局有兩個(gè)思路,一個(gè)是通過(guò)工具去監控,一個(gè)是通過(guò)經(jīng)驗去猜測。2.1.1工具監控就工具而言,推薦使用arthas,用到的是trace命令具體安裝步驟很簡(jiǎn)單,你們自行研究。我的使用步驟是......
  tboyer
  03-24
  
  95
  python3爬坑日記(二)——大文本讀取
  python3爬坑日記(二)——大文本讀取一般我們使用python讀取文件直接使用:fopen=open("test.txt")str=fopen.read()fopen.close()假如文件內容較小,使用以上方式其實(shí)沒(méi)問(wèn)題。并且,有時(shí)我們須要讀取類(lèi)似字典,日志等富含大量?jì)热莸奈募r(shí)使用上述方式因為顯存緣由常常會(huì )拋出異常。這時(shí)請使用:withopen("test.tx......
  aa804738534的博客
  01-19
  
  646
  STL(四)容器手動(dòng)排序set
  #include&lt;set&gt;#include&lt;iostream&gt;#include&lt;set&gt;#include&lt;string&gt;usingnamespacestd;template&lt;typenameT&gt;voidshowset(set&lt;T&gt;v){for(typenamestd::set...
  薛定諤的雄貓的博客
  04-30
  
  2萬(wàn)+
  怎樣柔美的替換掉代碼中的ifelse
  平常我們在寫(xiě)代碼時(shí),處理不同的業(yè)務(wù)邏輯,用得最多的就是if和else,簡(jiǎn)單粗魯省事,并且ifelse不是最好的方法,本文將通過(guò)設計模式來(lái)替換ifelse,使代碼更高貴簡(jiǎn)約。
  非知名程序員
  01-30
  
  7萬(wàn)+
  非典逼出了天貓和易迅,新冠病毒才能逼出哪些?
  loonggg讀完須要5分鐘速讀僅需2分鐘你們好,我是大家的市長(cháng)。我曉得你們在家里都憋壞了,你們可能相對于封閉在家里“坐月子”,更希望才能盡快下班。明天我帶著(zhù)你們換個(gè)思路來(lái)聊一個(gè)問(wèn)題...
  九章算法的博客
  02-06
  
  19萬(wàn)+
  B站上有什么挺好的學(xué)習資源?
  哇說(shuō)起B站,在小九眼中就是寶藏般的存在,放休假宅在家時(shí)三天刷6、7個(gè)小時(shí)不在話(huà)下,更別提去年的跨年晚宴,我簡(jiǎn)直是跪著(zhù)看完的??!最早你們聚在在B站是為了追番,再后來(lái)我在里面刷歐美新曲和漂亮小妹妹的街舞視頻,近來(lái)三年我和周?chē)耐瑢W(xué)們早已把B站當成學(xué)習課室了,但是學(xué)習成本還免費,真是個(gè)勵志的好平臺ヽ(.??ˇдˇ??;)?下邊我們就來(lái)盤(pán)點(diǎn)一下B站上優(yōu)質(zhì)的學(xué)習資源:綜合類(lèi)Oeasy:綜合......
  王澤嶺的博客
  08-19
  
  479
  幾種語(yǔ)言在爬蟲(chóng)場(chǎng)景下的力量對比
  PHP爬蟲(chóng):代碼簡(jiǎn)單,并發(fā)處理能力較弱:因為當時(shí)PHP沒(méi)有線(xiàn)程、進(jìn)程功能要想實(shí)現并發(fā)須要借用多路復用模型R語(yǔ)言爬蟲(chóng):操作簡(jiǎn)單,功能太弱,只適用于小規模的爬取,不適宜大規模的爬取Python爬蟲(chóng):有著(zhù)各類(lèi)成熟的爬蟲(chóng)框架(eg:scrapy家族),可以便捷高效的下載網(wǎng)頁(yè)而且支持多線(xiàn)程,進(jìn)程模型成熟穩定,爬蟲(chóng)是是一個(gè)典型的多任務(wù)處理場(chǎng)景,懇求頁(yè)面時(shí)會(huì )有較長(cháng)的延后,總體來(lái)說(shuō)更多的是等待,多線(xiàn)......
  九章算法的博客
  03-17
  
  4580
  作為程序員,有沒(méi)有讓你倍感既無(wú)語(yǔ)又崩潰的代碼注釋?zhuān)?br />   作為一個(gè)程序員,堪稱(chēng)是天天通宵來(lái)加班,也難以閱遍無(wú)數的程序代碼,不曉得有多少次看到這些讓人既倍感無(wú)語(yǔ)又奔潰的代碼注釋了。你以為自己能看懂這種代碼,但是有信心可以?xún)?yōu)化這種代碼,一旦你開(kāi)始嘗試這種代碼,你將會(huì )被困在無(wú)盡的熬夜中,在痛斥中結束這段痛楚的歷程。更有有網(wǎng)友坦承,自己寫(xiě)代碼都是拼音變量名和英文注釋?zhuān)瑩谋惶叱龀绦騿T隊伍。下邊這個(gè)代碼注釋大約說(shuō)出了好多寫(xiě)代碼人的心里話(huà)了。//我寫(xiě)這一行的時(shí)侯......
  CSDN大學(xué)
  03-10
  
  2萬(wàn)+
  剛回應!刪庫報復!一行代碼蒸發(fā)數10億!
  年后開(kāi)工大戲,又降低一出:刪庫跑路!此舉直接給公司帶來(lái)數10億的估值蒸發(fā)損失,并引起一段“狗血宿怨劇情”,說(shuō)實(shí)話(huà)電視劇都不敢如此拍!此次不是他人,正是陌陌生態(tài)的第三方服務(wù)商微盟,在這個(gè)"遠程辦公”的節骨眼出事了。2月25日,微盟集團(SEHK:02013)發(fā)布公告稱(chēng),Saas生產(chǎn)環(huán)境及數據受到職工“人為破壞”導致公司當前暫時(shí)未能向顧客提供SaaS產(chǎn)品。犯罪嫌疑人是微盟研制......
  爪白白的個(gè)人博客
  04-25
  
  5萬(wàn)+
  總結了150余個(gè)神奇網(wǎng)站,你不來(lái)看看嗎?
  原博客再更新,可能就沒(méi)了,然后將持續更新本篇博客。
  11-03
  
  8645
  二次型(求梯度)——公式的簡(jiǎn)化
  1.基本方程
  程序人生的博客
  02-11
  
  5636
  大地震!某大廠(chǎng)“硬核”搶人,放話(huà):只要AI人才,中學(xué)結業(yè)都行!
  特斯拉創(chuàng )始人馬斯克,在2019年曾許下好多承諾網(wǎng)絡(luò )爬蟲(chóng)語(yǔ)言,其中一個(gè)就是:2019年末實(shí)現完全的手動(dòng)駕駛。其實(shí)這個(gè)承諾又成了flag,并且不阻礙他去年繼續為這個(gè)承諾努力。這不,就在上周四,馬斯克之間...
  3y
  03-16
  
  9萬(wàn)+
  我說(shuō)我不會(huì )算法,阿里把我掛了。
  不說(shuō)了,字節跳動(dòng)也反手把我掛了。
  qq_40618664的博客
  05-07
  
  3萬(wàn)+
  Auto.JS實(shí)現抖音,刷寶等刷視頻app,自動(dòng)點(diǎn)贊,手動(dòng)滑屏,手動(dòng)切換視頻
  Auto.JS實(shí)現抖音,刷寶等刷視頻app,自動(dòng)點(diǎn)贊,手動(dòng)滑屏,手動(dòng)切換視頻代碼如下auto();varappName=rawInput("","刷寶短視頻");launchApp(appName);sleep("5000");setScreenMetrics(1080,1920);toast("1023732997");sleep("3000");varnum=200...
  lmseo5hy的博客
  05-14
  
  1萬(wàn)+
  Python與其他語(yǔ)言相比異同點(diǎn)python零基礎入門(mén)
  python作為一門(mén)中級編程語(yǔ)言,它的誕生其實(shí)很碰巧,并且它得到程序員的喜愛(ài)卻是必然之路,以下是Python與其他編程語(yǔ)言的異同點(diǎn)對比:1.Python優(yōu)勢:簡(jiǎn)單易學(xué),才能把用其他語(yǔ)言制做的各類(lèi)模塊很輕松地連結在一起。劣勢:速率較慢,且有一些特定情況下才能出現(未能再現)的bug2.C/C++C/C++優(yōu)勢:可以被嵌入任何現代處理器中,幾乎所有操作系統都支持C/C++,跨平臺性十分好劣勢:學(xué)習......
  WUTab的博客
  07-30
  
  2549
  找出鏈表X和Y中所有2n個(gè)元素的中位數
  算法總論第三版,9.3-8算法:假如兩個(gè)字段寬度為1,選出較小的那種一個(gè)否則,取出兩個(gè)字段的中位數。取有較大中位數的鏈表的低區和較低中位數鏈表的高區,組合成新的寬度為n的鏈表。找出新鏈表的中位數思路:既然用遞歸分治,一定有基本情況,基本情況就是鏈表寬度為1.觀(guān)察會(huì )發(fā)覺(jué)總的中位數介于兩個(gè)字段的中位數之間。詳盡證明如下:設總的中位數是MM,XX的中位數是MXM_X,YY的中位數是...
  程松
  03-30
  
  10萬(wàn)+
  5分鐘,6行代碼教你寫(xiě)爬蟲(chóng)?。╬ython)
  5分鐘,6行代碼教你寫(xiě)會(huì )爬蟲(chóng)!適用人士:對數據量需求不大,簡(jiǎn)單的從網(wǎng)站上爬些數據。好,不浪費時(shí)間了,開(kāi)始!先來(lái)個(gè)反例:輸入以下代碼(共6行)importrequestsfromlxmlimporthtmlurl='#039;#須要爬數據的網(wǎng)址page=requests.Session().get(url)tree=html.f...

【黑馬程序員】Python爬蟲(chóng)是哪些?爬蟲(chóng)教程

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 493 次瀏覽 ? 2020-05-19 08:01 ? 來(lái)自相關(guān)話(huà)題

  
  【黑馬程序員】Python 爬蟲(chóng)是哪些?爬蟲(chóng)教程假如你仔細觀(guān)察,就不難發(fā)覺(jué),懂爬蟲(chóng)、學(xué)習爬蟲(chóng)的人越來(lái)越多,一方面,互聯(lián)網(wǎng)可以獲取 的數據越來(lái)越多,另一方面,像 Python 這樣的編程語(yǔ)言提供越來(lái)越多的優(yōu)秀工具,讓爬蟲(chóng) 變得簡(jiǎn)單、容易上手。 利用爬蟲(chóng)我們可以獲取大量的價(jià)值數據,從而獲得感性認識中不能得到的信息,比如: 知乎:爬取優(yōu)質(zhì)答案,為你篩選出各話(huà)題下最優(yōu)質(zhì)的內容。淘寶、京東:抓取商品、評論及 銷(xiāo)量數據,對各類(lèi)商品及用戶(hù)的消費場(chǎng)景進(jìn)行剖析。安居客、鏈家:抓取房產(chǎn)買(mǎi)賣(mài)及租售信 息,分析樓市變化趨勢、做不同區域的樓價(jià)剖析。拉勾網(wǎng)、智聯(lián):爬取各種職位信息,分析 各行業(yè)人才需求情況及薪酬水平。雪球網(wǎng):抓取雪球高回報用戶(hù)的行為,對股票市場(chǎng)進(jìn)行分 析和預測。 爬蟲(chóng)是入門(mén) Python 最好的形式,沒(méi)有之一。Python 有很多應用的方向,比如后臺開(kāi)發(fā)、 web 開(kāi)發(fā)、科學(xué)估算等等,但爬蟲(chóng)對于初學(xué)者而言更友好,原理簡(jiǎn)單,幾行代碼能夠實(shí)現 基本的爬蟲(chóng),學(xué)習的過(guò)程愈發(fā)平滑,你能感受更大的成就感。 掌握基本的爬蟲(chóng)后,你再去學(xué)習 Python 數據剖析、web 開(kāi)發(fā)甚至機器學(xué)習,都會(huì )更得心 應手。因為這個(gè)過(guò)程中,Python 基本句型、庫的使用,以及怎樣查找文檔你都十分熟悉了。
   對于小白來(lái)說(shuō),爬蟲(chóng)可能是一件十分復雜、技術(shù)門(mén)檻很高的事情。比如有人覺(jué)得學(xué)爬蟲(chóng)必須 精通 Python,然后哼哧哼哧系統學(xué)習 Python 的每位知識點(diǎn),很久以后發(fā)覺(jué)一直爬不了數 據;有的人則覺(jué)得先要把握網(wǎng)頁(yè)的知識,遂開(kāi)始 HTML\CSS,結果入了后端的坑,瘁…… 但把握正確的方式,在短時(shí)間內做到才能爬取主流網(wǎng)站的數據,其實(shí)十分容易實(shí)現,但建議 你從一開(kāi)始就要有一個(gè)具體的目標。視頻庫網(wǎng)址:資料發(fā)放:3285264708在目標的驅動(dòng)下,你的學(xué)習才能愈發(fā)精準和高效。那些所有你覺(jué)得必須的后置知識,都是可 以在完成目標的過(guò)程小學(xué)到的。這里給你一條平滑的、零基礎快速入門(mén)的學(xué)習路徑。 文章目錄: 1. 學(xué)習 Python 包并實(shí)現基本的爬蟲(chóng)過(guò)程 2. 了解非結構化數據的儲存 3. 學(xué)習 scrapy,搭建工程化爬蟲(chóng) 4. 學(xué)習數據庫知識,應對大規模數據儲存與提取 5. 掌握各類(lèi)方法,應對特殊網(wǎng)站的反爬舉措 6. 分布式爬蟲(chóng),實(shí)現大規模并發(fā)采集,提升效率-? 學(xué)習 Python 包并實(shí)現基本的爬蟲(chóng)過(guò)程大部分爬蟲(chóng)都是按“發(fā)送懇求——獲得頁(yè)面——解析頁(yè)面——抽取并存儲內容”這樣的流 程來(lái)進(jìn)行,這或許也是模擬了我們使用瀏覽器獲取網(wǎng)頁(yè)信息的過(guò)程。
   Python 中爬蟲(chóng)相關(guān)的包好多:urllib、requests、bs4、scrapy、pyspider 等,建議從 requests+Xpath 開(kāi)始,requests 負責聯(lián)接網(wǎng)站,返回網(wǎng)頁(yè),Xpath 用于解析網(wǎng)頁(yè),便于 抽取數據。 如果你用過(guò) BeautifulSoup,會(huì )發(fā)覺(jué) Xpath 要省事不少,一層一層檢測元素代碼的工作, 全都省略了。這樣出來(lái)基本套路都差不多,一般的靜態(tài)網(wǎng)站根本不在話(huà)下,豆瓣、糗事百科、 騰訊新聞等基本上都可以上手了。 當然假如你須要爬取異步加載的網(wǎng)站,可以學(xué)習瀏覽器抓包剖析真實(shí)懇求或則學(xué)習 Selenium 來(lái)實(shí)現自動(dòng)化,這樣,知乎、時(shí)光網(wǎng)、貓途鷹這種動(dòng)態(tài)的網(wǎng)站也可以迎刃而解。視頻庫網(wǎng)址:資料發(fā)放:3285264708-? 了解非結構化數據的儲存爬回去的數據可以直接用文檔方式存在本地,也可以存入數據庫中。 開(kāi)始數據量不大的時(shí)侯,你可以直接通過(guò) Python 的句型或 pandas 的方式將數據存為 csv 這樣的文件。 當然你可能發(fā)覺(jué)爬回去的數據并不是干凈的python爬蟲(chóng)是什么意思,可能會(huì )有缺位、錯誤等等,你還須要對數據進(jìn) 行清洗,可以學(xué)習 pandas 包的基本用法來(lái)做數據的預處理,得到更干凈的數據。
  -? 學(xué)習 scrapy,搭建工程化的爬蟲(chóng)把握后面的技術(shù)通常量級的數據和代碼基本沒(méi)有問(wèn)題了,但是在碰到十分復雜的情況,可能 仍然會(huì )力不從心,這個(gè)時(shí)侯,強大的 scrapy 框架就十分有用了。 scrapy 是一個(gè)功能十分強悍的爬蟲(chóng)框架,它除了能方便地建立 request,還有強悍的 selector 能夠便捷地解析 response,然而它最使人驚喜的還是它超高的性能,讓你可以 將爬蟲(chóng)工程化、模塊化。 學(xué)會(huì ) scrapy,你可以自己去搭建一些爬蟲(chóng)框架,你就基本具備爬蟲(chóng)工程師的思維了。-? 學(xué)習數據庫基礎,應對大規模數據儲存爬回去的數據量小的時(shí)侯,你可以用文檔的方式來(lái)儲存,一旦數據量大了,這就有點(diǎn)行不通 了。所以把握一種數據庫是必須的,學(xué)習目前比較主流的 MongoDB 就 OK。視頻庫網(wǎng)址:資料發(fā)放:3285264708MongoDB 可以便捷你去儲存一些非結構化的數據,比如各類(lèi)評論的文本,圖片的鏈接等 等。你也可以借助 PyMongo,更方便地在 Python 中操作 MongoDB。 因為這兒要用到的數據庫知識似乎十分簡(jiǎn)單,主要是數據怎么入庫、如何進(jìn)行提取,在須要 的時(shí)侯再學(xué)習就行。
  -? 掌握各類(lèi)方法,應對特殊網(wǎng)站的反爬舉措其實(shí),爬蟲(chóng)過(guò)程中也會(huì )經(jīng)歷一些絕望啊,比如被網(wǎng)站封 IP、比如各類(lèi)奇怪的驗證碼、 userAgent 訪(fǎng)問(wèn)限制、各種動(dòng)態(tài)加載等等。 遇到這種反爬蟲(chóng)的手段,當然還須要一些中級的方法來(lái)應對,常規的例如訪(fǎng)問(wèn)頻度控制、使 用代理 IP 池、抓包、驗證碼的 OCR 處理等等。 往往網(wǎng)站在高效開(kāi)發(fā)和反爬蟲(chóng)之間會(huì )偏向后者,這也為爬蟲(chóng)提供了空間,掌握這種應對反爬 蟲(chóng)的方法,絕大部分的網(wǎng)站已經(jīng)難不到你了。-? 分布式爬蟲(chóng),實(shí)現大規模并發(fā)采集爬取基本數據早已不是問(wèn)題了,你的困局會(huì )集中到爬取海量數據的效率。這個(gè)時(shí)侯,相信你 會(huì )很自然地接觸到一個(gè)很厲害的名子:分布式爬蟲(chóng)。 分布式這個(gè)東西,聽(tīng)上去太驚悚,但畢竟就是借助多線(xiàn)程的原理使多個(gè)爬蟲(chóng)同時(shí)工作,需要 你把握 Scrapy + MongoDB + Redis 這三種工具。 Scrapy 前面我們說(shuō)過(guò)了,用于做基本的頁(yè)面爬取,MongoDB 用于儲存爬取的數據,Redis 則拿來(lái)儲存要爬取的網(wǎng)頁(yè)隊列,也就是任務(wù)隊列。視頻庫網(wǎng)址:資料發(fā)放:3285264708所以有些東西看起來(lái)太嚇人,但畢竟分解開(kāi)來(lái),也不過(guò)如此。當你才能寫(xiě)分布式的爬蟲(chóng)的時(shí) 候,那么你可以去嘗試構建一些基本的爬蟲(chóng)構架了python爬蟲(chóng)是什么意思,實(shí)現一些愈發(fā)自動(dòng)化的數據獲取。
   你看,這一條學(xué)習路徑出來(lái),你已經(jīng)可以成為老司機了,非常的順暢。所以在一開(kāi)始的時(shí)侯, 盡量不要系統地去啃一些東西,找一個(gè)實(shí)際的項目(開(kāi)始可以從豆瓣、小豬這些簡(jiǎn)單的入手), 直接開(kāi)始就好。 因為爬蟲(chóng)這些技術(shù),既不需要你系統地精通一門(mén)語(yǔ)言,也不需要多么深奧的數據庫技術(shù),高 效的坐姿就是從實(shí)際的項目中去學(xué)習這種零散的知識點(diǎn),你能保證每次學(xué)到的都是最須要的 那部份。 當然惟一麻煩的是,在具體的問(wèn)題中,如何找到具體須要的那部份學(xué)習資源、如何篩選和甄 別,是好多初學(xué)者面臨的一個(gè)大問(wèn)題。黑馬程序員視頻庫網(wǎng)址:(海量熱門(mén)編程視頻、資料免費學(xué)習) 學(xué)習路線(xiàn)圖、學(xué)習大綱、各階段知識點(diǎn)、資料云盤(pán)免費發(fā)放+QQ 3285264708 / 3549664195視頻庫網(wǎng)址:資料發(fā)放:3285264708 查看全部

  
  【黑馬程序員】Python 爬蟲(chóng)是哪些?爬蟲(chóng)教程假如你仔細觀(guān)察,就不難發(fā)覺(jué),懂爬蟲(chóng)、學(xué)習爬蟲(chóng)的人越來(lái)越多,一方面,互聯(lián)網(wǎng)可以獲取 的數據越來(lái)越多,另一方面,像 Python 這樣的編程語(yǔ)言提供越來(lái)越多的優(yōu)秀工具,讓爬蟲(chóng) 變得簡(jiǎn)單、容易上手。 利用爬蟲(chóng)我們可以獲取大量的價(jià)值數據,從而獲得感性認識中不能得到的信息,比如: 知乎:爬取優(yōu)質(zhì)答案,為你篩選出各話(huà)題下最優(yōu)質(zhì)的內容。淘寶、京東:抓取商品、評論及 銷(xiāo)量數據,對各類(lèi)商品及用戶(hù)的消費場(chǎng)景進(jìn)行剖析。安居客、鏈家:抓取房產(chǎn)買(mǎi)賣(mài)及租售信 息,分析樓市變化趨勢、做不同區域的樓價(jià)剖析。拉勾網(wǎng)、智聯(lián):爬取各種職位信息,分析 各行業(yè)人才需求情況及薪酬水平。雪球網(wǎng):抓取雪球高回報用戶(hù)的行為,對股票市場(chǎng)進(jìn)行分 析和預測。 爬蟲(chóng)是入門(mén) Python 最好的形式,沒(méi)有之一。Python 有很多應用的方向,比如后臺開(kāi)發(fā)、 web 開(kāi)發(fā)、科學(xué)估算等等,但爬蟲(chóng)對于初學(xué)者而言更友好,原理簡(jiǎn)單,幾行代碼能夠實(shí)現 基本的爬蟲(chóng),學(xué)習的過(guò)程愈發(fā)平滑,你能感受更大的成就感。 掌握基本的爬蟲(chóng)后,你再去學(xué)習 Python 數據剖析、web 開(kāi)發(fā)甚至機器學(xué)習,都會(huì )更得心 應手。因為這個(gè)過(guò)程中,Python 基本句型、庫的使用,以及怎樣查找文檔你都十分熟悉了。
   對于小白來(lái)說(shuō),爬蟲(chóng)可能是一件十分復雜、技術(shù)門(mén)檻很高的事情。比如有人覺(jué)得學(xué)爬蟲(chóng)必須 精通 Python,然后哼哧哼哧系統學(xué)習 Python 的每位知識點(diǎn),很久以后發(fā)覺(jué)一直爬不了數 據;有的人則覺(jué)得先要把握網(wǎng)頁(yè)的知識,遂開(kāi)始 HTML\CSS,結果入了后端的坑,瘁…… 但把握正確的方式,在短時(shí)間內做到才能爬取主流網(wǎng)站的數據,其實(shí)十分容易實(shí)現,但建議 你從一開(kāi)始就要有一個(gè)具體的目標。視頻庫網(wǎng)址:資料發(fā)放:3285264708在目標的驅動(dòng)下,你的學(xué)習才能愈發(fā)精準和高效。那些所有你覺(jué)得必須的后置知識,都是可 以在完成目標的過(guò)程小學(xué)到的。這里給你一條平滑的、零基礎快速入門(mén)的學(xué)習路徑。 文章目錄: 1. 學(xué)習 Python 包并實(shí)現基本的爬蟲(chóng)過(guò)程 2. 了解非結構化數據的儲存 3. 學(xué)習 scrapy,搭建工程化爬蟲(chóng) 4. 學(xué)習數據庫知識,應對大規模數據儲存與提取 5. 掌握各類(lèi)方法,應對特殊網(wǎng)站的反爬舉措 6. 分布式爬蟲(chóng),實(shí)現大規模并發(fā)采集,提升效率-? 學(xué)習 Python 包并實(shí)現基本的爬蟲(chóng)過(guò)程大部分爬蟲(chóng)都是按“發(fā)送懇求——獲得頁(yè)面——解析頁(yè)面——抽取并存儲內容”這樣的流 程來(lái)進(jìn)行,這或許也是模擬了我們使用瀏覽器獲取網(wǎng)頁(yè)信息的過(guò)程。
   Python 中爬蟲(chóng)相關(guān)的包好多:urllib、requests、bs4、scrapy、pyspider 等,建議從 requests+Xpath 開(kāi)始,requests 負責聯(lián)接網(wǎng)站,返回網(wǎng)頁(yè),Xpath 用于解析網(wǎng)頁(yè),便于 抽取數據。 如果你用過(guò) BeautifulSoup,會(huì )發(fā)覺(jué) Xpath 要省事不少,一層一層檢測元素代碼的工作, 全都省略了。這樣出來(lái)基本套路都差不多,一般的靜態(tài)網(wǎng)站根本不在話(huà)下,豆瓣、糗事百科、 騰訊新聞等基本上都可以上手了。 當然假如你須要爬取異步加載的網(wǎng)站,可以學(xué)習瀏覽器抓包剖析真實(shí)懇求或則學(xué)習 Selenium 來(lái)實(shí)現自動(dòng)化,這樣,知乎、時(shí)光網(wǎng)、貓途鷹這種動(dòng)態(tài)的網(wǎng)站也可以迎刃而解。視頻庫網(wǎng)址:資料發(fā)放:3285264708-? 了解非結構化數據的儲存爬回去的數據可以直接用文檔方式存在本地,也可以存入數據庫中。 開(kāi)始數據量不大的時(shí)侯,你可以直接通過(guò) Python 的句型或 pandas 的方式將數據存為 csv 這樣的文件。 當然你可能發(fā)覺(jué)爬回去的數據并不是干凈的python爬蟲(chóng)是什么意思,可能會(huì )有缺位、錯誤等等,你還須要對數據進(jìn) 行清洗,可以學(xué)習 pandas 包的基本用法來(lái)做數據的預處理,得到更干凈的數據。
  -? 學(xué)習 scrapy,搭建工程化的爬蟲(chóng)把握后面的技術(shù)通常量級的數據和代碼基本沒(méi)有問(wèn)題了,但是在碰到十分復雜的情況,可能 仍然會(huì )力不從心,這個(gè)時(shí)侯,強大的 scrapy 框架就十分有用了。 scrapy 是一個(gè)功能十分強悍的爬蟲(chóng)框架,它除了能方便地建立 request,還有強悍的 selector 能夠便捷地解析 response,然而它最使人驚喜的還是它超高的性能,讓你可以 將爬蟲(chóng)工程化、模塊化。 學(xué)會(huì ) scrapy,你可以自己去搭建一些爬蟲(chóng)框架,你就基本具備爬蟲(chóng)工程師的思維了。-? 學(xué)習數據庫基礎,應對大規模數據儲存爬回去的數據量小的時(shí)侯,你可以用文檔的方式來(lái)儲存,一旦數據量大了,這就有點(diǎn)行不通 了。所以把握一種數據庫是必須的,學(xué)習目前比較主流的 MongoDB 就 OK。視頻庫網(wǎng)址:資料發(fā)放:3285264708MongoDB 可以便捷你去儲存一些非結構化的數據,比如各類(lèi)評論的文本,圖片的鏈接等 等。你也可以借助 PyMongo,更方便地在 Python 中操作 MongoDB。 因為這兒要用到的數據庫知識似乎十分簡(jiǎn)單,主要是數據怎么入庫、如何進(jìn)行提取,在須要 的時(shí)侯再學(xué)習就行。
  -? 掌握各類(lèi)方法,應對特殊網(wǎng)站的反爬舉措其實(shí),爬蟲(chóng)過(guò)程中也會(huì )經(jīng)歷一些絕望啊,比如被網(wǎng)站封 IP、比如各類(lèi)奇怪的驗證碼、 userAgent 訪(fǎng)問(wèn)限制、各種動(dòng)態(tài)加載等等。 遇到這種反爬蟲(chóng)的手段,當然還須要一些中級的方法來(lái)應對,常規的例如訪(fǎng)問(wèn)頻度控制、使 用代理 IP 池、抓包、驗證碼的 OCR 處理等等。 往往網(wǎng)站在高效開(kāi)發(fā)和反爬蟲(chóng)之間會(huì )偏向后者,這也為爬蟲(chóng)提供了空間,掌握這種應對反爬 蟲(chóng)的方法,絕大部分的網(wǎng)站已經(jīng)難不到你了。-? 分布式爬蟲(chóng),實(shí)現大規模并發(fā)采集爬取基本數據早已不是問(wèn)題了,你的困局會(huì )集中到爬取海量數據的效率。這個(gè)時(shí)侯,相信你 會(huì )很自然地接觸到一個(gè)很厲害的名子:分布式爬蟲(chóng)。 分布式這個(gè)東西,聽(tīng)上去太驚悚,但畢竟就是借助多線(xiàn)程的原理使多個(gè)爬蟲(chóng)同時(shí)工作,需要 你把握 Scrapy + MongoDB + Redis 這三種工具。 Scrapy 前面我們說(shuō)過(guò)了,用于做基本的頁(yè)面爬取,MongoDB 用于儲存爬取的數據,Redis 則拿來(lái)儲存要爬取的網(wǎng)頁(yè)隊列,也就是任務(wù)隊列。視頻庫網(wǎng)址:資料發(fā)放:3285264708所以有些東西看起來(lái)太嚇人,但畢竟分解開(kāi)來(lái),也不過(guò)如此。當你才能寫(xiě)分布式的爬蟲(chóng)的時(shí) 候,那么你可以去嘗試構建一些基本的爬蟲(chóng)構架了python爬蟲(chóng)是什么意思,實(shí)現一些愈發(fā)自動(dòng)化的數據獲取。
   你看,這一條學(xué)習路徑出來(lái),你已經(jīng)可以成為老司機了,非常的順暢。所以在一開(kāi)始的時(shí)侯, 盡量不要系統地去啃一些東西,找一個(gè)實(shí)際的項目(開(kāi)始可以從豆瓣、小豬這些簡(jiǎn)單的入手), 直接開(kāi)始就好。 因為爬蟲(chóng)這些技術(shù),既不需要你系統地精通一門(mén)語(yǔ)言,也不需要多么深奧的數據庫技術(shù),高 效的坐姿就是從實(shí)際的項目中去學(xué)習這種零散的知識點(diǎn),你能保證每次學(xué)到的都是最須要的 那部份。 當然惟一麻煩的是,在具體的問(wèn)題中,如何找到具體須要的那部份學(xué)習資源、如何篩選和甄 別,是好多初學(xué)者面臨的一個(gè)大問(wèn)題。黑馬程序員視頻庫網(wǎng)址:(海量熱門(mén)編程視頻、資料免費學(xué)習) 學(xué)習路線(xiàn)圖、學(xué)習大綱、各階段知識點(diǎn)、資料云盤(pán)免費發(fā)放+QQ 3285264708 / 3549664195視頻庫網(wǎng)址:資料發(fā)放:3285264708

爬蟲(chóng)技術(shù)淺析

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 379 次瀏覽 ? 2020-05-02 08:09 ? 來(lái)自相關(guān)話(huà)題

    談到爬蟲(chóng)構架,不得不提的是Scrapy的爬蟲(chóng)構架。Scrapy,是Python開(kāi)發(fā)的一個(gè)快速,高層次的爬蟲(chóng)框架,用于抓取web站點(diǎn)并從頁(yè)面中提取結構化的數據。Scrapy用途廣泛,可以用于數據挖掘、監測和自動(dòng)化測試。Scrapy吸引人的地方在于它是一個(gè)框架,任何人都可以依照需求便捷的更改。它也提供了多種類(lèi)型爬蟲(chóng)的子類(lèi),如BaseSpider、sitemap爬蟲(chóng)等。
  上圖是Scrapy的構架圖,綠線(xiàn)是數據流向,首先從初始URL 開(kāi)始,Scheduler 會(huì )將其交給 Downloader 進(jìn)行下載,下載以后會(huì )交給 Spider 進(jìn)行剖析,需要保存的數據則會(huì )被送到Item Pipeline,那是對數據進(jìn)行后期處理。另外,在數據流動(dòng)的通道里還可以安裝各類(lèi)中間件,進(jìn)行必要的處理。 因此在開(kāi)發(fā)爬蟲(chóng)的時(shí)侯,最好也先規劃好各類(lèi)模塊。我的做法是單獨規劃下載模塊,爬行模塊,調度模塊,數據儲存模塊。
  頁(yè)面下載分為靜態(tài)和動(dòng)態(tài)兩種下載形式。
  傳統爬蟲(chóng)借助的是靜態(tài)下載形式,靜態(tài)下載的優(yōu)勢是下載過(guò)程快,但是頁(yè)面只是一個(gè)無(wú)趣的html,因此頁(yè)面鏈接剖析中獲取的只是< a >標簽的href屬性或則大神可以自己剖析js,form之類(lèi)的標簽捕獲一些鏈接。在python中可以借助urllib2模塊或requests模塊實(shí)現功能。 動(dòng)態(tài)爬蟲(chóng)在web2.0時(shí)代則有特殊的優(yōu)勢,由于網(wǎng)頁(yè)會(huì )使用javascript處理,網(wǎng)頁(yè)內容通過(guò)Ajax異步獲取。所以,動(dòng)態(tài)爬蟲(chóng)須要剖析經(jīng)過(guò)javascript處理和ajax獲取內容后的頁(yè)面。目前簡(jiǎn)單的解決方式是通過(guò)基于webkit的模塊直接處理。PYQT4、Splinter和Selenium這三個(gè)模塊都可以達到目的。對于爬蟲(chóng)而言,瀏覽器界面是不需要的,因此使用一個(gè)headless browser是十分實(shí)惠的,HtmlUnit和phantomjs都是可以使用的headless browser。
  
  以上這段代碼是訪(fǎng)問(wèn)新浪網(wǎng)主站。通過(guò)對比靜態(tài)抓取頁(yè)面和動(dòng)態(tài)抓取頁(yè)面的厚度和對比靜態(tài)抓取頁(yè)面和動(dòng)態(tài)抓取頁(yè)面內抓取的鏈接個(gè)數。
  
  在靜態(tài)抓取中,頁(yè)面的寬度是563838,頁(yè)面內抓取的鏈接數目只有166個(gè)。而在動(dòng)態(tài)抓取中,頁(yè)面的寬度下降到了695991,而鏈接數達到了1422,有了逾10倍的提高。
  抓鏈接表達式
  正則:re.compile("href=\"([^\"]*)\"")
  Xpath:xpath('//*[@href]')
  頁(yè)面解析是實(shí)現抓取頁(yè)面內鏈接和抓取特定數據的模塊,頁(yè)面解析主要是對字符串的處理,而html是一種特殊的字符串,在Python中re、beautifulsoup、HTMLParser、lxml等模塊都可以解決問(wèn)題。對于鏈接,主要抓取a標簽下的href屬性,還有其他一些標簽的src屬性。
  URL去重是爬蟲(chóng)運行中一項關(guān)鍵的步驟,由于運行中的爬蟲(chóng)主要阻塞在網(wǎng)路交互中,因此防止重復的網(wǎng)路交互至關(guān)重要。爬蟲(chóng)通常會(huì )將待抓取的URL置于一個(gè)隊列中,從抓取后的網(wǎng)頁(yè)中提取到新的URL,在她們被裝入隊列之前,首先要確定這種新的URL沒(méi)有被抓取過(guò),如果之前早已抓取過(guò)了,就不再裝入隊列了。
  Hash表
  利用hash表做去重操作通常是最容易想到的方式,因為hash表查詢(xún)的時(shí)間復雜度是O(1),而且在hash表足夠大的情況下,hash沖突的機率就顯得太小,因此URL是否重復的判定準確性就十分高。利用hash表去重的這個(gè)做法是一個(gè)比較簡(jiǎn)單的解決方式。但是普通hash表也有顯著(zhù)的缺陷爬蟲(chóng)技術(shù),在考慮顯存的情況下,使用一張大的hash表是不妥的。Python中可以使用字典這一數據結構。
  URL壓縮
  如果hash表中,當每位節點(diǎn)存儲的是一個(gè)str方式的具體URL,是十分占用顯存的,如果把這個(gè)URL進(jìn)行壓縮成一個(gè)int型變量,內存占用程度上便有了3倍以上的縮小。因此可以借助Python的hashlib模塊來(lái)進(jìn)行URL壓縮。 思路:把hash表的節點(diǎn)的數據結構設置為集合,集合內貯存壓縮后的URL。
  Bloom Filter
  Bloom Filter是通過(guò)很少的錯誤換取了儲存空間的極大節約。Bloom Filter 是通過(guò)一組k 個(gè)定義在n 個(gè)輸入key 上的Hash Function,將上述n 個(gè)key 映射到m 位上的數據容器。
  
  上圖太清楚的說(shuō)明了Bloom Filter的優(yōu)勢,在可控的容器寬度內,所有hash函數對同一個(gè)元素估算的hash值都為1時(shí),就判定這個(gè)元素存在。 Python中hashlib,自帶多種hash函數,有MD5,sha1,sha224,sha256,sha384,sha512。代碼中還可以進(jìn)行加水處理,還是很方便的。 Bloom Filter也會(huì )形成沖突的情況,具體內容查看文章結尾的參考文章。
  在Python編程過(guò)程中,可以使用jaybaird提供的BloomFilter插口,或者自己造輪子。
  小細節
  有個(gè)小細節,在構建hash表的時(shí)侯選擇容器很重要。hash表占用空間很大是個(gè)太不爽的問(wèn)題,因此針對爬蟲(chóng)去重,下列方式可以解決一些問(wèn)題。
  
  上面這段代碼簡(jiǎn)單驗證了生成容器的運行時(shí)間。
  
  由上圖可以看出,建立一個(gè)寬度為1億的容器時(shí),選擇list容器程序的運行時(shí)間耗費了7.2s,而選擇字符串作為容器時(shí),才耗費了0.2s的運行時(shí)間。
  接下來(lái)瞧瞧顯存的占用情況。
  
  如果構建1億的列表占用了794660k顯存。
  
  而構建1億寬度的字符串卻占用了109720k顯存,空間占用大概降低了700000k。
  初級算法
  對于URL相似性,我只是實(shí)踐一個(gè)十分簡(jiǎn)單的技巧。
  在保證不進(jìn)行重復爬去的情況下,還須要對類(lèi)似的URL進(jìn)行判定。我采用的是sponge和ly5066113提供的思路。具體資料在參考文章里。
  下列是一組可以判定為相像的URL組
  按照預期,以上URL歸并后應當為
  思路如下,需要提取如下特點(diǎn)
  1,host字符串
  2,目錄深度(以’/’分割)
  3,尾頁(yè)特點(diǎn)
  具體算法
  
  算法本身太菜,各位一看才能懂。
  實(shí)際療效:
  
  上圖顯示了把8個(gè)不一樣的url,算出了2個(gè)值。通過(guò)實(shí)踐,在一張千萬(wàn)級的hash表中,沖突的情況是可以接受的。
  Python中的并發(fā)操作主要涉及的模型有:多線(xiàn)程模型、多進(jìn)程模型、協(xié)程模型。Elias專(zhuān)門(mén)寫(xiě)了一篇文章爬蟲(chóng)技術(shù),來(lái)比較常用的幾種模型并發(fā)方案的性能。對于爬蟲(chóng)本身來(lái)說(shuō),限制爬蟲(chóng)速率主要來(lái)自目標服務(wù)器的響應速率,因此選擇一個(gè)控制上去順手的模塊才是對的。
  多線(xiàn)程模型,是最容易上手的,Python中自帶的threading模塊能挺好的實(shí)現并發(fā)需求,配合Queue模塊來(lái)實(shí)現共享數據。
  多進(jìn)程模型和多線(xiàn)程模型類(lèi)似,multiprocessing模塊中也有類(lèi)似的Queue模塊來(lái)實(shí)現數據共享。在linux中,用戶(hù)態(tài)的進(jìn)程可以借助多核心的優(yōu)勢,因此在多核背景下,能解決爬蟲(chóng)的并發(fā)問(wèn)題。
  協(xié)程模型,在Elias的文章中,基于greenlet實(shí)現的解釋器程序的性能僅次于Stackless Python,大致比Stackless Python慢一倍,比其他方案快接近一個(gè)數量級。因此基于gevent(封裝了greenlet)的并發(fā)程序會(huì )有挺好的性能優(yōu)勢。
  具體說(shuō)明下gevent(非阻塞異步IO)。,“Gevent是一種基于解釋器的Python網(wǎng)絡(luò )庫,它用到Greenlet提供的,封裝了libevent風(fēng)波循環(huán)的高層同步API?!?br />   從實(shí)際的編程療效來(lái)看,協(xié)程模型確實(shí)表現非常好,運行結果的可控性顯著(zhù)強了不少, gevent庫的封裝易用性極強。
  數據儲存本身設計的技術(shù)就十分多,作為小菜不敢亂說(shuō),但是工作還是有一些小經(jīng)驗是可以分享的。
  前提:使用關(guān)系數據庫,測試中選擇的是mysql,其他類(lèi)似sqlite,SqlServer思路上沒(méi)有區別。
  當我們進(jìn)行數據儲存時(shí),目的就是降低與數據庫的交互操作,這樣可以增強性能。通常情況下,每當一個(gè)URL節點(diǎn)被讀取,就進(jìn)行一次數據儲存,對于這樣的邏輯進(jìn)行無(wú)限循環(huán)。其實(shí)這樣的性能體驗是十分差的,存儲速率特別慢。
  進(jìn)階做法,為了減輕與數據庫的交互次數,每次與數據庫交互從之前傳送1個(gè)節點(diǎn)弄成傳送10個(gè)節點(diǎn),到傳送100個(gè)節點(diǎn)內容,這樣效率變有了10倍至100倍的提高,在實(shí)際應用中,效果是非常好的。:D
  爬蟲(chóng)模型
  
  目前這個(gè)爬蟲(chóng)模型如上圖,調度模塊是核心模塊。調度模塊分別與下載模塊,析取模塊,存儲模塊共享三個(gè)隊列,下載模塊與析取模塊共享一個(gè)隊列。數據傳遞方向如圖示。 查看全部
    談到爬蟲(chóng)構架,不得不提的是Scrapy的爬蟲(chóng)構架。Scrapy,是Python開(kāi)發(fā)的一個(gè)快速,高層次的爬蟲(chóng)框架,用于抓取web站點(diǎn)并從頁(yè)面中提取結構化的數據。Scrapy用途廣泛,可以用于數據挖掘、監測和自動(dòng)化測試。Scrapy吸引人的地方在于它是一個(gè)框架,任何人都可以依照需求便捷的更改。它也提供了多種類(lèi)型爬蟲(chóng)的子類(lèi),如BaseSpider、sitemap爬蟲(chóng)等。
  上圖是Scrapy的構架圖,綠線(xiàn)是數據流向,首先從初始URL 開(kāi)始,Scheduler 會(huì )將其交給 Downloader 進(jìn)行下載,下載以后會(huì )交給 Spider 進(jìn)行剖析,需要保存的數據則會(huì )被送到Item Pipeline,那是對數據進(jìn)行后期處理。另外,在數據流動(dòng)的通道里還可以安裝各類(lèi)中間件,進(jìn)行必要的處理。 因此在開(kāi)發(fā)爬蟲(chóng)的時(shí)侯,最好也先規劃好各類(lèi)模塊。我的做法是單獨規劃下載模塊,爬行模塊,調度模塊,數據儲存模塊。
  頁(yè)面下載分為靜態(tài)和動(dòng)態(tài)兩種下載形式。
  傳統爬蟲(chóng)借助的是靜態(tài)下載形式,靜態(tài)下載的優(yōu)勢是下載過(guò)程快,但是頁(yè)面只是一個(gè)無(wú)趣的html,因此頁(yè)面鏈接剖析中獲取的只是< a >標簽的href屬性或則大神可以自己剖析js,form之類(lèi)的標簽捕獲一些鏈接。在python中可以借助urllib2模塊或requests模塊實(shí)現功能。 動(dòng)態(tài)爬蟲(chóng)在web2.0時(shí)代則有特殊的優(yōu)勢,由于網(wǎng)頁(yè)會(huì )使用javascript處理,網(wǎng)頁(yè)內容通過(guò)Ajax異步獲取。所以,動(dòng)態(tài)爬蟲(chóng)須要剖析經(jīng)過(guò)javascript處理和ajax獲取內容后的頁(yè)面。目前簡(jiǎn)單的解決方式是通過(guò)基于webkit的模塊直接處理。PYQT4、Splinter和Selenium這三個(gè)模塊都可以達到目的。對于爬蟲(chóng)而言,瀏覽器界面是不需要的,因此使用一個(gè)headless browser是十分實(shí)惠的,HtmlUnit和phantomjs都是可以使用的headless browser。
  
  以上這段代碼是訪(fǎng)問(wèn)新浪網(wǎng)主站。通過(guò)對比靜態(tài)抓取頁(yè)面和動(dòng)態(tài)抓取頁(yè)面的厚度和對比靜態(tài)抓取頁(yè)面和動(dòng)態(tài)抓取頁(yè)面內抓取的鏈接個(gè)數。
  
  在靜態(tài)抓取中,頁(yè)面的寬度是563838,頁(yè)面內抓取的鏈接數目只有166個(gè)。而在動(dòng)態(tài)抓取中,頁(yè)面的寬度下降到了695991,而鏈接數達到了1422,有了逾10倍的提高。
  抓鏈接表達式
  正則:re.compile("href=\"([^\"]*)\"")
  Xpath:xpath('//*[@href]')
  頁(yè)面解析是實(shí)現抓取頁(yè)面內鏈接和抓取特定數據的模塊,頁(yè)面解析主要是對字符串的處理,而html是一種特殊的字符串,在Python中re、beautifulsoup、HTMLParser、lxml等模塊都可以解決問(wèn)題。對于鏈接,主要抓取a標簽下的href屬性,還有其他一些標簽的src屬性。
  URL去重是爬蟲(chóng)運行中一項關(guān)鍵的步驟,由于運行中的爬蟲(chóng)主要阻塞在網(wǎng)路交互中,因此防止重復的網(wǎng)路交互至關(guān)重要。爬蟲(chóng)通常會(huì )將待抓取的URL置于一個(gè)隊列中,從抓取后的網(wǎng)頁(yè)中提取到新的URL,在她們被裝入隊列之前,首先要確定這種新的URL沒(méi)有被抓取過(guò),如果之前早已抓取過(guò)了,就不再裝入隊列了。
  Hash表
  利用hash表做去重操作通常是最容易想到的方式,因為hash表查詢(xún)的時(shí)間復雜度是O(1),而且在hash表足夠大的情況下,hash沖突的機率就顯得太小,因此URL是否重復的判定準確性就十分高。利用hash表去重的這個(gè)做法是一個(gè)比較簡(jiǎn)單的解決方式。但是普通hash表也有顯著(zhù)的缺陷爬蟲(chóng)技術(shù),在考慮顯存的情況下,使用一張大的hash表是不妥的。Python中可以使用字典這一數據結構。
  URL壓縮
  如果hash表中,當每位節點(diǎn)存儲的是一個(gè)str方式的具體URL,是十分占用顯存的,如果把這個(gè)URL進(jìn)行壓縮成一個(gè)int型變量,內存占用程度上便有了3倍以上的縮小。因此可以借助Python的hashlib模塊來(lái)進(jìn)行URL壓縮。 思路:把hash表的節點(diǎn)的數據結構設置為集合,集合內貯存壓縮后的URL。
  Bloom Filter
  Bloom Filter是通過(guò)很少的錯誤換取了儲存空間的極大節約。Bloom Filter 是通過(guò)一組k 個(gè)定義在n 個(gè)輸入key 上的Hash Function,將上述n 個(gè)key 映射到m 位上的數據容器。
  
  上圖太清楚的說(shuō)明了Bloom Filter的優(yōu)勢,在可控的容器寬度內,所有hash函數對同一個(gè)元素估算的hash值都為1時(shí),就判定這個(gè)元素存在。 Python中hashlib,自帶多種hash函數,有MD5,sha1,sha224,sha256,sha384,sha512。代碼中還可以進(jìn)行加水處理,還是很方便的。 Bloom Filter也會(huì )形成沖突的情況,具體內容查看文章結尾的參考文章。
  在Python編程過(guò)程中,可以使用jaybaird提供的BloomFilter插口,或者自己造輪子。
  小細節
  有個(gè)小細節,在構建hash表的時(shí)侯選擇容器很重要。hash表占用空間很大是個(gè)太不爽的問(wèn)題,因此針對爬蟲(chóng)去重,下列方式可以解決一些問(wèn)題。
  
  上面這段代碼簡(jiǎn)單驗證了生成容器的運行時(shí)間。
  
  由上圖可以看出,建立一個(gè)寬度為1億的容器時(shí),選擇list容器程序的運行時(shí)間耗費了7.2s,而選擇字符串作為容器時(shí),才耗費了0.2s的運行時(shí)間。
  接下來(lái)瞧瞧顯存的占用情況。
  
  如果構建1億的列表占用了794660k顯存。
  
  而構建1億寬度的字符串卻占用了109720k顯存,空間占用大概降低了700000k。
  初級算法
  對于URL相似性,我只是實(shí)踐一個(gè)十分簡(jiǎn)單的技巧。
  在保證不進(jìn)行重復爬去的情況下,還須要對類(lèi)似的URL進(jìn)行判定。我采用的是sponge和ly5066113提供的思路。具體資料在參考文章里。
  下列是一組可以判定為相像的URL組
  按照預期,以上URL歸并后應當為
  思路如下,需要提取如下特點(diǎn)
  1,host字符串
  2,目錄深度(以’/’分割)
  3,尾頁(yè)特點(diǎn)
  具體算法
  
  算法本身太菜,各位一看才能懂。
  實(shí)際療效:
  
  上圖顯示了把8個(gè)不一樣的url,算出了2個(gè)值。通過(guò)實(shí)踐,在一張千萬(wàn)級的hash表中,沖突的情況是可以接受的。
  Python中的并發(fā)操作主要涉及的模型有:多線(xiàn)程模型、多進(jìn)程模型、協(xié)程模型。Elias專(zhuān)門(mén)寫(xiě)了一篇文章爬蟲(chóng)技術(shù),來(lái)比較常用的幾種模型并發(fā)方案的性能。對于爬蟲(chóng)本身來(lái)說(shuō),限制爬蟲(chóng)速率主要來(lái)自目標服務(wù)器的響應速率,因此選擇一個(gè)控制上去順手的模塊才是對的。
  多線(xiàn)程模型,是最容易上手的,Python中自帶的threading模塊能挺好的實(shí)現并發(fā)需求,配合Queue模塊來(lái)實(shí)現共享數據。
  多進(jìn)程模型和多線(xiàn)程模型類(lèi)似,multiprocessing模塊中也有類(lèi)似的Queue模塊來(lái)實(shí)現數據共享。在linux中,用戶(hù)態(tài)的進(jìn)程可以借助多核心的優(yōu)勢,因此在多核背景下,能解決爬蟲(chóng)的并發(fā)問(wèn)題。
  協(xié)程模型,在Elias的文章中,基于greenlet實(shí)現的解釋器程序的性能僅次于Stackless Python,大致比Stackless Python慢一倍,比其他方案快接近一個(gè)數量級。因此基于gevent(封裝了greenlet)的并發(fā)程序會(huì )有挺好的性能優(yōu)勢。
  具體說(shuō)明下gevent(非阻塞異步IO)。,“Gevent是一種基于解釋器的Python網(wǎng)絡(luò )庫,它用到Greenlet提供的,封裝了libevent風(fēng)波循環(huán)的高層同步API?!?br />   從實(shí)際的編程療效來(lái)看,協(xié)程模型確實(shí)表現非常好,運行結果的可控性顯著(zhù)強了不少, gevent庫的封裝易用性極強。
  數據儲存本身設計的技術(shù)就十分多,作為小菜不敢亂說(shuō),但是工作還是有一些小經(jīng)驗是可以分享的。
  前提:使用關(guān)系數據庫,測試中選擇的是mysql,其他類(lèi)似sqlite,SqlServer思路上沒(méi)有區別。
  當我們進(jìn)行數據儲存時(shí),目的就是降低與數據庫的交互操作,這樣可以增強性能。通常情況下,每當一個(gè)URL節點(diǎn)被讀取,就進(jìn)行一次數據儲存,對于這樣的邏輯進(jìn)行無(wú)限循環(huán)。其實(shí)這樣的性能體驗是十分差的,存儲速率特別慢。
  進(jìn)階做法,為了減輕與數據庫的交互次數,每次與數據庫交互從之前傳送1個(gè)節點(diǎn)弄成傳送10個(gè)節點(diǎn),到傳送100個(gè)節點(diǎn)內容,這樣效率變有了10倍至100倍的提高,在實(shí)際應用中,效果是非常好的。:D
  爬蟲(chóng)模型
  
  目前這個(gè)爬蟲(chóng)模型如上圖,調度模塊是核心模塊。調度模塊分別與下載模塊,析取模塊,存儲模塊共享三個(gè)隊列,下載模塊與析取模塊共享一個(gè)隊列。數據傳遞方向如圖示。

Python庫大全

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 347 次瀏覽 ? 2020-04-05 11:09 ? 來(lái)自相關(guān)話(huà)題

  
  urlib -網(wǎng)絡(luò )庫(stdlib)。requests -網(wǎng)絡(luò )庫。
  grab -網(wǎng)絡(luò )庫(基于pycurl)。pycurl -網(wǎng)絡(luò )庫(綁定libcurl)
  ullib3 - Python HTTP庫,安全連接池、支持文件post、可用性高。httplib2一網(wǎng)絡(luò )庫。
  RoboBrowser -一個(gè)簡(jiǎn)單的、極具Python風(fēng)格的Python庫,無(wú)需獨立的瀏覽器即可瀏覽網(wǎng)頁(yè)。
  MechanicalSoup一個(gè)與網(wǎng)站自動(dòng)交互Python庫。
  mechanize -有狀態(tài)、可編程的Web瀏覽庫。socket -底層網(wǎng)路插口(stdlib)。
  Unirest for Python - Unirest是一套可用于 多種語(yǔ)言的輕量級的HTTP庫。
  hyper - Python的HTTP/2客戶(hù)端。
  PySocks - SocksiPy更新并積極維護的版本,包括錯誤修補和一些其他的特點(diǎn)。作為socket模塊的直接替換。
  網(wǎng)絡(luò )爬蟲(chóng)框架
  grab -網(wǎng)絡(luò )爬蟲(chóng)框架(基 于pycur/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)微框架。HTML/XML解析器
  lxml - C語(yǔ)言編撰高效HTML/ XML處理庫。支持XPath。
  cssselect -解析DOM樹(shù)和CSS選擇器。pyquery -解析DOM樹(shù)和jQuery選擇器。
  BeautIFulSoup -低效HTML/ XML處理庫,純Python實(shí)現。
  html5lib -根據WHATWG規范生成HTML/ XML文檔的DOM。該規范被用在現今所有的瀏覽器上。
  feedparser一解析RSS/ATOM feeds。
  MarkupSafe -為XML/HTML/XHTML提供了安全通配符的字符串。
  xmltodict-一個(gè)可以使你在處理XML時(shí)覺(jué)得象在處理JSON一樣的Python模塊。
  xhtml2pdf -將HTML/CSS轉換為PDF。
  untangle -輕松實(shí)現將XML文件轉換為Python對象。清理
  Bleach -清理HTML (需要html5lib)。sanitize -為混亂的數據世界帶來(lái)端午。文本處理
  用于解析和操作簡(jiǎn)單文本的庫。
  difflib - (Python標準庫) 幫助進(jìn)行差異化比較。
  Levenshtein一快速估算L evenshtein距離和字符串相似度。
  fuzzywuzzy -模糊字符串匹配。esmre -正則表達式加速器。
  ftfy-自動(dòng)整理Unicode文本,減少碎片化。.自然語(yǔ)言處理
  處理人類(lèi)語(yǔ)言問(wèn)題的庫。
  NLTK -編寫(xiě)Python程序來(lái)處理人類(lèi)語(yǔ)言數據的最好平臺。
  Pattern一Python的網(wǎng)路挖掘模塊。他有自然語(yǔ)言處理工具,機器學(xué)習以及其它。
  TextBlob -為深入自然語(yǔ)言處理任務(wù)提供了一致的API。是基于NLTK以及Pattern的巨人之肩上發(fā)展的。
  jieba-中文動(dòng)詞工具。
  SnowNLP -中文文本處理庫。
  loso-另一個(gè)英文分詞庫。瀏覽器自動(dòng)化與仿真
  selenium一自動(dòng)化真正的瀏覽器(Chrome瀏覽器,火狐瀏覽器,Opera瀏覽器, IE瀏覽器)。
  Ghost.py -對PyQt的webkit的封裝(需 要PyQT)。
  Spynner -對PyQt的webkit的封裝(需要PyQT),
  Splinter -通用API瀏覽器模擬器(seleniumweb驅動(dòng),Django顧客 端,Zope) 。多重處理
  threading - Python標準庫的線(xiàn)程運行。對于I/0密集型任務(wù)太有效。對于CPU綁定的任務(wù)沒(méi)用,因為python GIL。
  multiprocessing -標準的Python庫運行多進(jìn)程。
  celery -基于分布式消息傳遞的異步任務(wù)隊列/作業(yè)隊列。;
  concurrent-futures一concurrent-futures模塊為調用異步執行提供了一個(gè)高層次的插口。
  異步網(wǎng)路編程庫
  asyncio- (在Python 3.4 +版本以上的Python標準庫)異步I/O, 時(shí)間循環(huán),協(xié)同程序和任務(wù)。
  Twisted一基于風(fēng)波驅動(dòng)的網(wǎng)路引|擎框架。Tornado -一個(gè)網(wǎng)路框架和異步網(wǎng)路庫。pulsar - Python風(fēng)波驅動(dòng)的并發(fā)框架。
  diesel - Python的基于紅色風(fēng)波的I/O框架。gevent -一個(gè)使用greenlet的基于解釋器的Python網(wǎng)路庫。
  eventlet -有WSGI支持的異步框架。
  Tomorrow -異步代碼的奇妙的修飾句型。隊列
  celery -基于分布式消息傳遞的異步任務(wù)隊列/作業(yè)隊列。
  huey -小型多線(xiàn)程任務(wù)隊列。
  mrq - Mr. Queue -使用redis &amp; Gevent的Python分布式工作任務(wù)隊列。
  RQ -基于Redis的輕量級任務(wù)隊列管理器。simpleq--個(gè)簡(jiǎn)單的,可無(wú)限擴充,基于A(yíng)mazon SQS的隊列。
  python-geARMan一Gearman的Python API。
  云計算
  picloud -云端執行Python代碼。
  dominoup.com -云端執行R,Python和matlab代碼網(wǎng)頁(yè)內容提取
  提取網(wǎng)頁(yè)內容的庫。
  HTML頁(yè)面的文本和元數據
  newspaper -用Python進(jìn)行新聞提取、文章提I取和內容策展。
  html2text -將HTML轉為Markdown格式文本。
  python-goose一HTML內容/文章提取器。lassie -人性化的網(wǎng)頁(yè)內容檢索工具WebSocket
  用于WebSocket的庫。
  Crossbar -開(kāi)源的應用消息傳遞路由器
  (Python實(shí)現的用于A(yíng)utobahn的WebSocket和WAMP)。
  AutobahnPython -提供了WebSocket合同和WAMP合同的Python實(shí)現而且開(kāi)源。
  WebSocket-for-Python - Python 2和3以及PyPy的WebSocket客戶(hù)端和服務(wù)器庫。DNS解析
  dnsyo -在全球超過(guò)1 500個(gè)的DNS服務(wù)器.上檢測你的DNS。
  pycares - c-ares的插口。c-ares是 進(jìn)行DNS懇求和異步名稱(chēng)決議的C語(yǔ)言庫。
  計算機視覺(jué)
  SimpleCV -用于照相機、圖像處理、特征提取、格式轉換的簡(jiǎn)介,可讀性強的插口(基于OpenCV)。
  Flask是一個(gè)輕量級的Web應用框架,使用Python編撰?;赪erkzeugWSGI工具箱和Jinja2模板引擎。使用BSD授權。
  Flask也被稱(chēng)為"microframework" ,因為它使用簡(jiǎn)單的核心,用extension降低其他功能。Flask沒(méi)有默認使用的數據庫、窗體驗證工具。然而,Flask保留了擴增的彈性,可以用Flask-extension加入這種功能: ORM、窗體驗證工具、文件上傳、各種開(kāi)放式身分驗證技術(shù)。
  Web2py是一個(gè)用Python語(yǔ)言 編寫(xiě)的免費的開(kāi)源Web框架,旨在敏捷快速的開(kāi)發(fā)Web應用,具有快速、可擴充、安全以及可移植的數據庫驅動(dòng)的應用,遵循LGPLv3開(kāi) 源合同。
  Web2py提供一站式的解決方案,整個(gè)開(kāi)發(fā)過(guò)程都可以在瀏覽器上進(jìn)行,提供了Web版的在線(xiàn)開(kāi)發(fā),HTML模版編撰,靜態(tài)文件的上傳,數據庫的編撰的功能。其它的還有日志功能,以及一個(gè)自動(dòng)化的admin插口。
  4.Tornado
  Tornado即是一.個(gè)Web server(對此本文不作闡述)python分布式爬蟲(chóng)框架,同時(shí)又是一個(gè)類(lèi)web.py的micro-framework,作為框架Tornado的思想主要來(lái)源于Web.py,大家在Web.py的網(wǎng)站首頁(yè)也可以見(jiàn)到Tornado的大鱷Bret Taylor的那么一段話(huà)(他這兒說(shuō)的FriendFeed用的框架跟Tornado可以看作是一個(gè)東西) :
  "[web.pyinspired the] Web framework we useat FriendFeed [and] the webapp frameworkthat ships with App Engin...”
  因為有這層關(guān)系,后面不再單獨討論Tornado。
  5.CherryPy
  CherryPy是一種用于Python的、簡(jiǎn)單而特別有用的Web框架,其主要作用是以盡可能少的操作將Web服務(wù)器與Python代碼聯(lián)接,其功能包括外置的剖析功能、靈活的插件系統以及一次運行多個(gè)HTTP服務(wù)器的功能python分布式爬蟲(chóng)框架,可與運行在最新版本的Python、Jython、 Android上。 查看全部

  
  urlib -網(wǎng)絡(luò )庫(stdlib)。requests -網(wǎng)絡(luò )庫。
  grab -網(wǎng)絡(luò )庫(基于pycurl)。pycurl -網(wǎng)絡(luò )庫(綁定libcurl)
  ullib3 - Python HTTP庫,安全連接池、支持文件post、可用性高。httplib2一網(wǎng)絡(luò )庫。
  RoboBrowser -一個(gè)簡(jiǎn)單的、極具Python風(fēng)格的Python庫,無(wú)需獨立的瀏覽器即可瀏覽網(wǎng)頁(yè)。
  MechanicalSoup一個(gè)與網(wǎng)站自動(dòng)交互Python庫。
  mechanize -有狀態(tài)、可編程的Web瀏覽庫。socket -底層網(wǎng)路插口(stdlib)。
  Unirest for Python - Unirest是一套可用于 多種語(yǔ)言的輕量級的HTTP庫。
  hyper - Python的HTTP/2客戶(hù)端。
  PySocks - SocksiPy更新并積極維護的版本,包括錯誤修補和一些其他的特點(diǎn)。作為socket模塊的直接替換。
  網(wǎng)絡(luò )爬蟲(chóng)框架
  grab -網(wǎng)絡(luò )爬蟲(chóng)框架(基 于pycur/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)微框架。HTML/XML解析器
  lxml - C語(yǔ)言編撰高效HTML/ XML處理庫。支持XPath。
  cssselect -解析DOM樹(shù)和CSS選擇器。pyquery -解析DOM樹(shù)和jQuery選擇器。
  BeautIFulSoup -低效HTML/ XML處理庫,純Python實(shí)現。
  html5lib -根據WHATWG規范生成HTML/ XML文檔的DOM。該規范被用在現今所有的瀏覽器上。
  feedparser一解析RSS/ATOM feeds。
  MarkupSafe -為XML/HTML/XHTML提供了安全通配符的字符串。
  xmltodict-一個(gè)可以使你在處理XML時(shí)覺(jué)得象在處理JSON一樣的Python模塊。
  xhtml2pdf -將HTML/CSS轉換為PDF。
  untangle -輕松實(shí)現將XML文件轉換為Python對象。清理
  Bleach -清理HTML (需要html5lib)。sanitize -為混亂的數據世界帶來(lái)端午。文本處理
  用于解析和操作簡(jiǎn)單文本的庫。
  difflib - (Python標準庫) 幫助進(jìn)行差異化比較。
  Levenshtein一快速估算L evenshtein距離和字符串相似度。
  fuzzywuzzy -模糊字符串匹配。esmre -正則表達式加速器。
  ftfy-自動(dòng)整理Unicode文本,減少碎片化。.自然語(yǔ)言處理
  處理人類(lèi)語(yǔ)言問(wèn)題的庫。
  NLTK -編寫(xiě)Python程序來(lái)處理人類(lèi)語(yǔ)言數據的最好平臺。
  Pattern一Python的網(wǎng)路挖掘模塊。他有自然語(yǔ)言處理工具,機器學(xué)習以及其它。
  TextBlob -為深入自然語(yǔ)言處理任務(wù)提供了一致的API。是基于NLTK以及Pattern的巨人之肩上發(fā)展的。
  jieba-中文動(dòng)詞工具。
  SnowNLP -中文文本處理庫。
  loso-另一個(gè)英文分詞庫。瀏覽器自動(dòng)化與仿真
  selenium一自動(dòng)化真正的瀏覽器(Chrome瀏覽器,火狐瀏覽器,Opera瀏覽器, IE瀏覽器)。
  Ghost.py -對PyQt的webkit的封裝(需 要PyQT)。
  Spynner -對PyQt的webkit的封裝(需要PyQT),
  Splinter -通用API瀏覽器模擬器(seleniumweb驅動(dòng),Django顧客 端,Zope) 。多重處理
  threading - Python標準庫的線(xiàn)程運行。對于I/0密集型任務(wù)太有效。對于CPU綁定的任務(wù)沒(méi)用,因為python GIL。
  multiprocessing -標準的Python庫運行多進(jìn)程。
  celery -基于分布式消息傳遞的異步任務(wù)隊列/作業(yè)隊列。;
  concurrent-futures一concurrent-futures模塊為調用異步執行提供了一個(gè)高層次的插口。
  異步網(wǎng)路編程庫
  asyncio- (在Python 3.4 +版本以上的Python標準庫)異步I/O, 時(shí)間循環(huán),協(xié)同程序和任務(wù)。
  Twisted一基于風(fēng)波驅動(dòng)的網(wǎng)路引|擎框架。Tornado -一個(gè)網(wǎng)路框架和異步網(wǎng)路庫。pulsar - Python風(fēng)波驅動(dòng)的并發(fā)框架。
  diesel - Python的基于紅色風(fēng)波的I/O框架。gevent -一個(gè)使用greenlet的基于解釋器的Python網(wǎng)路庫。
  eventlet -有WSGI支持的異步框架。
  Tomorrow -異步代碼的奇妙的修飾句型。隊列
  celery -基于分布式消息傳遞的異步任務(wù)隊列/作業(yè)隊列。
  huey -小型多線(xiàn)程任務(wù)隊列。
  mrq - Mr. Queue -使用redis &amp; Gevent的Python分布式工作任務(wù)隊列。
  RQ -基于Redis的輕量級任務(wù)隊列管理器。simpleq--個(gè)簡(jiǎn)單的,可無(wú)限擴充,基于A(yíng)mazon SQS的隊列。
  python-geARMan一Gearman的Python API。
  云計算
  picloud -云端執行Python代碼。
  dominoup.com -云端執行R,Python和matlab代碼網(wǎng)頁(yè)內容提取
  提取網(wǎng)頁(yè)內容的庫。
  HTML頁(yè)面的文本和元數據
  newspaper -用Python進(jìn)行新聞提取、文章提I取和內容策展。
  html2text -將HTML轉為Markdown格式文本。
  python-goose一HTML內容/文章提取器。lassie -人性化的網(wǎng)頁(yè)內容檢索工具WebSocket
  用于WebSocket的庫。
  Crossbar -開(kāi)源的應用消息傳遞路由器
  (Python實(shí)現的用于A(yíng)utobahn的WebSocket和WAMP)。
  AutobahnPython -提供了WebSocket合同和WAMP合同的Python實(shí)現而且開(kāi)源。
  WebSocket-for-Python - Python 2和3以及PyPy的WebSocket客戶(hù)端和服務(wù)器庫。DNS解析
  dnsyo -在全球超過(guò)1 500個(gè)的DNS服務(wù)器.上檢測你的DNS。
  pycares - c-ares的插口。c-ares是 進(jìn)行DNS懇求和異步名稱(chēng)決議的C語(yǔ)言庫。
  計算機視覺(jué)
  SimpleCV -用于照相機、圖像處理、特征提取、格式轉換的簡(jiǎn)介,可讀性強的插口(基于OpenCV)。
  Flask是一個(gè)輕量級的Web應用框架,使用Python編撰?;赪erkzeugWSGI工具箱和Jinja2模板引擎。使用BSD授權。
  Flask也被稱(chēng)為"microframework" ,因為它使用簡(jiǎn)單的核心,用extension降低其他功能。Flask沒(méi)有默認使用的數據庫、窗體驗證工具。然而,Flask保留了擴增的彈性,可以用Flask-extension加入這種功能: ORM、窗體驗證工具、文件上傳、各種開(kāi)放式身分驗證技術(shù)。
  Web2py是一個(gè)用Python語(yǔ)言 編寫(xiě)的免費的開(kāi)源Web框架,旨在敏捷快速的開(kāi)發(fā)Web應用,具有快速、可擴充、安全以及可移植的數據庫驅動(dòng)的應用,遵循LGPLv3開(kāi) 源合同。
  Web2py提供一站式的解決方案,整個(gè)開(kāi)發(fā)過(guò)程都可以在瀏覽器上進(jìn)行,提供了Web版的在線(xiàn)開(kāi)發(fā),HTML模版編撰,靜態(tài)文件的上傳,數據庫的編撰的功能。其它的還有日志功能,以及一個(gè)自動(dòng)化的admin插口。
  4.Tornado
  Tornado即是一.個(gè)Web server(對此本文不作闡述)python分布式爬蟲(chóng)框架,同時(shí)又是一個(gè)類(lèi)web.py的micro-framework,作為框架Tornado的思想主要來(lái)源于Web.py,大家在Web.py的網(wǎng)站首頁(yè)也可以見(jiàn)到Tornado的大鱷Bret Taylor的那么一段話(huà)(他這兒說(shuō)的FriendFeed用的框架跟Tornado可以看作是一個(gè)東西) :
  "[web.pyinspired the] Web framework we useat FriendFeed [and] the webapp frameworkthat ships with App Engin...”
  因為有這層關(guān)系,后面不再單獨討論Tornado。
  5.CherryPy
  CherryPy是一種用于Python的、簡(jiǎn)單而特別有用的Web框架,其主要作用是以盡可能少的操作將Web服務(wù)器與Python代碼聯(lián)接,其功能包括外置的剖析功能、靈活的插件系統以及一次運行多個(gè)HTTP服務(wù)器的功能python分布式爬蟲(chóng)框架,可與運行在最新版本的Python、Jython、 Android上。

官方客服QQ群

微信人工客服

QQ人工客服


線(xiàn)

亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久