鱼C论坛

 找回密码
 立即注册
查看: 2434|回复: 12

[已解决]python 网页正则匹配 急!

[复制链接]
发表于 2016-3-21 15:33:04 | 显示全部楼层 |阅读模式

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

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

x
截取的网页内容为:
</tr><tr bgcolor=#ffffff height=30> <td  align=center height=30> 必修课</td>
<td  align=center> 0822502007</td>
<td  align=center> 非平稳随机信号处理</td>
<td  align=center> 0</td>
<td  align=center> 2013</td>
<td  align=center> 2</td>
<td  align=center> 40</td>
<td  align=center> 2</td>
<td  align=center> 专业</td>
<td  align=center> 考试</td>
<td  align=center> 90</td>
<td  align=center> <a onclick="return confirm('确认退课?');" href='TuiKe.jsp?bh=1822894'>退课</a></td>

需要提取第八行的 2, 和第十一行的90,我使用的正则表达式为r'</tr>.*?<td.*?<td.*?<td.*?<td.*?<td.*?<td.*?<td.*?<td.*?>(.*?)</td><td.*?<td.*?<td.*?>(.*?)</td><td.*?</td>'
使用的语句为:
myItems = re.findall('</tr>.*?<td.*?<td.*?<td.*?<td.*?<td.*?<td.*?<td.*?<td.*?>(.*?)</td><td.*?<td.*?<td.*?>(.*?)</td><td.*?</td>', page, re.S)
其中,page为网页的代码。
可是匹配不出来,郁闷啊!弄了好久,都不行!希望哪位大神不吝赐教,不胜感激!
最佳答案
2016-3-21 16:13:48
本帖最后由 kunaiai 于 2016-3-21 16:15 编辑

.是表示非换行符的所有字符  你html里有换行符吗  可以加个re.DOTALL  
看到了简写   re.S当我没说
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-21 15:39:30 | 显示全部楼层
这样写正则容易出错而且人家稍微改一下网页结构就得重写
你要分析所需数据有什么独一无二的特征, 对应的去写正则,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-21 16:07:00 | 显示全部楼层
hldh214 发表于 2016-3-21 15:39
这样写正则容易出错而且人家稍微改一下网页结构就得重写
你要分析所需数据有什么独一无二的特征, 对应的去 ...

非常感谢您的回答,我是初学者,对这个理解不深刻。这是一个分数的网页,其他各科的网页代码也是这样的。如果像问题那样提出需要的正确内容,那正则表达式该是什么样的啊!非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-21 16:13:48 | 显示全部楼层    本楼为最佳答案   
本帖最后由 kunaiai 于 2016-3-21 16:15 编辑

.是表示非换行符的所有字符  你html里有换行符吗  可以加个re.DOTALL  
看到了简写   re.S当我没说
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-21 16:13:56 | 显示全部楼层
凌志 发表于 2016-3-21 16:07
非常感谢您的回答,我是初学者,对这个理解不深刻。这是一个分数的网页,其他各科的网页代码也是这样的。 ...

这时候可能正则就比较复杂了, 用html解析的包吧, beautifulsoup之类的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-21 16:21:47 | 显示全部楼层
hldh214 发表于 2016-3-21 16:13
这时候可能正则就比较复杂了, 用html解析的包吧, beautifulsoup之类的

好的,非常感谢!哎,这个正则的内容太复杂了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-21 16:22:38 | 显示全部楼层
kunaiai 发表于 2016-3-21 16:13
.是表示非换行符的所有字符  你html里有换行符吗  可以加个re.DOTALL  
看到了简写   re.S当我没说

仍然非常感谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-21 16:24:56 | 显示全部楼层
<tr bgcolor=#ffffff height=30> <td  align=center height=30> 必修课</td>
<td  align=center> 0822502007</td>
<td  align=center> 非平稳随机信号处理</td>
<td  align=center> 0</td>
<td  align=center> 2013</td>
<td  align=center> 2</td>
<td  align=center> 40</td>
<td  align=center> 2</td>
<td  align=center> 专业</td>
<td  align=center> 考试</td>
<td  align=center> 90</td>
<td  align=center> <a onclick="return confirm('确认退课?');" href='TuiKe.jsp?bh=1822894'>退课</a></td>
如果格式是固定的  那就 只匹配 r'<td  align=center> (.*?)</td> '
得到一个列表  在按某些规律取你想要的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-21 16:30:24 | 显示全部楼层
kunaiai 发表于 2016-3-21 16:24
必修课
0822502007
非平稳随机信号处理

我也考虑过这个办法,但是不行啊,前面会匹配出一些,不需要的内容!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-21 16:44:51 | 显示全部楼层
凌志 发表于 2016-3-21 16:30
我也考虑过这个办法,但是不行啊,前面会匹配出一些,不需要的内容!

所以就要按某些规律取你要的啊  比如myItems[7]  myItems[10]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-21 16:46:31 | 显示全部楼层
myItems = re.findall('</tr>.*?<td.*?<td.*?<td.*?<td.*?<td.*?<td.*?<td.*?<td.*?>(.*?)</td><td.*?<td.*?<td.*?>(.*?)</td><td.*?</td>', page, re.S)
表达式是不是少了个r

myItems = re.findall(r'</tr>.*?<td.*?<td.*?<td.*?<td.*?<td.*?<td.*?<td.*?<td.*?>(.*?)</td><td.*?<td.*?<td.*?>(.*?)</td><td.*?</td>', page, re.S)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-21 17:48:49 | 显示全部楼层
kunaiai 发表于 2016-3-21 16:46
myItems = re.findall('.*?

不是的,加上r只是便于一些转义字符的书写。在这对结果是没有影响的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-21 19:07:06 | 显示全部楼层
kunaiai 发表于 2016-3-21 16:46
myItems = re.findall('.*?

已解决,正则表达式为:</tr>.*?<td.*?<td.*?<td.*?<td.*?<td.*?<td.*?<td.*?<td.*?>(.*?)</.*?<td.*?<td.*?<td.*?>(.*?)</td> 其实问题主要就是纠结在换行符上!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-20 07:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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