上篇博文讲解了关于爬取糗事百科上面的段子的例子程序,这篇博文,主要的目的就是爬取任何不用登陆的网站上的图片。还是以糗事百科为例。
实现代码如下:
#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