python 爬虫 实战 抓取妹子图中图

python 爬虫 实战 抓取妹子图中的图

    学习python有一段时间了,一直找不到实战项目,于是今天就将昨天的爬虫技术分享出来,一是让更多的朋友能够学习爬虫,其实爬虫技术很简单,但深入进去很难,二是为了以后需要爬资源直接来参考这篇博客即可,不多说了,直接上教程,别着急,一步一步来。今天就从妹子图片开始抓起。

1.获取想要抓的网页。

    我使用的为妹子图这个网页,里面有很多的妹子。初学者不知拿到这个网页干嘛,我们首先获取网页源代码,也就是各种html标签啊,如图:python 爬虫 实战 抓取妹子图中图_第1张图片

    图中红色标记的就是图片的url链接。这。。。有的人就问了,那我怎么知道这个地址就是图片地址呢,我推荐大家使用firefox浏览器,可以分析标签以及各种网络包,如何使用我就不详细解释了,大家可以google的。

    那我们怎么获取这个网页的源代码呢?别着急,我们使用python的自带的库urllib来编一段程序:

import urllib
content=urllib.urlopen(url).read() #这里的url就是上面提到了网页地址
通过这段代码,我们就得到网页的源码,但是怎么获取这一段图片的url呢?这里需要用到了技术就是正则表达式。

2.获取网页中的所有图片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地址。

3.获取所有的页面的图片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

这是将500个页面的所有图片url放在urls这个列表里。

4.下载图片

得到了我们所需要的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>

5.总结

这个实战例子是非常简单的,只是简单的介绍一下爬虫技术,真正的爬虫技术是非常nb的,为什么呢,需要用到的技术有线程,关系型数据库,非关系型数据库,等等,我也会慢慢的添加线程技术进去,提高效率。另外,我的github为点此链接,最近正在做google开源框架tensorflow的练习,都会提交到github上,最后总结一句话:

 不忘初心,方得始终



你可能感兴趣的:(爬虫,python)