社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
学习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上,最后总结一句话:
不忘初心,方得始终
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!