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 14 Python
Python中使用asyncio 封装文件读写
Sep 11 Python
Python中装饰器高级用法详解
Dec 25 Python
Python列表生成式与生成器操作示例
Aug 01 Python
Django管理员账号和密码忘记的完美解决方法
Dec 06 Python
浅析使用Python搭建http服务器
Oct 27 Python
python 二维矩阵转三维矩阵示例
Nov 30 Python
解决pyqt5异常退出无提示信息的问题
Apr 08 Python
django orm模块中的 is_delete用法
May 20 Python
opencv之颜色过滤只留下图片中的红色区域操作
Jun 05 Python
Python logging日志库空间不足问题解决
Sep 14 Python
python简单验证码识别的实现过程
Jun 20 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
修改Zend引擎实现PHP源码加密的原理及实践
2008/04/14 PHP
php输出表格的实现代码(修正版)
2010/12/29 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
php通过curl模拟登陆DZ论坛
2015/05/11 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
js键盘事件的keyCode
2014/07/29 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
非常棒的jQuery图片轮播效果
2016/04/17 Javascript
浅谈js原生拖放
2016/11/21 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
JavaScript函数表达式详解及实例
2017/05/05 Javascript
JS实现百度网盘任意文件强制下载功能
2018/08/31 Javascript
vue favicon设置以及动态修改favicon的方法
2018/12/21 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
[01:04:05]VG vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[45:06]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第二场 11.28
2020/12/02 DOTA
[01:07:57]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第二场 1月19日
2021/03/11 DOTA
python实现斐波那契递归函数的方法
2014/09/08 Python
Python常用模块介绍
2014/11/21 Python
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
Python饼状图的绘制实例
2019/01/15 Python
python解析命令行参数的三种方法详解
2019/11/29 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
详解使用HTML5的classList属性操作CSS类
2017/10/13 HTML / CSS
计算机科学与技术应届生求职信
2013/11/07 职场文书
一年级班主任感言
2014/03/08 职场文书
环保倡议书100字
2014/05/15 职场文书
国土资源局开展党的群众路线教育实践活动整改措施
2014/09/26 职场文书
伏羲庙导游词
2015/02/09 职场文书
如何写一份具有法律效力的借款协议书?
2019/07/02 职场文书
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript