正则表达式在python中的应用_(十)Python 正则表达式的应用

三、正则表达式的应用:简单爬虫

网络爬虫是指按照一定规则自动抓取网络信息的程序或脚本。运用Python的内置urllib库结合正则表达式应用,可简单实现对静态网页信息的自动下载。下面以自动抓取静态网页面:http://www.lenovo.com.cn中的JPG图片素材为例进行说明。

用Safari浏览器访问该主页,右击选择下载文件链接,其中的图片素材是以:“_src="http://...//...//.../.jpg"”形式实现连接。下载好的文件链接我用Sublime打开的,内置的urllib库中的urllib。request.urlopen(url)函数可以实现对静态网页的访问,读取网页的html源码。根据网页所用的编码形式(如图上,本例为UTF-8)用decode()解码(本例为decode('UTF-8'))。

为实现自动爬取素材,根据源码中呈现的素材链接形式,形成素材链接的正则表达式

reg=r'_src=".*?\.jpg'

其中'.*?'为非贪婪匹配的任意网址,只要以'_src='"开头、以'.jpg'"结束,就可以匹配。用imgre=re.compile(reg)生成正则表达式匹配对象,imgre=findall(html)可获取所有匹配的字符串的列表,调试的时候可以先用 print() 函数输出该列表进行尝试。用字符串切片(本例为url[6:-1])可获取JPG图片素材的完整链接。

用循环语句逐个通过 urllib.request.urlretrieve()函数下载图片素材,并自动编号保存在指定位置,如下:

爬取图片素材结果

import urllib.request

import re

def getHtml(url):

page = urllib.request.urlopen(url)

html = page.read()

return html

def getImg(html):

reg = 'src="(.+?\.jpg)" alt='

imgre = re.compile(reg)

# 将html编码转换成UTF-8,不然会出错

html = html.decode('utf-8')

imglist = re.findall(imgre, html)

x = 0

for imgurl in imglist:

urllib.request.urlretrieve(imgurl, '/Users/wangchong/Desktop/newImage/%s.jpg'%x)

x += 1

return imglist

html = getHtml("http://photo.sina.com.cn")

# https://www.lenovo.com.cn

# http://photo.sina.com.cn

print(getImg(html))

需要说明的是,这里所介绍的简单爬虫只是利用正则表达式的一个简单的应用,只适用于直接静态网页。而对于转移 URL的网页、地址中带有中文的网页、检测浏览器类型的网页和网页动态等复杂爬取需求,要进一步深入应用 Python的urllib等库方可实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值