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进阶教程之循环对象
Aug 30 Python
Python和GO语言实现的消息摘要算法示例
Mar 10 Python
详解Python实现按任意键继续/退出的功能
Aug 19 Python
python实现下载pop3邮件保存到本地
Jun 19 Python
使用pytorch进行图像的顺序读取方法
Jul 27 Python
python安装pil库方法及代码
Jun 25 Python
python匿名函数lambda原理及实例解析
Feb 07 Python
Python发送邮件实现基础解析
Aug 14 Python
Python如何识别银行卡卡号?
Jun 10 Python
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
Jun 11 Python
python字符串拼接.join()和拆分.split()详解
Nov 23 Python
分享python函数常见关键字
Apr 26 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变量引用的面试题
2010/08/08 PHP
php程序内部post数据的方法
2015/03/31 PHP
PHP中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
深入理解PHP中的count函数
2016/05/31 PHP
php中钩子(hook)的原理与简单应用demo示例
2019/09/03 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
2020/12/10 PHP
JavaScript基本对象
2007/01/11 Javascript
js 模式窗口(模式对话框和非模式对话框)的使用介绍
2014/07/17 Javascript
jQuery学习笔记之2个小技巧
2015/01/19 Javascript
javascript实现限制上传文件大小
2015/02/06 Javascript
Jquery实现弹性滑块滑动选择数值插件
2015/08/08 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
2016/10/10 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
详解Vue2 无限级分类(添加,删除,修改)
2017/03/07 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
Vue数据双向绑定原理及简单实现方法
2018/05/18 Javascript
angular中如何绑定iframe中src的方法
2019/02/01 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
0基础学习前端开发的一些建议
2020/07/14 Javascript
解决基于 keep-alive 的后台多级路由缓存问题
2020/12/23 Javascript
python实现探测socket和web服务示例
2014/03/28 Python
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
Python rstrip()方法实例详解
2018/11/11 Python
python画图--输出指定像素点的颜色值方法
2019/07/03 Python
python实现桌面气泡提示功能
2019/07/29 Python
Python PO设计模式的具体使用
2019/08/16 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
大学生应聘推荐信范文
2013/11/19 职场文书
校园文化艺术节宣传标语
2014/10/09 职场文书
创业计划书之烤红薯
2019/09/26 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android
PC版《死亡搁浅导剪版》现已发售 展开全新的探险
2022/04/03 其他游戏