鱼C论坛

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

[已解决]新手求助,这段html文件内容怎么获取呢

[复制链接]
发表于 2016-11-30 09:35:18 | 显示全部楼层 |阅读模式

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

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

x
<tr><th class="th40" align="left" valign="middle" style="border-color:#000; border-width: 1px 0px 0px 1px; border-style: solid"><nobr>Entry</nobr></th>
<td class="td40" style="border-color:#000; border-width: 1px 1px 0px 1px; border-style: solid"><table border="0" cellpadding="0" cellspacing="0" width="555"><tr><td align="left"><code><nobr>K06492&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
</nobr></code></td><td align="right"><br></td></tr></table></td></tr>


<tr><th class="th41" align="left" valign="top" style="border-color:#000; border-width: 1px 0px 0px 1px; border-style: solid"><nobr>Name</nobr></th>
<td class="td41" style="border-color:#000; border-width: 1px 1px 0px 1px; border-style: solid"><div style="width:555px;overflow-x:auto;overflow-y:hidden"><div style="width:555px;overflow-x:auto;overflow-y:hidden">CD58, LFA3<br>
</div></div></td></tr>


如何正则获得Entry、K06492、Name、CD58, LFA3这几个内容
最佳答案
2016-11-30 13:02:01
  1. html='''
  2. <tr><th class="th40" align="left" valign="middle" style="border-color:#000; border-width: 1px 0px 0px 1px; border-style: solid"><nobr>Entry</nobr></th>
  3. <td class="td40" style="border-color:#000; border-width: 1px 1px 0px 1px; border-style: solid"><table border="0" cellpadding="0" cellspacing="0" width="555"><tr><td align="left"><code><nobr>K06492&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
  4. </nobr></code></td><td align="right"><br></td></tr></table></td></tr>


  5. <tr><th class="th41" align="left" valign="top" style="border-color:#000; border-width: 1px 0px 0px 1px; border-style: solid"><nobr>Name</nobr></th>
  6. <td class="td41" style="border-color:#000; border-width: 1px 1px 0px 1px; border-style: solid"><div style="width:555px;overflow-x:auto;overflow-y:hidden"><div style="width:555px;overflow-x:auto;overflow-y:hidden">CD58, LFA3<br>
  7. </div></div></td></tr>
  8. '''

  9. import re
  10. ptn=re.compile(r'<tr>[^<>]*'               
  11.                r'<th[^>]+?class="th\d\d".*?>([a-z]+)<.*?</th>[^<>]*'
  12.                r'<td[^>]+?class="td\d\d".*?>([^<>]+)<.*?</td>[^<>]*'
  13.                r'</tr>'
  14.                ,re.I + re.S )

  15. html = html.replace('&nbsp;', ' ')
  16. rslt = ptn.findall(html)
  17. for x in rslt:
  18.     print(x)

  19.        
复制代码
  1. ('Entry', 'K06492                      KO                                     ')
  2. ('Name', 'CD58, LFA3')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-30 10:08:55 | 显示全部楼层
  1. <nobr>(.+)</nobr>
  2. <div style="width:555px;overflow-x:auto;overflow-y:hidden">(.+)<br>
  3. <nobr>(.+)&
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-30 10:42:28 | 显示全部楼层

这个是正则是吧,调用re.find()?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-30 10:48:15 | 显示全部楼层
依次提取出来,有木有哪位大神有更好的办法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-30 11:08:48 | 显示全部楼层
这个通篇看来都是大写字母开头.里面只有一个KO不是你要的数据.到最后可以把它塞选一次就行.我有点不成熟的想法.
  1. import re
  2. h = '你的字符串'
  3. p = re.compile(r'[A-Z]+[A-Za-z0-9]+')  #正则表达式对象
  4. t = p.findall(h) #全匹配
  5. t = ['Entry', 'K06492', 'KO', 'Name', 'CD58', 'LFA3'] #得到这个列表.可以用一个循环把小于3位的字符串筛掉
复制代码

评分

参与人数 1荣誉 +20 鱼币 +20 收起 理由
hldh214 + 20 + 20 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-30 11:38:51 | 显示全部楼层
tmkuej 发表于 2016-11-30 11:08
这个通篇看来都是大写字母开头.里面只有一个KO不是你要的数据.到最后可以把它塞选一次就行.我有点不成熟的 ...

我这段的正则表达式该怎么匹配呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-30 11:47:22 | 显示全部楼层
能不能有哪位大神指点的详细些
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-30 11:52:06 | 显示全部楼层
我上面的代码就是写的你这个html的内容.你只用把我写的h='你的字符串'换成你的文件就行
说到这我又想到正则表达式可以直接把OK筛掉
  1. p = re.compile(r'[A-Z]+[A-Za-z0-9]{3,5}')  #新的匹配规则{3,5}表式匹配3到5次直接就可以把小于3位大于6位的匹配掉
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-30 12:00:56 | 显示全部楼层
tmkuej 发表于 2016-11-30 11:52
我上面的代码就是写的你这个html的内容.你只用把我写的h='你的字符串'换成你的文件就行
说到这我又想到正 ...

那如果我想的是逐个提取,不是这种列表形式该怎么办呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-30 12:54:18 | 显示全部楼层
可以用search方法呀.逐个匹配group方法返回字符串就行了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-30 13:02:01 | 显示全部楼层    本楼为最佳答案   
  1. html='''
  2. <tr><th class="th40" align="left" valign="middle" style="border-color:#000; border-width: 1px 0px 0px 1px; border-style: solid"><nobr>Entry</nobr></th>
  3. <td class="td40" style="border-color:#000; border-width: 1px 1px 0px 1px; border-style: solid"><table border="0" cellpadding="0" cellspacing="0" width="555"><tr><td align="left"><code><nobr>K06492&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
  4. </nobr></code></td><td align="right"><br></td></tr></table></td></tr>


  5. <tr><th class="th41" align="left" valign="top" style="border-color:#000; border-width: 1px 0px 0px 1px; border-style: solid"><nobr>Name</nobr></th>
  6. <td class="td41" style="border-color:#000; border-width: 1px 1px 0px 1px; border-style: solid"><div style="width:555px;overflow-x:auto;overflow-y:hidden"><div style="width:555px;overflow-x:auto;overflow-y:hidden">CD58, LFA3<br>
  7. </div></div></td></tr>
  8. '''

  9. import re
  10. ptn=re.compile(r'<tr>[^<>]*'               
  11.                r'<th[^>]+?class="th\d\d".*?>([a-z]+)<.*?</th>[^<>]*'
  12.                r'<td[^>]+?class="td\d\d".*?>([^<>]+)<.*?</td>[^<>]*'
  13.                r'</tr>'
  14.                ,re.I + re.S )

  15. html = html.replace('&nbsp;', ' ')
  16. rslt = ptn.findall(html)
  17. for x in rslt:
  18.     print(x)

  19.        
复制代码
  1. ('Entry', 'K06492                      KO                                     ')
  2. ('Name', 'CD58, LFA3')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-30 13:14:23 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-30 13:25:21 | 显示全部楼层

感谢之情无以言表
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-7 03:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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