日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
我是如何零基礎(chǔ)開(kāi)始能寫(xiě)Python爬蟲(chóng)的

剛開(kāi)始接觸爬蟲(chóng)的時(shí)候,簡(jiǎn)直驚為天人,十幾行代碼,就可以將無(wú)數(shù)網(wǎng)頁(yè)的信息全部獲取下來(lái),自動(dòng)選取網(wǎng)頁(yè)元素,自動(dòng)整理成結(jié)構(gòu)化的文件。

成都創(chuàng)新互聯(lián)從2013年成立,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元沙坡頭做網(wǎng)站,已為上家服務(wù),為沙坡頭各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220

利用這些數(shù)據(jù),可以做很多領(lǐng)域的分析、市場(chǎng)調(diào)研,獲得很多有價(jià)值的信息。這種技能不為我所用實(shí)在可惜,于是果斷開(kāi)始學(xué)習(xí)。

- -并非開(kāi)始都是最容易的

剛開(kāi)始對(duì)爬蟲(chóng)不是很了解,又沒(méi)有任何的計(jì)算機(jī)、編程基礎(chǔ),確實(shí)有點(diǎn)懵逼。從哪里開(kāi)始,哪些是最開(kāi)始應(yīng)該學(xué)的,哪些應(yīng)該等到有一定基礎(chǔ)之后再學(xué),也沒(méi)個(gè)清晰的概念。

因?yàn)槭?Python 爬蟲(chóng)嘛,Python 就是必備的咯,那先從 Python 開(kāi)始吧。于是看了一些教程和書(shū)籍,了解基本的數(shù)據(jù)結(jié)構(gòu),然后是列表、字典、元組,各種函數(shù)和控制語(yǔ)句(條件語(yǔ)句、循環(huán)語(yǔ)句)。

學(xué)了一段時(shí)間,才發(fā)現(xiàn)自己還沒(méi)接觸到真正的爬蟲(chóng)呢,而且純理論學(xué)習(xí)很快就忘了,回去復(fù)習(xí)又太浪費(fèi)時(shí)間,簡(jiǎn)直不要太絕望。把 Python 的基礎(chǔ)知識(shí)過(guò)了一遍之后,我竟然還沒(méi)裝一個(gè)可以敲代碼的IDE,想想就哭笑不得。

- -開(kāi)始直接上手

轉(zhuǎn)機(jī)出現(xiàn)在看過(guò)一篇爬蟲(chóng)的技術(shù)文章后,清晰的思路和通俗易懂的語(yǔ)言讓我覺(jué)得,這才是我想學(xué)的爬蟲(chóng)。于是決定先配一個(gè)環(huán)境,試試看爬蟲(chóng)到底是怎么玩的。(當(dāng)然你可以理解為這是浮躁,但確實(shí)每個(gè)小白都想去做直觀、有反饋的事情)

因?yàn)榕鲁鲥e(cuò),裝了比較保險(xiǎn)的 Anaconda,用自帶的 Jupyter Notebook 作為IDE來(lái)寫(xiě)代碼??吹胶芏嗳苏f(shuō)因?yàn)榕渲铆h(huán)境出各種BUG,簡(jiǎn)直慶幸。很多時(shí)候打敗你的,并不是事情本身,說(shuō)的就是爬蟲(chóng)配置環(huán)境這事兒。

遇到的另一個(gè)問(wèn)題是,Python 的爬蟲(chóng)可以用很多包或者框架來(lái)實(shí)現(xiàn),應(yīng)該選哪一種呢?我的原則就是是簡(jiǎn)單好用,寫(xiě)的代碼少,對(duì)于一個(gè)小白來(lái)說(shuō),性能、效率什么的,統(tǒng)統(tǒng)被我 pass 了。于是開(kāi)始接觸 urllib、美麗湯(BeautifulSoup),因?yàn)槁?tīng)別人說(shuō)很簡(jiǎn)單。

我上手的***個(gè)案例是爬取豆瓣的電影,無(wú)數(shù)人都推薦把豆瓣作為新手上路的實(shí)例,因?yàn)轫?yè)面簡(jiǎn)單且反爬蟲(chóng)不嚴(yán)。照著一些爬取豆瓣電影的入門(mén)級(jí)例子開(kāi)始看,從這些例子里面,了解了一點(diǎn)點(diǎn)爬蟲(chóng)的基本原理:下載頁(yè)面、解析頁(yè)面、定位并抽取數(shù)據(jù)。

當(dāng)然并沒(méi)有去系統(tǒng)看 urllib 和 BeautifulSoup 了,我需要把眼前實(shí)例中的問(wèn)題解決,比如下載、解析頁(yè)面,基本都是固定的語(yǔ)句,直接用就行,我就先不去學(xué)習(xí)原理了。

用 urllib 下載和解析頁(yè)面的固定句式

當(dāng)然 BeautifulSoup 中的基本方法是不能忽略的,但也無(wú)非是 find、get_text() 之類(lèi),信息量很小。就這樣,通過(guò)別人的思路和自己查找美麗湯的用法,完成了豆瓣電影的基本信息爬取。

