Python使用正则表达式获取网页中所需要的信息


Posted in Python onJanuary 29, 2018

使用正则表达式的几个步骤:

1、用import re 导入正则表达式模块;

2、用re.compile()函数创建一个Regex对象;

3、用Regex对象的search()或findall()方法,传入想要查找的字符串,返回一个Match对象;

4、调用Match对象的group()方法,返回匹配到的字符串。

在交互式环境中简单尝试一下,查询字符串中的固话:

import re
 text = '小明家的固话是0755-123456,而小丽家的固话时0789-654321,小王家的电话是123456789'#用于检测的字符串
 ph_re = re.compile(r'\d{4}?-\d+') #创建Regex对象,匹配几种电话的方式,\d表示0-9的数字,{4}表示前面的匹配4次,?表示可选,+表示出现1次或多次。
 matchs1 = ph_re.findall(text) #findall()表示查找所有匹配项,返回一个字符串
 matchs2 = ph_re.search(text)#search(),查找第一次匹配的文本,返回一个对象。
 print(matchs1)
 print(matchs2)
 matchs2.group()

返回的结果,是这样的:

findall()方法返回的是一个字符串,可以直接打印出来。而search()方法返回的是一个对象,所以打印出来的是是如图的第二行。

调用group(),对象返回匹配的结果。

最后,小王的电话之所以没有匹配到,是因为'-'没有进行可选即在其后加上‘?'。

下面进行一个小的实验,获取某个网页中所有的http/https网址,并计算有多少个。

首先是获取HTML文件。这里要用到requests模块。

# -*- coding: utf-8 -*-
 import requests
 import re
 def get_html(url):
  res = requests.get(url)
  res.encoding = 'utf-8'
  html = res.text
  return html

这里get_html函数返回的,其实就类似上面例子中的text,用来匹配的文本。

然后,创建正则表达式:

def get_addr(response):
  addr_regex = re.compile(r'''(
   (http://|https://)?#http/https
   (www)?
   (\.[a-z1-9A-Z]+)
   (\.com|\.cn)
   )''',re.VERBOSE)#匹配网址,
  matchs = []
  for groups in addr_regex.findall(response):
   matchs.append(groups[0])
  if len(matchs) == 0:
   print('没有网址')  
  return matchs

这里向re.compile(),传入变量re.VERBOSE,作为第二个参数,可以将正则表达式放在多行,并进行注释,如上。

返回一个matchs列表对象。

再来个启动函数。

def start():
  url = 'http://news.163.com/18/0127/18/D966K4CO0001899N.html'
  a = get_html(url)
  b = get_addr(a)
  print('\n'.join(b))
  print(str(len(b)))
  print('ok')
if __name__ == '__main__':
  start()

这里传入的url是我随意找的一个新闻链接。

然后调用get_html()get_addr(),就得到了想要的东西。str(len(b)),为统计的数量。

测试的结果是类似这样的:

这里似乎获取一些URL,没什么卵用。。。但是,如果结合前面的查询新闻列表的方式,获取批量url,

而创建的正则是xxx.jpg,然后调用os模块,os.mkdir(folder)、os.chdir(folder),将获取到的匹配结果写入文件,放入某个文件夹。

那么就可以实现,从某些网站上批量获取jpg图片,然后存入某个文件夹的爬虫功能。实测,可行!

总结

以上所述是小编给大家介绍的Python使用正则获取网页中所需要的信息,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python list中append()与extend()用法分享
Mar 24 Python
浅析Python中的join()方法的使用
May 19 Python
python定时检查某个进程是否已经关闭的方法
May 20 Python
详解Django中Request对象的相关用法
Jul 17 Python
深入理解 Python 中的多线程 新手必看
Nov 20 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
Dec 15 Python
Python3匿名函数用法示例
Jul 25 Python
Python人脸识别第三方库face_recognition接口说明文档
May 03 Python
tensorflow常用函数API介绍
Apr 19 Python
Python colormap库的安装和使用详情
Oct 06 Python
python 下划线的多种应用场景总结
May 12 Python
详解Python flask的前后端交互
Mar 31 Python
python实现K最近邻算法
Jan 29 #Python
python简单实现操作Mysql数据库
Jan 29 #Python
Django框架教程之正则表达式URL误区详解
Jan 28 #Python
python通过百度地图API获取某地址的经纬度详解
Jan 28 #Python
python中的随机函数小结
Jan 27 #Python
python中的随机函数random的用法示例
Jan 27 #Python
Python闭包之返回函数的函数用法示例
Jan 27 #Python
You might like
NOD32 v2.70.32 简体中文封装版 提供下载了
2007/02/27 PHP
php自动跳转中英文页面
2008/07/29 PHP
smarty模板中拼接字符串的方法
2014/02/14 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
php基础教程
2015/08/26 PHP
php支持断点续传、分块下载的类
2016/05/02 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
JS循环遍历JSON数据的方法
2014/07/08 Javascript
JS仿iGoogle自定义首页模块拖拽特效的方法
2015/02/13 Javascript
JavaScript实现复制文章自动添加版权
2016/08/02 Javascript
浅析vue数据绑定
2017/01/17 Javascript
Node.js连接mongodb实例代码
2017/06/06 Javascript
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
vue和webpack项目构建过程常用的npm命令详解
2018/06/15 Javascript
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
2018/08/24 Javascript
javascript实现fetch请求返回的统一拦截
2019/12/22 Javascript
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
python批量生成本地ip地址的方法
2015/03/23 Python
python自动zip压缩目录的方法
2015/06/28 Python
利用python实现xml与数据库读取转换的方法
2017/06/17 Python
Python使用paramiko操作linux的方法讲解
2019/02/25 Python
python3 反射的四种基本方法解析
2019/08/26 Python
Python实现栈和队列的简单操作方法示例
2019/11/29 Python
Python使用type动态创建类操作示例
2020/02/29 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
CSS3 简写animation
2012/05/10 HTML / CSS
Gtech官方网站:地毯清洁器、吸尘器及园艺设备
2018/05/23 全球购物
质量工程师岗位职责
2013/11/16 职场文书
2014三年级班主任工作总结
2014/12/05 职场文书
500字作文之关于爸爸
2019/11/14 职场文书
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