上一篇博客说了iOS开发如果没有接触过C和C++以外的语言(C++太难了,基本不可能精通不到十年),第二语言最好的选择是python。原因是1.语法简单2.库太多了,随便找一个库,有你想要的功能。就像编程世界里的哆啦A梦。不相信吗?你去看看python的2000多行代码,再回头看看oc写的2000多行代码。.我为什么要知道怎么写爬虫?春节前,有一份工作无人认领,于是我主动提出认领。详情如下:自己写的程序,在豆瓣阅读上抢到了人熊节。我认为一个好的程序员应该读过那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下网页后,全是html+css什么的。你想要摆脱一堆乱七八糟的html在里面找到正确的图片链接并不容易。根据我这几天的研究,方法不外乎两种。一种是自己写正则表达式,用一个叫re的python库,一种是用lxml解析xpath。说实话,这两个都不太好用。一个正则表达式就够你吃一锅了。然后找了半天,找到了一个叫beautifulsoup的库。使用这个库解析HTML非常容易。然后打开终端并输入以下命令。1pipinstallBeautifulSoup会自动为你安装BeautifulSoup。因为urllib2是内置的,所以你不需要下载它。好吧,就叫www.dbmeizi.com吧,这个邪恶的网站,首页全是软妹子。右键单击以打开源文件。你看到的就是这些东西。看起来和乱码没什么区别,但是需要我们仔细观察。终于找到图片链接了。图片链接在li标签下的img标签里。现在我们需要做的是尝试将这种类型的li从所有html中分离出来。我们可以看到li标签有一个属性叫class,这个属性的值为class="span3"。我们把这段liclass="span3"搜索一下,找到了20个结果。巧合的是,我们的页面图片只有20张,可以肯定的是我们找到了区别于其他标签的独特之处。仔细分析,li标签中只有一个img标签。那么也就是说,我们先搜索出所有符合条件的li标签,然后再找到里面的img标签,找到所有的图片链接。然后看代码#!/usr/bin/python#-*-coding:utf-8-*-#encoding=utf-8importurllib2importurllibimportosfromBeautifulSoupimportBeautifulSoupdefgetAllImageLink():html=urllib2.urlopen('http://www.dbmeizi.com').read()soup=BeautifulSoup(html)liResult=soup.findAll('li',attrs={"class":"span3"})forliinliResult:imageEntityArray=li.findAll('img')forimageinimageEntityArray:link=image.get('data-src')imageName=image.get('data-id')filesavepath='/Users/weihua0618/Desktop/meizipicture/%s.jpg'%imageNameurllib.urlretrieve(link,filesavepath)printfilesavepathif__name__=='__main__':getAllImageLink()下面逐句分析。其实python的语法超级简单。任何以#开头的都是python中的注释语句,类似于oc中的//。分别我们的环境是python,编码是utf-8,然后导入四个库,分别是urllib2、urllib、os、beautifulsoup库。导入beautifulsoup库的方式和其他三者不太一样。暂时不知道为什么python要用这个import方式,但跟着猫走就够了。然后def定义了一个函数。在python中,分号不用作句子分隔符。他用缩进来表示。用defa缩进ab是一个函数体。1html=urllib2.urlopen('http://www.dbmeizi.com').read()这句话很简单,就是读取网页的html,然后赋值给变量html。在python中,声明变量之前不需要添加任何东西,不需要添加声明语句和变量类型,甚至在javascript中声明变量也需要添加一个var。我们得到网页的html后,声明一个beautifulsoup变量soup,准备解析html.1liResult=soup.findAll('li',attrs={"class":"span3"})表示找到所有li标签在html中,而这个li标签有一个属性class,class的值为span3。注意这个findAll函数。稍微有点常识的应该知道,all的函数基本上都是返回一个数组,所以我们的liResult变量其实就是一个数组。forliinliResult:这句话基本和oc中遍历数组的语法完全一样。就是遍历liResult中的每一个变量。然后每个变量都是一个\标签。imageEntityArray=li.findAll('img')得到li标签,然后我们找到所有的img标签。同理,遍历所有img标签(实际上只有一个)。link=image.get('data-src')imageName=image.get('data-id')这两句的意思是获取img标签的'data-src'属性和'data-id'文件中的属性,data-src就是我们最想要的图片链接。我们将在下载图像后使用data-id作为名称。filesavepath='/Users/weihua0618/Desktop/meizipicture/%s.jpg'%imageNameurllib.urlretrieve(link,filesavepath)这两句,第一句是设置一个文件存放地址,第二句用到了urlretrieve方法urllib库下载我们的图片,并将图片放在刚才的路径下。好了,我们的图片下载好了。先说说我是怎么爬取所有豆瓣iOS开发的。我先找到所有的标签是为ios开发的书,然后放上所有书的id抓住它,然后用id找出所有读过这本书的用户id。抓取所有用户id后,用Hadoop分析哪些用户id读过的书最多,列出前100名。然后,你知道吗……(昨天我的ip或mac地址被豆瓣封了)感觉可以郑重地在简历上写上“精通python和大数据分析”-_-!