用 BeautifulSoup 爬取豆瓣電影詳情

- -爬蟲(chóng)漸入佳境

有了一些套路和形式,就會(huì)有目標(biāo),可以接著往下學(xué)了。還是豆瓣,自己去摸索爬取更多的信息,爬取多部電影,多個(gè)頁(yè)面。這個(gè)時(shí)候就發(fā)現(xiàn)基礎(chǔ)不足了,比如爬取多個(gè)元素、翻頁(yè)、處理多種情況等涉及的語(yǔ)句控制,又比如提取內(nèi)容時(shí)涉及到的字符串、列表、字典的處理,還遠(yuǎn)遠(yuǎn)不夠。

再回去補(bǔ)充 Python 的基礎(chǔ)知識(shí),就很有針對(duì)性,而且能馬上能用于解決問(wèn)題,也就理解得更深刻。這樣直到把豆瓣的TOP250圖書(shū)和電影爬下來(lái),基本算是了解了一個(gè)爬蟲(chóng)的基本過(guò)程了。

BeautifulSoup 還算不錯(cuò),但需要花一些時(shí)間去了解一些網(wǎng)頁(yè)的基本知識(shí),否則一些元素的定位和選取還是會(huì)頭疼。

后來(lái)認(rèn)識(shí)到 xpath 之后相見(jiàn)恨晚,這才是入門(mén)必備利器啊,直接Chrome復(fù)制就可以了,指哪打哪。即便是要自己寫(xiě) xpath,以w3school上幾頁(yè)的 xpath 教程,一個(gè)小時(shí)也可以搞定了。requests 貌似也比 urllib 更好用,但摸索總歸是試錯(cuò)的過(guò)程,試錯(cuò)成本就是時(shí)間。

requests+xpath 爬取豆瓣TOP250圖書(shū)信息

- -跟反爬蟲(chóng)杠上了

通過(guò) requests+xpath,我可以去爬取很多網(wǎng)站網(wǎng)站了,后來(lái)自己練習(xí)了小豬的租房信息和當(dāng)當(dāng)?shù)膱D書(shū)數(shù)據(jù)。爬拉勾的時(shí)候就發(fā)現(xiàn)問(wèn)題了,首先是自己的請(qǐng)求根本不會(huì)返回信息,原來(lái)要將自己的爬蟲(chóng)偽裝成瀏覽器,終于知道別人代碼中那一坨 headers 信息是干啥的了。

在爬蟲(chóng)中添加 headers 信息,偽裝成真實(shí)用戶

接著是各種定位不到元素,然后知道了這是異步加載,數(shù)據(jù)根本不在網(wǎng)頁(yè)源代碼中,需要通過(guò)抓包來(lái)獲取網(wǎng)頁(yè)信息。于是在各種 JS、XHR的文件中 preview,尋找包含數(shù)據(jù)的鏈接。

當(dāng)然知乎還好,本身加載的文件不多,找到了 json 文件直接獲取對(duì)應(yīng)的數(shù)據(jù)。(這里要安利一個(gè)chrome插件:jsonview,讓小白輕松看懂 json 文件)

瀏覽器抓取 JavaScript 加載的數(shù)據(jù)

在這里就對(duì)反爬蟲(chóng)有了認(rèn)識(shí),當(dāng)然這還是最基本的,更嚴(yán)格的IP限制、驗(yàn)證碼、文字加密等等,可能還會(huì)遇到很多難題。但是目前的問(wèn)題能夠解決不就很好了嗎,逐個(gè)擊破才能更高效地學(xué)習(xí)。

比如后來(lái)在爬其他網(wǎng)站的時(shí)候就被封了IP,簡(jiǎn)單的可以通過(guò) time.sleep() 控制爬取頻率的方法解決,限制比較嚴(yán)格或者需要保證爬取速度,就要用代理IP來(lái)解決。

當(dāng)然,后來(lái)也試了一下 Selenium,這個(gè)就真的是按照真實(shí)的用戶瀏覽行為(點(diǎn)擊、搜索、翻頁(yè))來(lái)實(shí)現(xiàn)爬蟲(chóng),所以對(duì)于那些反爬蟲(chóng)特別厲害的網(wǎng)站,又沒(méi)有辦法解決,Selenium 是一個(gè)超級(jí)好用的東東,雖然速度稍微慢點(diǎn)。

- -嘗試強(qiáng)大的 Scrapy 框架

有了 requests+xpath 和抓包大法,就可以做很多事情了,豆瓣各分類(lèi)下的電影,58同城、知乎、拉勾這些網(wǎng)站基本都沒(méi)問(wèn)題。不過(guò),當(dāng)爬取的數(shù)據(jù)量級(jí)很大,而且需要靈活地處理各個(gè)模塊的話,會(huì)顯得很力不從心。

