日韩无码专区无码一级三级片|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)銷解決方案
iOS程序員如何使用python寫網(wǎng)路爬蟲(chóng)

我上一篇blog說(shuō)過(guò),iOS開(kāi)發(fā)如果之前沒(méi)接觸過(guò)除了c和c++(c++太難了,不花個(gè)十來(lái)年基本不可能精通)的語(yǔ)言,第二門語(yǔ)言***的選擇就是python.

成都創(chuàng)新互聯(lián)公司專注于武鳴企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城網(wǎng)站制作。武鳴網(wǎng)站建設(shè)公司,為武鳴等地區(qū)提供建站服務(wù)。全流程定制開(kāi)發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

原因就是

1.語(yǔ)法簡(jiǎn)單

2.庫(kù)太多,隨便想要什么功能的庫(kù)都找得到,簡(jiǎn)直編程界的哆啦A夢(mèng).

3.語(yǔ)法優(yōu)美,不信?你去看看python超過(guò)兩千行的代碼再回頭看看用oc寫的超過(guò)兩千行的代碼,oc寫的簡(jiǎn)直丑到***(沒(méi)命名空間,點(diǎn)語(yǔ)法調(diào)用和括號(hào)調(diào)用混用).

為什么要會(huì)寫爬蟲(chóng)?

春節(jié)前有一件活無(wú)人認(rèn)領(lǐng),我就自告奮勇認(rèn)領(lǐng)了,具體如下:

自己寫程序在豆瓣讀書(shū)上抓取人

熊節(jié)覺(jué)得一個(gè)好的程序員應(yīng)該讀過(guò)那20本好書(shū) ——《重構(gòu)》《精益創(chuàng)業(yè)》《敏捷軟件開(kāi)發(fā)》《測(cè)試驅(qū)動(dòng)開(kāi)發(fā)》等等。他在為ThoughtWorks組建成都分公司團(tuán)隊(duì)的時(shí)候,發(fā)愁正統(tǒng)招聘方法太慢了。于是,他花了幾個(gè)晚上用自己高中自學(xué)的水貨代碼水平寫了一個(gè)程序,去抓取豆瓣上讀過(guò)這些技術(shù)書(shū)籍的人。然后不斷遞歸,再抓到這些人都讀過(guò)其它什么書(shū),再繼續(xù)抓讀過(guò)那些書(shū)的人。抓了幾萬(wàn)人之后,他再用Hadoop來(lái)分析,篩選出了幾十個(gè)技術(shù)大牛。

他把這些大牛的豆瓣賬號(hào)扔給了公司女HR,讓HR去一個(gè)個(gè)發(fā)豆郵勾搭。

春節(jié)期間斷斷續(xù)續(xù)邊看邊學(xué)寫了個(gè)爬豆瓣上優(yōu)秀iOS開(kāi)發(fā)人員的爬蟲(chóng).所以感覺(jué)iOS開(kāi)發(fā)人員有必要掌握這項(xiàng)技術(shù).

再舉個(gè)例子,你如果想自己弄個(gè)app,例如每日精選美女之類的app,你服務(wù)端總得有圖吧,怎么弄?自己用爬蟲(chóng)爬啊,爬到鏈接了塞到數(shù)據(jù)庫(kù)里,傳個(gè)json,app直接sdwebimage就好了.多爽!

廢話不多說(shuō).開(kāi)始寫.

我先假設(shè)你用的是mac,然后mac都預(yù)裝了python2.x,然后呢,你有了python沒(méi)用,你得有庫(kù).沒(méi)庫(kù)怎么干活?怎么安裝庫(kù)呢?python界也有個(gè)類似于我們iOS開(kāi)發(fā)里cocoapods的東西,這個(gè)東西叫做pip.

pip和cocoapods用起來(lái)的命令都極其類似,我們只需要兩個(gè)庫(kù),一個(gè)叫做urllib2,一個(gè)叫做beautifulsoup.

urllib2是干什么的呢?它的作用就是把網(wǎng)頁(yè)down下來(lái),然后你就可以分析網(wǎng)頁(yè)了.

beautifulsoup干什么的呢?你用urllib2把網(wǎng)頁(yè)down下來(lái)了之后,里面都是html+css什么的,你想要從亂七八糟的一堆html里面找到正確的圖片鏈接那可不是件簡(jiǎn)單的事,據(jù)我這幾天的學(xué)習(xí),做法無(wú)非兩個(gè),一個(gè)是自己寫正則表達(dá)式然后用一個(gè)叫re的python庫(kù),另一個(gè)是使用lxml解析xpath.這兩個(gè)說(shuō)實(shí)話都不太好用,一個(gè)正則就夠你吃一壺的.后來(lái)我搜索了很久,發(fā)現(xiàn)了一個(gè)庫(kù)叫做beautifulsoup,用這個(gè)庫(kù)解析html超級(jí)好用.

然后你們打開(kāi)terminal敲入下面這個(gè)命令.

1

pip install BeautifulSoup

然后就會(huì)自動(dòng)幫你安裝BeautifulSoup這個(gè)東西了.urllib2因?yàn)槭亲詭У?所以不用你下載了.

好的我們打www.dbmeizi.com,這個(gè)邪惡的網(wǎng)站,首頁(yè)都是軟妹子.直接右鍵打開(kāi)源文件.

你看到的是這些東西.

看上去和亂碼沒(méi)什么區(qū)別,但是我們需要仔細(xì)觀察.終于找到了圖片的鏈接.

圖片鏈接就在li這個(gè)標(biāo)簽下地img標(biāo)簽里.現(xiàn)在我們需要做的就是嘗試著把這種類型的li從所有html中分離出來(lái).我們可以看到li這個(gè)標(biāo)簽有個(gè)屬性叫做class,這個(gè)屬性的值是class="span3",我們把這段話li class="span3"

