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中使用swapCase()方法转换大小写的教程
May 20 Python
python实现机械分词之逆向最大匹配算法代码示例
Dec 13 Python
python验证码识别教程之利用滴水算法分割图片
Jun 05 Python
python机器学习之KNN分类算法
Aug 29 Python
python查看模块安装位置的方法
Oct 16 Python
python 划分数据集为训练集和测试集的方法
Dec 11 Python
Python语言进阶知识点总结
May 28 Python
在pycharm中显示python画的图方法
Aug 31 Python
如何利用python给图片添加半透明水印
Sep 06 Python
python使用HTMLTestRunner导出饼图分析报告的方法
Dec 30 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
Apr 09 Python
Python加密技术之RSA加密解密的实现
Apr 08 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/10/23 PHP
一组PHP加密解密函数分享
2014/06/05 PHP
ecshop实现smtp发送邮件
2015/02/03 PHP
PHP导入导出Excel代码
2015/07/07 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
一页面多XMLHttpRequest对象
2007/01/22 Javascript
js 分页全选或反选标识实现代码
2011/08/09 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
node.js中的http.response.writeHead方法使用说明
2014/12/14 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
JS重载实现方法分析
2016/12/16 Javascript
基于JavaScript实现焦点图轮播效果
2017/03/27 Javascript
bootstrap日期控件问题(双日期、清空等问题解决)
2017/04/19 Javascript
Angular如何引入第三方库的方法详解
2017/07/13 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
node.js基础知识汇总
2020/08/25 Javascript
python操作字典类型的常用方法(推荐)
2016/05/16 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
在Python中给Nan值更改为0的方法
2018/10/30 Python
Python 获取div标签中的文字实例
2018/12/20 Python
Python用Try语句捕获异常的实例方法
2019/06/26 Python
python3利用Axes3D库画3D模型图
2020/03/25 Python
python异步Web框架sanic的实现
2020/04/27 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
2013/04/28 面试题
总裁办公室主任职责
2014/01/02 职场文书
销售总监岗位职责
2014/01/04 职场文书
学校岗位设置方案
2014/01/16 职场文书
思想品德课教学反思
2014/02/10 职场文书
食品销售计划书
2014/04/26 职场文书
幼儿园教研工作总结2015
2015/05/12 职场文书
朋友离别感言
2015/08/04 职场文书
Redis Lua脚本实现ip限流示例
2022/07/15 Redis