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当中的数据类型和变量
Apr 25 Python
python基于xmlrpc实现二进制文件传输的方法
Jun 02 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
Mar 19 Python
python 限制函数调用次数的实例讲解
Apr 21 Python
python使用udp实现聊天器功能
Dec 10 Python
Python Pandas 箱线图的实现
Jul 23 Python
python实现回旋矩阵方式(旋转矩阵)
Dec 04 Python
tensorflow 实现打印pb模型的所有节点
Jan 23 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
Jul 28 Python
Django web自定义通用权限控制实现方法
Nov 24 Python
python解决12306登录验证码的实现
Apr 18 Python
Jupyter notebook 更改文件打开的默认路径操作
May 21 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
php中防止伪造跨站请求的小招式
2011/09/02 PHP
PHP转盘抽奖接口实例
2015/02/09 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
2018/06/11 PHP
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
JS实现切换标签页效果实例代码
2013/11/01 Javascript
jQuery+Ajax实现无刷新分页
2015/10/30 Javascript
vuex实现简易计数器
2016/10/27 Javascript
微信小程序 配置文件详细介绍
2016/12/14 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
2017/01/19 Javascript
详谈$.data()的用法和作用
2017/02/13 Javascript
简单介绍react redux的中间件的使用
2018/04/06 Javascript
webpack4的迁移的使用方法
2018/05/25 Javascript
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
JS实现排行榜文字向上滚动轮播效果
2019/11/26 Javascript
详解使用mocha对webpack打包的项目进行"冒烟测试"的大致流程
2020/04/27 Javascript
python flask实现分页效果
2017/06/27 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
2018/02/10 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
2019/07/03 Python
py-charm延长试用期限实例
2019/12/22 Python
Python 列表的清空方式
2020/01/13 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
2020/06/02 Python
Django视图、传参和forms验证操作
2020/07/15 Python
python关于倒排列的知识点总结
2020/10/13 Python
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
财务出纳岗位职责
2014/02/03 职场文书
护士毕业自我鉴定
2014/02/07 职场文书
广场舞大赛策划方案
2014/05/31 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
出纳试用期工作总结2015
2015/05/28 职场文书
Python 文本滚动播放器的实现代码
2021/04/25 Python