搜索一下,我們發(fā)現(xiàn)有20個(gè)結(jié)果.恰巧,我們這個(gè)頁(yè)面的圖片也只有20個(gè),那么可以確定的是我們找到了區(qū)別于其他標(biāo)簽的唯一性.

再仔細(xì)分析下,img這個(gè)標(biāo)簽在li這個(gè)標(biāo)簽里有且只有一個(gè).那么,也就是說(shuō),我們先搜索出所有符合條件的li標(biāo)簽,然后找到里面的img標(biāo)簽就可以找到所有的圖片鏈接了.

然后看代碼.

 
 
 
 
  1. #!/usr/bin/python 
  2. #-*- coding: utf-8 -*- 
  3. #encoding=utf-8 
  4. import urllib2 
  5. import urllib 
  6. import os 
  7. from BeautifulSoup import BeautifulSoup 
  8. def getAllImageLink(): 
  9.     html = urllib2.urlopen('http://www.dbmeizi.com').read() 
  10.     soup = BeautifulSoup(html) 
  11.     liResult = soup.findAll('li',attrs={"class":"span3"}) 
  12.     for li in liResult: 
  13.         imageEntityArray = li.findAll('img') 
  14.         for image in imageEntityArray: 
  15.             link = image.get('data-src') 
  16.             imageName = image.get('data-id') 
  17.             filesavepath = '/Users/weihua0618/Desktop/meizipicture/%s.jpg' % imageName  
  18.             urllib.urlretrieve(link,filesavepath) 
  19.             print filesavepath  
  20. if __name__ == '__main__': 
  21.     getAllImageLink() 

我們來(lái)一句一句分析下.其實(shí)python的語(yǔ)法超級(jí)簡(jiǎn)單.

凡是#打頭的就是python里面的注釋語(yǔ)句類似于oc里的//.

分別說(shuō)明我們的環(huán)境是python,編碼是utf-8

然后import了四個(gè)庫(kù),分別是urllib2,urllib,os,和beautifulsoup庫(kù).

導(dǎo)入beautifulsoup庫(kù)的方式和其他三個(gè)不太一樣.我暫時(shí)也不清楚為什么python用這種導(dǎo)入方式,不過(guò)照貓畫(huà)虎就行了.

然后def打頭的就是定義一個(gè)函數(shù),python里面是不用分號(hào)做句與句的分隔符的.他用縮進(jìn)來(lái)表示.與def縮進(jìn)一個(gè)tab的都是函數(shù)體.

1

html = urllib2.urlopen('http://www.dbmeizi.com').read()

這句很簡(jiǎn)單,就是讀取網(wǎng)頁(yè)的html.然后把值賦給html這個(gè)變量.python里聲明變量前面不用加任何東西,不用加聲明語(yǔ)句和變量類型,就連javascript聲明變量還要加個(gè)var呢.

我們獲取了網(wǎng)頁(yè)的html之后呢,聲明了一個(gè)beautifulsoup變量soup,用來(lái)準(zhǔn)備解析html.

1

liResult = soup.findAll('li',attrs={"class":"span3"})

這句話的意思就是,尋找html中所有l(wèi)i標(biāo)簽,并且這個(gè)li標(biāo)簽有個(gè)屬性class,class的值是span3.

注意這個(gè)findAll函數(shù),有點(diǎn)常識(shí)的話你應(yīng)該清楚,凡是帶all的函數(shù)基本上返回的都是一個(gè)數(shù)組,所以我們liResult這個(gè)變量實(shí)際上是一個(gè)數(shù)組.

for li in liResult:

這句話基本和oc里的遍歷數(shù)組語(yǔ)法完全一樣.就是遍歷liResult里的每一個(gè)變量.那么每一個(gè)變量就是一個(gè)\

標(biāo)簽.

imageEntityArray = li.findAll('img')

獲得了li標(biāo)簽,我們?cè)僬页鏊械膇mg標(biāo)簽.

一樣的道理,遍歷所有img標(biāo)簽(實(shí)際上只有一個(gè)).

link = image.get('data-src')

imageName = image.get('data-id')

這兩句的意思就是,獲取img標(biāo)簽里的'data-src'屬性和'data-id'屬性,data-src就是我們最想要的圖片鏈接了.data-id我們會(huì)用來(lái)當(dāng)做下載圖片之后的名字.

filesavepath = '/Users/weihua0618/Desktop/meizipicture/%s.jpg' % imageName

urllib.urlretrieve(link,filesavepath)

這兩句,***句是設(shè)置一個(gè)文件存放地址,第二句用urllib這個(gè)庫(kù)的urlretrieve這個(gè)方法下載我們的圖片,并且把圖片放到剛才的路徑里.

好了,我們的圖片就下載完了.

說(shuō)說(shuō)我是怎么爬蟲(chóng)所有豆瓣iOS開(kāi)發(fā)的,我先找到所有標(biāo)簽為ios開(kāi)發(fā)的書(shū)籍,然后把所有書(shū)的id抓到,然后用id找到所有閱讀過(guò)書(shū)的用戶id,把所有用戶id抓下來(lái)之后用hadoop分析,哪些用戶id讀過(guò)的書(shū)最多,列出前一百個(gè).然后,你們懂得...(昨天我的ip還是mac地址已經(jīng)被豆瓣封了)

我感覺(jué),我可以在簡(jiǎn)歷上鄭重的寫下"精通python和大數(shù)據(jù)分析" -_-!


新聞標(biāo)題:iOS程序員如何使用python寫網(wǎng)路爬蟲(chóng)
文章來(lái)源:http://www.5511xx.com/article/dheccce.html