<wbr id="wsjqy"></wbr>

          <form id="wsjqy"></form>
          <sub id="wsjqy"></sub>
          <nav id="wsjqy"><listing id="wsjqy"></listing></nav>
          更多課程 選擇中心


          Python培訓

          400-111-8989

          iOS程序員如何使用Python寫網路爬蟲

          • 發布:Python培訓
          • 來源:Python常見問題
          • 時間:2017-07-11 14:17

          寫網絡爬蟲,除了c/c++,第二門語言最好的選擇就是python.

          原因就是

          1.語法簡單

          2.庫太多,隨便想要什么功能的庫都找得到,簡直編程界的哆啦A夢.

          3.語法優美,不信?你去看看python超過兩千行的代碼再回頭看看用oc寫的超過兩千行的代碼,oc寫的簡直丑到極致(沒命名空間,點語法調用和括號調用混用).

          為什么要會寫爬蟲?

          春節前有一件活無人認領,我就自告奮勇認領了,具體如下:

          自己寫程序在豆瓣讀書上抓取人

          熊節覺得一個好的程序員應該讀過那20本好書 ——《重構》《精益創業》《敏捷軟件開發》《測試驅動開發》等等。他在為ThoughtWorks組建成都分公司團隊的時候,發愁正統招聘方法太慢了。于是,他花了幾個晚上用自己高中自學的水貨代碼水平寫了一個程序,去抓取豆瓣上讀過這些技術書籍的人。然后不斷遞歸,再抓到這些人都讀過其它什么書,再繼續抓讀過那些書的人。抓了幾萬人之后,他再用Hadoop來分析,篩選出了幾十個技術大牛。

          他把這些大牛的豆瓣賬號扔給了公司女HR,讓HR去一個個發豆郵勾搭。

          春節期間斷斷續續邊看邊學寫了個爬豆瓣上優秀iOS開發人員的爬蟲.所以感覺iOS開發人員有必要掌握這項技術.

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

          廢話不多說.開始寫.

          我先假設你用的是mac,然后mac都預裝了python2.x,然后呢,你有了python沒用,你得有庫.沒庫怎么干活?怎么安裝庫呢?python界也有個類似于我們iOS開發里cocoapods的東西,這個東西叫做pip.

          pip和cocoapods用起來的命令都極其類似,我們只需要兩個庫,一個叫做urllib2,一個叫做beautifulsoup.

          urllib2是干什么的呢?它的作用就是把網頁down下來,然后你就可以分析網頁了.

          beautifulsoup干什么的呢?你用urllib2把網頁down下來了之后,里面都是html+css什么的,你想要從亂七八糟的一堆html里面找到正確的圖片鏈接那可不是件簡單的事,據我這幾天的學習,做法無非兩個,一個是自己寫正則表達式然后用一個叫re的python庫,另一個是使用lxml解析xpath.這兩個說實話都不太好用,一個正則就夠你吃一壺的.后來我搜索了很久,發現了一個庫叫做beautifulsoup,用這個庫解析html超級好用.

          然后你們打開terminal敲入下面這個命令.

          pip install BeautifulSoup

          然后就會自動幫你安裝BeautifulSoup這個東西了.urllib2因為是自帶的,所以不用你下載了.

          好的我們打www.dbmeizi.com,這個邪惡的網站,首頁都是軟妹子.直接右鍵打開源文件.

          你看到的是這些東西.

          看上去和亂碼沒什么區別,但是我們需要仔細觀察.終于找到了圖片的鏈接.

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

          搜索一下,我們發現有20個結果.恰巧,我們這個頁面的圖片也只有20個,那么可以確定的是我們找到了區別于其他標簽的唯一性.

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

          然后看代碼.

          #!/usr/bin/python

          #-*- coding: utf-8 -*-

          #encoding=utf-8

          import urllib2

          import urllib

          import os

          from BeautifulSoup import BeautifulSoup

          def getAllImageLink():

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

          soup = BeautifulSoup(html)

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

          for li in liResult:

          imageEntityArray = li.findAll('img')

          for image in imageEntityArray:

          link = image.get('src')

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

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

          urllib.urlretrieve(link,filesavepath)

          print filesavepath

          if __name__ == '__main__':

          getAllImageLink()

          我們來一句一句分析下.其實python的語法超級簡單.

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

          分別說明我們的環境是python,編碼是utf-8

          然后import了四個庫,分別是urllib2,urllib,os,和beautifulsoup庫.

          導入beautifulsoup庫的方式和其他三個不太一樣.我暫時也不清楚為什么python用這種導入方式,不過照貓畫虎就行了.

          然后def打頭的就是定義一個函數,python里面是不用分號做句與句的分隔符的.他用縮進來表示.與def縮進一個tab的都是函數體.

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

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

          我們獲取了網頁的html之后呢,聲明了一個beautifulsoup變量soup,用來準備解析html.

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

          這句話的意思就是,尋找html中所有li標簽,并且這個li標簽有個屬性class,class的值是span3.

          注意這個findAll函數,有點常識的話你應該清楚,凡是帶all的函數基本上返回的都是一個數組,所以我們liResult這個變量實際上是一個數組.

          for li in liResult:

          這句話基本和oc里的遍歷數組語法完全一樣.就是遍歷liResult里的每一個變量.那么每一個變量就是一個

          ●標簽.

          imageEntityArray = li.findAll('img')

          獲得了li標簽,我們再找出所有的img標簽.

          一樣的道理,遍歷所有img標簽(實際上只有一個).

          link = image.get('src')

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

          這兩句的意思就是,獲取img標簽里的'src'屬性和'data-id'屬性,src就是我們最想要的圖片鏈接了.data-id我們會用來當做下載圖片之后的名字.

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

          urllib.urlretrieve(link,filesavepath)

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

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

          說說我是怎么爬蟲所有豆瓣ios開發的,我先找到所有標簽為ios開發的書籍,然后把所有書的id抓到,然后用id找到所有閱讀過書的用戶id,把所有用戶id抓下來之后用hadoop分析,哪些用戶id讀過的書最多,列出前一百個.然后,你們懂得...(昨天我的ip還是mac地址已經被豆瓣封了)

          我感覺,我可以在簡歷上鄭重的寫下"精通python和

          預約申請免費試聽課

          填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

          上一篇:Python和C/C++交互有幾種方法?
          下一篇:Python 如何編寫一個拼寫糾錯器?

          Python培訓班線上線下哪種靠譜

          python線上培訓班學費一般多少

          Python線下培訓班有哪些

          一篇文章帶你了解python和c語言的區別

          • 掃碼領取資料

            回復關鍵字:視頻資料

            免費領取 達內課程視頻學習資料

          • 視頻學習QQ群

            添加QQ群:1143617948

            免費領取達內課程視頻學習資料

          Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

          選擇城市和中心
          黑龍江省

          吉林省

          河北省

          湖南省

          貴州省

          云南省

          廣西省

          海南省

          网友自拍 偷拍 校园性爱青青草曰逼视屏老鸭窝国产偷自视频区视频 百度 好搜 搜狗
          <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>