当前所在位置: 首页 > 域名平台

正则表达式如何解析网页?你是如何学会正则表达式的?

2021-10-11 本站作者 【 字体:

如果你不觉得正则表达式很难读写的话,要么你是一个天才,要么,你不是地球人。正则表达式的语法很令人头疼,即使对经常使用它的人来说也是如此,包括我。

Python爬取网页信息时,经常使用的正则表达式及方法。

因为正则表达式也是我写Python爬虫的一大利器。再大再乱的内容,哪怕是大海捞针,只要告诉我这个针的样子我都能从茫茫大海中捞出来。

至于我是怎么学会的,当然是从一开始的刷题,到后面不断的实战练习练习练习!

代码作用如下:

1.获取<tr></tr>标签之间内容

我要做的就是给你们推荐几个学习正则表达式的利器和网站,剩下的还是靠你们自己去完成。

2.获取<a href..></a >超链接之间内容

3.获取URL最后一个参数命名图片或传递参数

4.爬取网页中所有URL链接

5.爬取网页标题title两种方法


第一:如果你还不知道正则表达式是什么,但是却要使用它的话。从这里可以快速入门。

6.定位table位置并爬取属性-属性值

7.过滤<span></span>等标签

  • 正则表达式30分钟入门教程(http://www.cnblogs.com/hustskyking/archive/2013/06/04/RegExp.html)正则表达式如何解析网页?你是如何学会正则表达式的?(图1)
  • 正则表达式进阶(http://div.io/topic/764?page=1


第二:正则表达式的相关语法,这是一张正则的语法图,可用于快速查询。不用熟记,要用的时候会查看的懂就行了。

正则表达式如何解析网页?你是如何学会正则表达式的?(图2)

8.获取<script></script>等标签内容

1). 获取<tr></tr>标签之间内容

开始标签如:<tr>、<th>、<td>、<a>、<table>、<div>...

后缀标签如:</tr>、</th>、</td>、</a >、</table>、</div>...


第三:当然,用工具写更快捷。由于正则表达式难于读写,容易出错,所以我们最好一种工具在线对正则表达式进行测试。

核心代码:

1.Regexr

https://regexr.com/)

res_tr = r'<tr>(.*?)</tr>'

language = '''<tr><th>床前明月光</th><td>忧思独伤心</td></tr><tr>'''

正则表达式如何解析网页?你是如何学会正则表达式的?(图3)


# 正则表达式获取<tr></tr>之间内容

2.Regx101

(https://regex101.com/

2). 获取超链接<a href= ></a >之间内容

在使用正则表达式时,需要分析网页链接,获取URL或网页内容。核心代码如下:

  • 支持多种语言, prec,php,javascript,python,golang
  • 界面美观大方
  • 支持错误提示,实时匹配

正则表达式如何解析网页?你是如何学会正则表达式的?(图4)

res = r'<a .*?>(.*?)</a >'

mm = re.findall(res, content, re.S|re.M)


urls=re.findall(r"<a.*?href=.*?<\/a>", content, re.I|re.S|re.M)

3. Regulex

  

(https://jex.im/regulex/)

正则表达式如何解析网页?你是如何学会正则表达式的?(图5)

<td>

<a href="https://www.baidu.com/articles/zj.html" title="湖南省">湖南江省主题介绍</a >

  • 实时根据正则表达式绘图
  • 页面加载速度快


<a href="https://www.baidu.com//articles/gz.html" title="湖南省">湖南省主题介绍</a >

第四:刷题,HackerRank上有一系列正则表达式的题。不用做很多,只要做几个。做完以后应该就已经掌握正则表达式的用法了。

(https://www.hackerrank.com/domains/regex/re-introduction)

</td>

正则表达式如何解析网页?你是如何学会正则表达式的?(图6)


还是我说的,一步一步来,不要想一步登天。程序员本来就是一个需要不断学习锻炼的职业,如果对基本概念都没有了解就开始刷题,写代码的的话,只会让自己的代码更复杂。怎么才算扎实,比如:从一个很典型的例子,去除字符串首尾的空白,尝试用5-10种不同的正则去测试,并思考哪些方式的效率最高,为什么?记住每个程序员都是这样一步步的实现一遍又一遍才能真正掌握正则的,包括那些大牛亦是如此。

'''

  

# 获取<a href></a >之间的内容

res = r'<a .*?>(.*?)</a >'

# 获取所有<a href></a >链接所有内容

urls = re.findall(r"a.*?href=.*?<\/a>",content,re.I|re.S|re.M)

# 获取<a href></a >中的URL

res_url = r"(?<=href=").+?(?=")|(?<=href=\').+?(?=\')"

l

3). 获取URL最后一个参数命名图片或传递参数

使用Python爬取图片过程中,会遇到图片对应的URL最后一个字段通常用于命名图片

通过该URL的"/"后面的参数命名图片

urls = 'http://i1.hoopchina.com.cn/blogfile/201411/11/BbsImg141568417848931_640*640.jpg'

value = urls.split("/")[-1]

url = 'http://localhost/test.py?a=hello&b=world'

values = url.split('?')[-1]

p

4). 爬取网页中所有URL链接

从固有网页中爬取URL链接,再进行下一步的循环爬取或URL抓取.

urls = re.findall(r'<a.*?href=.*?<\/a>',content,re.I)

link_list = re.findall(r"(?=href=".+?(?=")|(?<=href=\').+?(?=\')",content)

5). 爬取网页标题title两种方法

获取网页标题也是一种常见的爬虫,常位于<html><head><title>标题</title></head></html>中

title_pat = r'(?<=<title>).*?(?=</title>)'

# 方法二

title = re.findall(r'<title>(.*?)</title>',content)

6). 定位table位置并爬取属性-属性值

res = r'<td>(.*?)</td><td>(.*?)</td>'

# 如果<td id="">包含该属性则正则表达式为r'<td id=.*?>(.*?)</td>';同样如果不一定是id属性开头,则可以使用正则表达式r'<td .*?>(.*?)</td>'

7). 过滤<span></span>等标签

获取值过程中,通常会存在<span>、

、<a href>等标签

核心代码:

res_value = r'<span .*?>(.*?)</span>'

# 获取table中tr值

res_tr = r'<tr>(.*?)</tr>'

m_tr = re.findall(res_tr,language,re.S|re.M)

# 获取表格第一列th 属性

for line in m_tr:

res_th = r'<th>(.*?)</th>'

m_th = re.findall(res_th,line,re.S|re.M)

for mm in m_th:

if "href" in mm: # 如果获取加粗的th中含超链接则处理

restr = r'<a href=.*?(.*?)<\a>'

8). 获取<script></script>等标签内容

在获取游讯网图库中,图集对应的原图它是存储在script中,其中获取原图-original即可

通过正则表达式下载URL:

阅读全文
id_1广告位-300*300
相关推荐

一文弄懂vlan、三层交换机、网关、DNS、子网掩码、MAC地址抖音收购支付牌照,字节跳动储备新域名,官方称为防恶意侵权

一文弄懂vlan、三层交换机、网关、DNS、子网掩码、MAC地址抖音收购支付牌照,字节跳动储备新域名,官方称为防恶意侵权
11月30日,有消息称,字节跳动常用来存储自家域名的注册商“易名”旗下新增一个名...

中文域名是什么意思域名是什么意思啊

中文域名是什么意思域名是什么意思啊
域名,简称域名、网域,是由一串用点分隔的名字组成的Internet上某一台计算机...

阿里云服务器购买教程购买云服务器送的免费域名是已经备案了吗

阿里云服务器购买教程购买云服务器送的免费域名是已经备案了吗
1.购买云服务器送的免费域名,如果是测试的临时域名,是备案了的。2.如果是自己买...

互联网经营许可证怎么办?互联网药品交易服务的资格证书怎么办理?

互联网经营许可证怎么办?互联网药品交易服务的资格证书怎么办理?
首先感谢悟空问答的邀请,最近比较忙,终于抽出时间来认真回答几个问题了,也希望能帮...

域名注册申请需要准备哪些材料?gov.cn域名还能申请吗?

域名注册申请需要准备哪些材料?gov.cn域名还能申请吗?
 gov.cn域名仅供政府机构注册,个人与企业不能注册。如需要注册.gov 必须...

frp通过指定域名访问部署于内网的 web 服务SAE 场景下,应用流量的负载均衡及路由策略配置实践

frp通过指定域名访问部署于内网的 web 服务SAE 场景下,应用流量的负载均衡及路由策略配置实践
流量管理从面向实例到面向应用在 Serverless 场景下,由于弹性能力以及底...

搭建属于自己的内网穿透SpringCloud极简入门|zuul 动态转发url困扰很久功能终于实现了6

搭建属于自己的内网穿透SpringCloud极简入门|zuul 动态转发url困扰很久功能终于实现了6
前言  大家好我是不一样的科技宅,每天进步一点点,体验不一样的生活。今天给大家带...

DNS解析域名:发现域名和IP不一致,访问了该域名会如何?github项目:tcp穿透内网passbytcp

DNS解析域名:发现域名和IP不一致,访问了该域名会如何?github项目:tcp穿透内网passbytcp
目的网上搜索了不少tcp内网穿透的代码,功能全的大多是go版本,无奈对go不感冒...

哪家域名支持url转发功能如何判断域名URL转发是否正常?

哪家域名支持url转发功能如何判断域名URL转发是否正常?
展开全部看能否访问了。URL转发的缺点: 1)经过我们实际测试,速度上要比...

基于JavaFx和SpringBoot搭建的实用小工具集合Shopify后台撰写、隐藏、删除博客文章操作教程

基于JavaFx和SpringBoot搭建的实用小工具集合Shopify后台撰写、隐藏、删除博客文章操作教程
在shopify店铺中创建博客后,您便可以开始撰写博客文章。您的文章可以包含文字...