于是了解到強(qiáng)大的 Scrapy 框架,它不僅能便捷地構(gòu)建 Request,還有強(qiáng)大的 Selector 能夠方便地解析 Response,然而最讓人驚喜的還是它超高的性能,可以將爬蟲(chóng)工程化、模塊化。

Scrapy 框架的基本組件

學(xué)會(huì) Scrapy,自己去嘗試搭建了簡(jiǎn)單的爬蟲(chóng)框架,在做大規(guī)模數(shù)據(jù)爬去的時(shí)候能夠結(jié)構(gòu)化、工程化地思考大規(guī)模的爬取問(wèn)題,這使我可以從爬蟲(chóng)工程的維度去思考問(wèn)題。

當(dāng)然 Scrapy 本身的 selector 、中間件、spider 等會(huì)比較難理解,還是建議結(jié)合具體的例子,參考別人的代碼,去理解其中實(shí)現(xiàn)的過(guò)程,這樣能夠更好地理解。

用 Scrapy 爬取了大量租房信息

- -本地文件搞不動(dòng)了,上數(shù)據(jù)庫(kù)

爬回來(lái)大量的數(shù)據(jù)之后就發(fā)現(xiàn),本地的文件存起來(lái)非常不方便,即便存下來(lái)了,打開(kāi)大文件電腦會(huì)卡得很?chē)?yán)重。怎么辦呢?果斷上數(shù)據(jù)庫(kù)啊,于是開(kāi)始入坑 MongoDB。結(jié)構(gòu)化、非結(jié)構(gòu)化的數(shù)據(jù)都能夠存儲(chǔ),安裝好 PyMongo,就可以方便地在 Python 中操作數(shù)據(jù)庫(kù)了。

MongoDB 本身安裝會(huì)比較麻煩,如果自己一個(gè)人去折騰,很有可能會(huì)陷入困境。剛開(kāi)始安裝的時(shí)候也是出現(xiàn)各種BUG,幸得大神小X指點(diǎn),解決了很多問(wèn)題。

當(dāng)然對(duì)于爬蟲(chóng)這一塊,并不需要多么高深的數(shù)據(jù)庫(kù)技術(shù),主要是數(shù)據(jù)的入庫(kù)和提取,順帶掌握了基本的插入、刪除等操作??傊軌驖M足高效地提取爬下來(lái)的數(shù)據(jù)就OK了。

爬取拉勾招聘數(shù)據(jù)并用 MongoDB 存儲(chǔ)

- -傳說(shuō)中的分布式爬蟲(chóng)

這個(gè)時(shí)候,基本上很大一部分的網(wǎng)頁(yè)都能爬了,瓶頸就集中到爬取大規(guī)模數(shù)據(jù)的效率。因?yàn)閷W(xué)了 Scrapy,于是自然地接觸到一個(gè)很厲害的名字:分布式爬蟲(chóng)。

分布式這個(gè)東西,一聽(tīng)不明覺(jué)厲,感覺(jué)很恐怖,但其實(shí)就是利用多線程的原理讓多個(gè)爬蟲(chóng)同時(shí)工作,除了前面學(xué)過(guò)的 Scrapy 和 MongoDB,好像還需要了解 Redis。

Scrapy 用于做基本的頁(yè)面爬取,MongoDB 用于存儲(chǔ)爬取的數(shù)據(jù),Redis 則用來(lái)存儲(chǔ)要爬取的網(wǎng)頁(yè)隊(duì)列,也就是任務(wù)隊(duì)列。

分布式這東西看起來(lái)很?chē)樔?,但其?shí)分解開(kāi)來(lái),循序漸進(jìn)地學(xué)習(xí),也不過(guò)如此。

分布式爬58同城:定義項(xiàng)目?jī)?nèi)容部分

零基礎(chǔ)學(xué)習(xí)爬蟲(chóng),坑確實(shí)比較多,總結(jié)如下:

1.環(huán)境配置,各種安裝包、環(huán)境變量,對(duì)小白太不友好;

2.缺少合理的學(xué)習(xí)路徑,上來(lái) Python、HTML 各種學(xué),極其容易放棄;

3.Python有很多包、框架可以選擇,但小白不知道哪個(gè)更友好;

4.遇到問(wèn)題甚至不知道如何描述,更不用說(shuō)去尋找解決辦法;

5.網(wǎng)上的資料非常零散,而且對(duì)小白不友好,很多看起來(lái)云里霧里;

6.有些東西看似懂了,但結(jié)果自己寫(xiě)代碼還是很困難;

……………………

所以跟我一樣,很多人爬坑***的體會(huì)是:盡量不要系統(tǒng)地去啃一些東西,找一個(gè)實(shí)際的項(xiàng)目(從豆瓣這種簡(jiǎn)單的入手),直接開(kāi)始就好。


分享文章:我是如何零基礎(chǔ)開(kāi)始能寫(xiě)Python爬蟲(chóng)的
網(wǎng)站鏈接:http://www.5511xx.com/article/dpgsphi.html