鱼C论坛

 找回密码
 立即注册
查看: 1944|回复: 9

[已解决]看看这个函数,关于正则

[复制链接]
发表于 2023-4-29 20:33:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def get_property(resp,param):
    s=re.findall(f"dt.+({param}).+?<span>(.+?)</span>",resp,re.S)
    s.insert(0,("产品名称",get_product_name(resp)))
    if len(s)>1:
        print (s[1][0],s[1][1].replace("\n","").replace(" ","").replace("&nbsp;","").replace("&gt;","").replace("gt",""))
    else:
        print (param,None)   

看看这个红色部分,为啥大部分指标 都能用   而个别指标  却无法取到最近的span 标签  而是取到了最后一个span,难道.+?<span>  还无法截断吗
最佳答案
2023-4-29 20:34:42
.*?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-29 20:34:42 | 显示全部楼层    本楼为最佳答案   
.*?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-29 20:36:17 | 显示全部楼层
这个函数看起来是用来从 HTML 文本中提取特定参数的值的。函数使用正则表达式  re.findall  从  resp  字符串中查找满足特定模式的子串,然后将提取到的信息插入到列表  s  中。 s  的第一个元素是产品名称,接下来的元素是其他参数的值。

正则表达式模式如下:
f"dt.+({param}).+?<span>(.+?)</span>"
其中  param  是要查找的参数名称。

这个正则表达式的主要部分是:
1.  dt.+({param}) : 查找字符串 "dt" 后紧跟的任意字符和参数名称。
2.  .+?<span> : 紧跟在参数名称后面的任意字符,直到找到第一个  <span>  标签。
3.  (.+?)</span> : 提取  <span>  标签内的文本。

如果某些参数无法取到最近的  <span>  标签,可能是因为在参数名称和  <span>  标签之间的文本与正则表达式的匹配模式不符。正则表达式使用的是非贪婪匹配  .+? ,它会尽量少地匹配字符。理论上,这个表达式应该可以匹配到最近的  <span>  标签。

出现问题的原因可能有以下几点:
1. 参数名称或  <span>  标签之间有其他 HTML 标签,使得正则表达式无法匹配。
2. HTML 文本中存在嵌套的  <span>  标签,导致正则表达式提取错误。

为了解决这个问题,你可以尝试调整正则表达式以更精确地匹配文本。此外,使用像 BeautifulSoup 这样的 HTML 解析库可能更容易处理这种问题,因为它可以更准确地解析和遍历 HTML 文档结构。

点评

私信有问题请教一下  发表于 2023-4-29 21:04
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-29 20:38:29 | 显示全部楼层

好像搞定了,我先给你最佳,然后我再进一步测试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-29 20:40:08 | 显示全部楼层
isdkz 发表于 2023-4-29 20:36
这个函数看起来是用来从 HTML 文本中提取特定参数的值的。函数使用正则表达式  re.findall  从  resp  字符 ...

没办法解析,才用得正则,那个网站 好没规律 啊    静态解析(除了正则) 其他都用不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-29 21:08:19 | 显示全部楼层

不行啊   还是无法截断  他会一直向后取  直到取到最后一个span标签
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-29 21:11:48 | 显示全部楼层
wp231957 发表于 2023-4-29 21:08
不行啊   还是无法截断  他会一直向后取  直到取到最后一个span标签

Python 3.9.9 (tags/v3.9.9:ccb0e6a, Nov 15 2021, 18:08:50) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> re.match('<span.*?>', '<span>1</span><span>1</span>').group()
'<span>'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-29 21:49:44 | 显示全部楼层
wp231957 发表于 2023-4-29 21:08
不行啊   还是无法截断  他会一直向后取  直到取到最后一个span标签

解决了没
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-29 22:08:54 From FishC Mobile | 显示全部楼层
歌者文明清理员 发表于 2023-4-29 21:49
解决了没

没,准备明天再研究一下
因为我用的是通用正则,而且实际测试,百分之80以上,都能取到正确数据,而取错的数据和其他的没看出来啥区别
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 11:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表