学习python有一段时间了,一直找不到实战项目,于是今天就将昨天的爬虫技术分享出来,一是让更多的朋友能够学习爬虫,其实爬虫技术很简单,但深入进去很难,二是为了以后需要爬资源直接来参考这篇博客即可,不多说了,直接上教程,别着急,一步一步来。今天就从妹子图片开始抓起。
我使用的为妹子图这个网页,里面有很多的妹子。初学者不知拿到这个网页干嘛,我们首先获取网页源代码,也就是各种html标签啊,如图:
图中红色标记的就是图片的url链接。这。。。有的人就问了,那我怎么知道这个地址就是图片地址呢,我推荐大家使用firefox浏览器,可以分析标签以及各种网络包,如何使用我就不详细解释了,大家可以google的。
那我们怎么获取这个网页的源代码呢?别着急,我们使用python的自带的库urllib来编一段程序:
import urllib content=urllib.urlopen(url).read() #这里的url就是上面提到了网页地址通过这段代码,我们就得到网页的源码,但是怎么获取这一段图片的url呢?这里需要用到了技术就是正则表达式。
先贴代码:
def parseTarget(url): content=urllib.urlopen(url).read() <strong>pattern = r'src="(.*?\.jpg)" title'</strong> imglist = re.findall(pattern,content) return imglist这段代码的作用就是先获取网页url所对应的网页源码,然后通过正则分析获得图片的地址,最后将所有的图片url地址返回,这是一个列表,里面存放着当前页面的所有图片url地址。
大家看这个地址 http://www.meizitu.com/a/1.html ,后面的1就是代表当前为第一个页面,1可以改为2,2可以改为3,等等,我大概爬到500,于是就有了下面的一段代码:
urls = [] for i in range(1,500): http_url = "http://www.meizitu.com/a/%s" % str(i)+".html" try: urls.extend(parseTarget(http_url)) except: break
得到了我们所需要的url,那怎么将图片下载呢?我们需要用到urllib.urlretrieve()这个函数,如下所示:
def downloadURL(urls): """ urls: 需要下载的url列表 dirpath: 下载的本地路径 """ i = 0 for url in urls: if len(url)>0: urllib.urlretrieve(url,'%s.jpg' % i) i += 1传入的参数为存有图片url地址的列表,然后通过循环将所有的url解析出来,调用urlretrieve()函数来将图片存储。
到此,整个爬虫过程介绍结束。
整个代码如下:
<span style="font-size:14px;">import urllib import re def downloadURL(urls): """ urls: 需要下载的url列表 dirpath: 下载的本地路径 """ i = 0 for url in urls: if len(url)>0: #print "current process id is ",os.getpid() urllib.urlretrieve(url,'%s.jpg' % i) i += 1 def parseTarget(url): content=urllib.urlopen(url).read() #pattern = r'data-original="(.*?\.jpg)" src' pattern = r'src="(.*?\.jpg)" title' imglist = re.findall(pattern,content) return imglist #html = "http://www.meizitu.com/a/1.html" #print parseTarget(html) urls = [] for i in range(1,500): http_url = "http://www.meizitu.com/a/%s" % str(i)+".html" try: urls.extend(parseTarget(http_url)) except: break downloadURL(urls) print 'ok'</span>
这个实战例子是非常简单的,只是简单的介绍一下爬虫技术,真正的爬虫技术是非常nb的,为什么呢,需要用到的技术有线程,关系型数据库,非关系型数据库,等等,我也会慢慢的添加线程技术进去,提高效率。另外,我的github为点此链接,最近正在做google开源框架tensorflow的练习,都会提交到github上,最后总结一句话:
不忘初心,方得始终