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之模拟鼠标键盘动作具体实现
Dec 30 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
Jul 25 Python
Python从文件中读取数据的方法讲解
Feb 14 Python
Laravel+Dingo/Api 自定义响应的实现
Feb 17 Python
Django使用AJAX调用自己写的API接口的方法
Mar 06 Python
django url到views参数传递的实例
Jul 19 Python
Python编写带选项的命令行程序方法
Aug 13 Python
对Python中一维向量和一维向量转置相乘的方法详解
Aug 26 Python
pytorch ImageFolder的覆写实例
Feb 20 Python
Python单例模式的四种创建方式实例解析
Mar 04 Python
利用python实现平稳时间序列的建模方式
Jun 03 Python
Manjaro、pip、conda更换国内源的方法
Nov 17 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计算几分钟前、几小时前、几天前的几个函数、类分享
2014/04/09 PHP
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
2010/04/25 Javascript
jquery实现居中弹出层代码
2010/08/25 Javascript
Google 静态地图API实现代码
2010/11/19 Javascript
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
JQuery设置和去除disabled属性的5种方法总结
2013/05/16 Javascript
Javascript 6里的4个新语法
2016/08/25 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
详解支持Angular 2的表格控件
2017/01/19 Javascript
JS实现的数字格式化功能示例
2017/02/10 Javascript
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
vue路由组件按需加载的几种方法小结
2018/07/12 Javascript
默认浏览器设置及vue自动打开页面的方法
2018/09/21 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
keep-alive不能缓存多层级路由菜单问题解决
2020/03/10 Javascript
小程序实现tab标签页
2020/11/16 Javascript
python基础教程之常用运算符
2014/08/29 Python
十条建议帮你提高Python编程效率
2016/02/16 Python
Python Django使用forms来实现评论功能
2016/08/17 Python
keras tensorflow 实现在python下多进程运行
2020/02/06 Python
python实现简单的五子棋游戏
2020/09/01 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
伦敦剧院门票:From The Box Office
2018/06/30 全球购物
DERMAdoctor官网:美国著名皮肤护理品牌
2019/07/06 全球购物
Internet体系结构
2014/12/21 面试题
电气工程自动化求职信
2014/03/14 职场文书
物流管理专业求职信
2014/05/29 职场文书
物业总经理助理岗位职责
2014/06/29 职场文书
numpy数据类型dtype转换实现
2021/04/24 Python
MySQL 时间类型的选择
2021/06/05 MySQL
Oracle创建只读账号的详细步骤
2021/06/07 Oracle
nginx结合openssl实现https的方法
2021/07/25 Servers