《python爬虫实战》:爬取图片

《python爬虫实战》:爬取图片

上篇博文讲解了关于爬取糗事百科上面的段子的例子程序,这篇博文,主要的目的就是爬取任何不用登陆的网站上的图片。还是以糗事百科为例。

例子:爬取糗事百科上的图片

实现代码如下:

#encoding=utf-8
#功能:爬取糗事百科上面的图片
import urllib2
import urllib
import re
#raw_input是python的一个内置函数,通过读取控制台的输入与用户实现交互。
#input也可以读取控制台的输入与用户实现交互,但是input和raw_input由一定的差异,
#例如:raw_input将控制台上所有的输入均作为字符串(即使全是数字组合)来进行处理,而input对输入有一定的要求,如果输入的是字符串,则一定要用引号
#从控制台输入一个url

#定义一个函数,得到内容
def getContent(content):
    #利用正则来进行匹配
    pattern=re.compile(r'src="(.*?)" alt=')
    items=re.findall(pattern,content)
    count=0
    for item in items:
        count+=1#python中没有++运算
        urllib.urlretrieve(item,"%s.jpg"  % count)

url=raw_input("raw_input:")
try:
    user_agent="Moizlla/5.0 (Windows NT/6.1)"
    headers={"User-Agent":user_agent}#请求头
    request=urllib2.Request(url,headers=headers)
    response=urllib2.urlopen(request)
    content=response.read()
    getContent(content)#调用getContent函数进行匹配
except urllib2.URLError,e:
    if hasattr(e,"reason"):
        print e.reason

上面唯一的难点在于匹配图片的正则表达式,其它的代码都比较简单,相信有一点点爬虫基础都对这几行代码比较熟悉。

关于正则表达式时如何来的,我的经验就是如下:

第一步:找到你想爬图片的网页,并求浏览器打开,推荐用IE
第二步:按下键盘F12
第三步:在html代码中,图片是以什么样的格式出现在html代码中的。然后根据格式提取出正则表达式即可。

根据上面的三部曲,在糗事百科的网页上,图片在html代码中的格式如下:

根据此格式,提取出正则表达式如下:

r'src="(.*?)" alt='

这样,一个图片的正则表达式就完成了。

这里,分享一个经验,当我们学习别人的代码时,正则表达式,自己一定要根据自己想爬取的网页自己去提取,如果自己提取不了,也要根据自己的目的网页验证下,特别是当学习别人的代码提取相同的网页时不能成功时,越应该如此。

程序下载点击这里:https://github.com/wojiushimogui/get_tieba

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