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 getopt 参数处理小示例
Jun 09 Python
Python中线程编程之threading模块的使用详解
Jun 23 Python
python正则表达式之作业计算器
Mar 18 Python
Python信息抽取之乱码解决办法
Jun 29 Python
python 读取DICOM头文件的实例
May 07 Python
python实现可视化动态CPU性能监控
Jun 21 Python
numpy 计算两个数组重复程度的方法
Nov 07 Python
Python编程深度学习计算库之numpy
Dec 28 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
Jun 25 Python
Python中PyQt5/PySide2的按钮控件使用实例
Aug 17 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
Feb 28 Python
python针对Oracle常见查询操作实例分析
Apr 30 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
CI框架中数据库操作函数$this->db->where()相关用法总结
2016/05/17 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
Jquery的hover方法让鼠标经过li时背景变色
2013/09/06 Javascript
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
纯javascript响应式树形菜单效果
2015/11/10 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
2016/05/09 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
AngularJS ng-repeat数组有重复值的解决方法
2016/10/23 Javascript
AngularJS实现自定义指令及指令配置项的方法
2017/11/20 Javascript
解决angular2 获取到的数据无法实时更新的问题
2018/08/31 Javascript
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
python获取指定时间差的时间实例详解
2017/04/11 Python
Python使用itertools模块实现排列组合功能示例
2018/07/02 Python
python批量下载网站马拉松照片的完整步骤
2018/12/05 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
python3 pillow模块实现简单验证码
2019/10/31 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
Python格式化输出--%s,%d,%f的代码解析
2020/04/29 Python
Python pathlib模块使用方法及实例解析
2020/10/05 Python
Pycharm常用快捷键总结及配置方法
2020/11/14 Python
python绘制汉诺塔
2021/03/01 Python
CSS3 background-image颜色渐变的实现代码
2018/09/13 HTML / CSS
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
前端实现打印图像功能
2019/08/27 HTML / CSS
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
泰国办公用品购物网站:OfficeMate
2018/02/04 全球购物
保险公司早会主持词
2014/03/22 职场文书
企业形象策划方案
2014/05/29 职场文书
工商局副局长个人对照检查材料
2014/09/25 职场文书
2015年财政局工作总结
2015/05/21 职场文书
门卫管理制度范本
2015/08/05 职场文书
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle