用正则表达式爬取数据,网络爬虫正则表达式

智能测试策略优化:平衡覆盖率、时间和资源 在软件开发过程中,测试是确保软件质量的关键环节。然而,测试工作往往面临着诸多挑战,其中如何在保证测试覆盖率的前提下,合理分配时间和资源是一个核心问题。本文章的目的在于探讨智能测试策略的优化方法,帮助软件测试团队在有限的时间和资源条件下,实现尽可能高的测试覆盖率。文章的范围涵盖了智能测试策略的核心概念、算法原理、数学模型、实际应用案例以及相关工具和资源等方面。本文将按照以下结构进行组织:首先介绍智能测试策略优化的背景和相关概念,包括核心术语和缩略词的定义; 阅读详情

大家好,给大家分享一下用正则表达式爬取数据,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!

来源于此为了方便自己查找,进行了简化与整理。

本文涉及内容如下:

  1. 获取< tr>< /tr>标签之间内容
  2. 获取< a href…>< /a>超链接之间内容
  3. 获取URL最后一个参数命名图片或传递参数
  4. 爬取网页中所有URL链接
  5. 爬取网页标题title两种方法
  6. 定位table位置并爬取属性-属性值
  7. 过滤< span>< /span>等标签
  8. 获取< >< />等标签内容
  9. 通过replace函数过滤< br />标签
  10. 过滤html标签

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

核心代码:

   s =  re.findall( r'<tr>(.*?)</tr>',language,re.S|re.M)

举个例子:

import re

doc = '''<tr><th>性別:</th><td>男</td></tr><tr>'''

string1 = re.findall(r'<tr>(.*?)</tr>', doc, re.S | re.M)
print(string1[0])

string2= re.findall(r'<td>(.*?)</td>', doc, re.S | re.M)
print(string2)#从这里可以看出返回的是一个列表
输出结果:
>>>
<th>性別:</th><td>男</td>
['男']
>>>
#  re.I: 忽略大小写
#  re.M: 多行模式,改变'^'和'$'的行为
#  re.S: 点任意匹配模式,改变'.'的行为

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

核心代码:

    url =  re.findall(r'<a .*?>(.*?)</a>', content, re.S|re.M)

举个例子:

import re

doc = '''
<td>
<a href="https://www.baidu.com/articles/zj.html" title="浙江省">浙江省主题介绍</a>
<a href="https://www.baidu.com//articles/gz.html" title="贵州省">贵州省主题介绍</a>
</td>
'''

# 获取<a href></a>之间的内容
print('获取链接文本内容:')
s1 = re.findall(r'<a .*?>(.*?)</a>', doc, re.I|re.S|re.M)
for i in s1:
    print(i)

# 获取所有<a href></a>链接所有内容
print('\n获取完整链接内容:')
s2 = re.findall(r"<a href=.*?</a>", doc, re.I|re.S|re.M)
for i in s2:
    print(i)

# 获取<a href></a>中的URL
print('\n获取链接中URL:')
s = r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')"
s3 = re.findall(r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')", doc, re.I|re.S|re.M)
for i in s3:
    print(i)
输出结果:
>>>
获取链接文本内容:
浙江省主题介绍
贵州省主题介绍

获取完整链接内容:
<a href="https://www.baidu.com/articles/zj.html" title="浙江省">浙江省主题介绍</a>
<a href="https://www.baidu.com//articles/gz.html" title="贵州省">贵州省主题介绍</a>

获取链接中URL:
https://www.baidu.com/articles/zj.html
https://www.baidu.com//articles/gz.html
>>>

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

举个例子:

url = "http://baidu.com.cn/file/2021/Img1415_00.jpg"
value = url.split('/')[-1]
print(value)
输出结果:
>>>
Img1415_00.jpg
>>>

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

举个例子:

import re
import urllib.request

url = "http://www.youkuaiyun.com/"
doc = urllib.request.urlopen(url).read().decode('utf-8')
urls = re.findall(r"<a.*?href=.*?</a>", doc, re.I)
for url in urls:
    print(url)

link_list = re.findall(r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')", doc)
for url in link_list:
    print(url)
输出结果:
>>>
<a href="https://live.youkuaiyun.com" target="_blank" data-report-click="{&quot;spm&quot;:&quot;1000.2115.3001.4124&quot;,&quot;dest&quot;:&quot;https://live.youkuaiyun.com&quot;,&quot;extra&quot;:&quot;{\&quot;fId\&quot;:558,\&quot;fName\&quot;:\&quot;floor-www-index\&quot;,\&quot;compName\&quot;:\&quot;www-interaction\&quot;,\&quot;compDataId\&quot;:\&quot;index-nav-www\&quot;,\&quot;fTitle\&quot;:\&quot;\&quot;,\&quot;pageId\&quot;:141}&quot;}" data-report-query="spm=1000.2115.3001.4124"><img src="https://img-home.csdnimg.cn/images/20210708022656.png" alt="直播"> <span>直播</span></a>
<a href="https://blink.youkuaiyun.com/" target="_blank" data-report-click="{&quot;spm&quot;:&quot;1000.2115.3001.4124&quot;,&quot;dest&quot;:&quot;https://blink.youkuaiyun.com/&quot;,&quot;extra&quot;:&quot;{\&quot;fId\&quot;:558,\&quot;fName\&quot;:\&quot;floor-www-index\&quot;,\&quot;compName\&quot;:\&quot;www-interaction\&quot;,\&quot;compDataId\&quot;:\&quot;index-nav-www\&quot;,\&quot;fTitle\&quot;:\&quot;\&quot;,\&quot;pageId\&quot;:141}&quot;}" data-report-query="spm=1000.2115.3001.4124"><img src="https://img-home.csdnimg.cn/images/20200629060547.png" alt="动态"> <span>动态</span></a>
…………
https://g.csdnimg.cn/static/logo/favicon32.ico
https://www.youkuaiyun.com
…………
>>>

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

举个例子:

import re
import urllib.request

url = "http://www.youkuaiyun.com/"
doc = urllib.request.urlopen(url).read().decode('utf-8')

print('方法一:')
ti = re.compile(r'(?<=<title>).*?(?=</title>)', re.M|re.S)
tit = re.search(ti, doc)
print(tit.group())
#group() :匹配正则表达式整体结果,同group(0)Python中Turtle画蝴蝶。
#group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分。
 
print('方法二:')
title = re.findall(r'<title>(.*?)</title>', doc)
print(title[0])
输出结果:
>>>
方法一:
优快云 - 专业开发者社区
方法二:
优快云 - 专业开发者社区
>>>

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

正则表达式可以通过find函数寻找指定table方法进行定位。

举个例子:

start = content.find(r'<table class="infobox vevent"') #起点记录查询位置  
end = content.find(r'</table>')#结束位置
print(doc[start:end])

标签内容中的属性值 td 可能存在其他属性,同时< td>< /td>之间的内容也需要处理。下面先讲解获取td值的例子:

import re

doc = '''<table>  
<tr>  
<td>序列号</td><td>DEIN3-39CD3-2093J3</td>  
<td>日期</td><td>2013年1月22日</td>  
<td>售价</td><td>392.70 元</td>  
<td>说明</td><td>仅限5用户使用</td>  
</tr>  
</table>
'''

s = r'<td>(.*?)</td><td>(.*?)</td>'
m = re.findall(s, doc, re.S | re.M)
for line in m:
    print(line[0],line[1])
输出结果:
>>>
序列号 DEIN3-39CD3-2093J3
日期 2013年1月22日
售价 392.70 元
说明 仅限5用户使用
>>>

如果为< td id=“”>,则正则表达式为r’< td id=.?>(.?)< /td>’
如果不是id属性开头,则正则表达式为r’<td .?>(.?)< /td>’


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

举个例子:

import re

doc = '''
<table class="infobox bordered vcard" style="width: 21em; font-size: 89%; text-align: left;" cellpadding="3">
<tr>
<th>異名:</th>
<td><span class="nickname">(字) 翔宇</span></td>
</tr>
<tr>
<th>籍貫:</th>
<td><a href="../articles/%E81.html" title="浙江省">浙江省</a><a href="../articles/%E7%BB%8D82.html" title="绍兴市">绍兴市</a></td>
</tr>
</table>
'''

# 获取table中tr值
str = re.findall(r'<tr>(.*?)</tr>', doc, re.S | re.M)
for line in str:
    # 获取表格第二列td 属性
    td = re.findall(r'<td>(.*?)</td>', line, re.S|re.M)
    for n in td:
        if "span" in n:  # 处理标签<span>
            value = re.findall(r'<span .*?>(.*?)</span>', n, re.S|re.M)
            for i in value:
                print(i)
输出结果:
>>>
(字) 翔宇
>>>

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

在获取图集对应的原图它是存储在中,其中获取原图-original即可,缩略图-thumb,大图-big,通过正则表达式下载URL:

import re
import urllib.request
import os

content = '''
<>var images = [  
{ "big":"http://i-2.yxdown.com/2015/3/18/KDkwMHgp/6381cce.jpg",  
  "thumb":"http://i-2.yxdown.com/2015/3/18/KHgxMjAp/6381ccce.jpg",  
  "original":"http://i-2.yxdown.com/2015/3/18/6381ccc03e.jpg", }  
</>  
'''##我进行了简化,这里只是展示爬取方法,所以这个网址不存在404

str = re.findall(r'<>(.*?)</>', content, re.S | re.M)
for  in str:
    m = re.findall(r'"original":"(.*?)"', )
    for i in m:
        print(i)
        filename = os.path.basename(i)  # 去掉目录路径,返回文件名
        urllib.request.urlretrieve(i,'E:\\'+filename) #下载图片

输出结果:会输出网址,同时下载图片至E盘。


9.通过replace过滤< br />标签

核心代码:

    if '<br />' in value:
        value = value.replace('<br />','')   #过滤该标签
        value = value.replace('\n',' ')      #换行空格替代 否则总换行

10.过滤html标签

核心代码:

    value = re.sub('<[^>]+>','', doc)

举个例子:

import re

doc = '''
<table class="infobox" style="width: 21em; text-align: left;" cellpadding="3">
<tr bgcolor="#CDDBE8">
<th colspan="2">
<center class="role"><b>中華民國政治人士</b><br /></center>
</th>
</tr>
<tr>
<th>政黨:</th>
<td><span class="org">
<img alt="中國國民黨" src="../../../../images/Kuomintang.svg.png" width="19" height="19" border="0" />
<a href="../../../../articles/%8B%E6%B0%91%E9%BB%A8.html" title="中國國民黨">中國國民黨</a></span></td>
</tr>
</table>
'''

value = re.sub('<[^>]+>', '', doc)  # 过滤HTML标签
print(value)
输出结果:
>>>



中華民國政治人士



政黨:


中國國民黨
>>>

推荐文章:Python正则表达式指南

数学工具箱:Clarke与Park变换 本文详细解析了FOC(磁场定向控制)中的核心数学工具——Clarke变换与Park变换。首先阐述了坐标变换的必要性:将复杂的三相交流系统简化为直流系统,便于精确控制。Clarke变换将三相静止坐标系转换为两相静止坐标系,减少变量数量;Park变换进一步将两相静止坐标系转换为两相旋转坐标系,实现交流量到直流量的转换。文章提供了两种变换的数学公式、物理意义图解及C语言实现代码,并简要介绍了逆变换过程。这些变换为电机控制提供了关键的数学基础,后续将结合GD32F303的FPU特性进行优化实现。 阅读详情

相关推荐

Wonderware Intouch 2014R2 SP1 安装教程

下载Wonderware System Platform 2014R2 SP1 and Intouch 2014R2 SP1的安装压缩包,如下 软件的下载连接地址如下: https://pan.baidu.com/s/1a2GnI_nfT3vK1l49B94FIQ, 提取码:6ec6 或者直接微信扫描下面的二维码 管理员运行下面的setup.exe可执行程序, 进入安装,选择Product Based Selection, 自定义选择需要安装的程序,如下: 普通的Into

工控先生 3万+

Python爬虫3-数据解析方法:正则表达式介绍及案例

Python爬虫3-数据解析方法:正则表达式介绍及案例

Sun123234的博客 1211

qt下使用grpc编程(2) —— 练手!自己改的一个简单小例子!1

(1)在研究了grpc官方提供的helloworld例程后,自己试着写了个小程序。 (2)编写proto文件。 proto文件用于定义服务和消息,用protobuf的语法编写,protobuf是一种通信协议,详细请百度。下面附上源码: syntax = "proto3"; option java_multiple_files = true; option java_pac

u011099079的博客 3925

python中如何使用正则表达式提取数据

本文主要介绍了python中如何使用正则表达式提取数据问题。具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。re 模块使 Python 语言拥有全部的正则表达式功能。compile 函数可创建一个模式字符串和可选的标志参数组成的一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。

xiaoweids的博客 1740

FPGA实现电机转速PID控制

通过纯RTL实现电机转速PID控制,包括电机编码器值读取,电机速度、正反转控制,PID算法,卡尔曼滤波,最终实现对电机速度进行控制,使其能够渐近设定的编码器目标值。

STATEABC的博客 7494

Jasper Report使用JSON数据源创建报表

最近在做一个项目小功能,表单结案要生成PDF报表。 起初,想用HTML模板(art-template模板引擎)编写,利用浏览器的打印功能保存成pdf文件下载。但是HTML编写好的模板,页码、页眉、页脚设置有坑,表单内容中的表格较多,表格不能设置跨页,导致跨页的表格内容与页眉重叠,没能解决这个问题。 于是,转战研究Jasper report生成报表,用更加专业的报表生成工具来做。刚开始,也是跌跌撞撞,遇到了很多问题,因为觉得没有退路了,必须要用这个搞出来,所以就硬着头皮去找各种资料。 主要使用的json

xiaogege2012的专栏 3319

RE正则表达式(使用python语言进行爬虫为例)

re正则表达式,是一种对字符串进行操作的方法,可以在爬取网页时提取我们想要的数据。

lizyviking_的博客 1303

unity 在透明物体上投射阴影

unity版本:2019.4.16 创建一个shader,代码如下: Shader "ChuckLee/ARShadow" { Properties { _ShadowColor("Shadow Color", Color) = (0.1, 0.1, 0.1, 0.53) } SubShader { Tags{ "RenderType" = "Transparent" "Queue" = "Geometry+1" } Blend SrcAlpha OneMinusSrcAlph

Abel02的博客 2953

requests 正则表达正式基础爬虫案例二:爬取网站数据

要求:爬取https://ssr1.scrape.center/ 网站中所有电影标题、类型、地区、电影时长、上映日期、评分、简介;列表页面共10页,根据分析可得出,列表页面地址:https://ssr1.scrape.center/page/{页码};本文参考文献:https://cuiqingcai.com/202224.html ,想学习爬虫的可以移步。分析:网站共有两个页面组成,电影列表和详情,我们所需要的内容都在详情页面里面可以找到。其他不说了,直接看代码得了,正则表达式部分比较烂。

朗朗的博客 650

在 SAP S/4HANA 分析模型中添加 Measures,Calculated、Restricted、Currency Conversion 与 Unit Conversion 的建模思路

摘要: SAP S/4HANA分析查询建模中,度量(measure)的加工层级是关键难点,涉及聚合时机、币种/单位语义、过滤上下文等复杂因素。度量不仅是数字字段,还需处理计算口径(Calculated Measures)、上下文绑定(Restricted Measures)和单位转换等问题。Calculated Measures适合派生指标(如毛利率),需注意聚合前后计算差异;Restricted Measures通过固化过滤条件(如区分实际/计划金额)确保业务语义一致性。建模时应将业务逻辑下沉到分析模型层

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1022

智能车图像处理1-基础图像规格

从厂家摄像头的库函数中,我们可以直接得到完整图像的灰度数组,经过二值化之后(算力允许,可以考虑大津法),就是我们要处理的0-1二值图像了。本系列所有的文章中,我们的图像规格如下。

taiyuezyh的博客 4336

python网络爬虫爬取静态网页

网络爬虫又称网页蜘蛛、网络机器人,是一种按照一定的规则、自动请求万维网网站并提取网络数据的程序或脚本。如果说网络像一张网,那么爬就是网上的一只小电子,在网上爬行的过程中遇到了数据,就把它爬取下来。网络爬虫的常用功能:如图所示。获取大量数据,用来做数据分析公司项目的测试数据,公司业务所需数据Python做爬虫优势1、Python :请求模块、解析模块丰富成熟,强大的Scrapy网络爬虫框架2、PHP :对多线程、异步支持不太好3、JAVA:代码笨重,代码量大。

m0_74198026的博客 3272

BART non-Cartesian 重建:并行成像 压缩感知

本文主要使用并行成像和压缩感知方法实现non-Cartesian MRI 数据的重建。

张哥频道:电生理信号和磁共振成像 1182

Python实现网络爬虫17使用正则表达式爬取百度搜索结果:掌握高效数据抓取技巧

Python实现网络爬虫17使用正则表达式爬取百度搜索结果:掌握高效数据抓取技巧 【下载地址】Python实现网络爬虫17使用正则表达式爬取百度搜索结果 本教程详细介绍了如何使用Python和正则表达式高效爬取百度搜索结果。通过简洁的代码示例,您将学习如何构建爬虫架构、分析URL规律、创建分页URL,并结合正则表达式与网...

gitblog_06795的博客 799

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

python数据爬取的基本原理,怎么用python爬取数据

大家好,给大家分享一下python数据爬取的基本原理,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!本文已收录至Github,推荐阅读 👉本文是根据视频教程记录的学习笔记,建议结合视频观看。先看后赞,养成习惯。讲解我们的爬虫之前,先概述关于爬虫的简单概念(毕竟是零基础教程)

2301_81896102的博客 879

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

网络爬虫:爬取假数据

学习java过程中,值得回忆的代码。爬取web页面上的百家姓和男生,女生的名字,然后组合成一个完整的姓名。你可以指定须要的 boyCount 和 girlCount,然后会返回一个集合(顺序是打乱的,集合元素是一个类似于“傅彬远-男-19”的字符串)bw.close();

lenard-lhz的博客 2490

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: python怎么打开文本编辑器,python怎么打开编辑窗口
下一篇: python内部的集成开发工具,python常用集成开发工具
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值