在网上看到一个使用python爬虫的小程序,自己学习了一下,下面来看一下这个程序实现的过程:
目的:抓取网页上的图片。
步骤:1、拿到网页的源码
2、用正则表达式匹配出网页上图片的URL
3、把图片保存到电脑中
一、获取网页源码的程序为:
import urllib #urllib是python进行网络访问的基础模块
#比如获取贴吧上一网页源码
page = urllib.urlopen("http://tieba.baidu.com/p/3205263090")
#.urlopen()函数是打开一个URL,返回一个文件对象,然后可以进行类似文件对象的操作
html = page.read()
print html #这时候输出,就能显示出这个网页的源码
二、用正则表达式匹配图片URL
找出网页中图片的地址进行正则表达式匹配,可以理解为,网页中每个图片的地址都不一样,找出它们的规律,用一个正则表达式匹配它们。
在页面的图片上点击右键,点击“查看元素”,找到这个图片对应的源码。找到所有这些图片源码的规律,写出匹配它们的正则表达式,就这个例子而言,
正则表达式为reg=r'src="([.\S]*\.jpg)" pic_ext="jpeg"
这里需注意:正则表达式中小括号()是为了提取匹配的字符串。若没有加小括号,则提取出的URL就会包含src=.....pic_ext="jpeg",这不是图片的源码,
最后下载到本地就会出错。
符号(.)为通配符,\S为非空白字符,*为匹配前一个字符0次或无限次。
imagereg = re.compile(reg)
#re.compile()将正则表达式(以字符串形式书写的)转化为模式对象
imgurls = re.findall(imagereg, html)
#以列表的形式返回所有能匹配到的字符串。也就是说imguris是一个列表,里边包含了所有匹配到的字符串,每条字符串就是每个图片的源码。
三、保存图片
urllib.urlretrieve(url,"E:\手机\sd卡\%s.jpg" % “name”)
urllib.urlretrieve()方法是将URL定位到的html文件下载到本地,第一个参数是要下载的url,第二个参数是要保存的地址和文件名
四、 最后看一下整个程序
import urllib
import re
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html
html = getHtml('http://tieba.baidu.com/p/3205263090')
reg = r'src="([.\S]*\.jpg)" pic_ext="jpeg"'
imagereg = re.compile(reg)
imgurls = re.findall(imagereg, html)
x = 1
for imgurl in imgurls:
urllib.urlretrieve(imgurl, 'E:\手机\sd卡\%s.jpg' % x)
x +=1
运行看一下结果
最后说一下正则表达式的学习方法:个人认为正则表达式学习起来还是挺困难的,网上介绍正则表达式的内容一看就是一大堆,看着就头疼,所以最好的学习方法还是每次只学习一部分,特别是在项目中学习,查找满足特定任务需要的那部分内容,久而久之,就能熟练运用正则表达式了。