python 如何提取中的数据

mysqlno2 2013-01-22 03:06:26
我现在有个表格,需要提出表中的<td>中的数据,<td>中的数据格式比较多样化,比如
<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>
现在我需要将表格中<td></td>中间的数据提出来 使用过字符串直接处理和re处理,但是处理到中文的时候都会出问题,请教如何解决
...全文
4067 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
A900616A 2013-01-23
  • 打赏
  • 举报
回复
貌似要用那个正则表达式
libralibra 2013-01-22
  • 打赏
  • 举报
回复
中文不管编码,print出来都对的
>>> import re
>>> s = '''<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>'''
>>> res = r'<td>(.*?)</td><td>(.*?)</td>'
>>> m = re.findall(res,s,re.S|re.M)
>>> m
[('\xd0\xf2\xc1\xd0\xba\xc5', 'DEIN3-39CD3-2093J3'), ('\xc8\xd5\xc6\xda', '2013\xc4\xea1\xd4\xc222\xc8\xd5'), ('\xca\xdb\xbc\xdb', '392.70 \xd4\xaa'), ('\xcb\xb5\xc3\xf7', '\xbd\xf6\xcf\xde5\xd3\xc3\xbb\xa7\xca\xb9\xd3\xc3')]
>>> for line in m:
	print line[0],line[1]

	
序列号 DEIN3-39CD3-2093J3
日期 2013年1月22日
售价 392.70 元
说明 仅限5用户使用
>>> 
ImN1 2013-01-22
  • 打赏
  • 举报
回复
代码和出错信息
mysqlno2 2013-01-22
  • 打赏
  • 举报
回复
列表明明是有元素的 但是就是不能取值 奇怪了 你print lst 可以 但是你print lst[0] 就不行了
ImN1 2013-01-22
  • 打赏
  • 举报
回复
看看是不是空列表,就是没匹配到……
mysqlno2 2013-01-22
  • 打赏
  • 举报
回复
获取到的列表LIST 为什么不能直接用下标来 赋值 比如 a=m[0] 然后提示下标错误?
ImN1 2013-01-22
  • 打赏
  • 举报
回复
#7的不行么? 做正则要抓特征,尽量用非贪婪方式 匹配和不匹配要协程不相容,那么边界就相当明显了 例如([^<]+)</td> 你这个例子,汉字开头可以算唯一了,但结尾不能确定的时候就扩大范围,不要把</td>作为结尾,而是后面遇到的</tr>,写作</td>\s*</tr>,这样结合子组和非贪婪就很准确了 \x的问题,encode 或 decode一下就行了,在已知编码时这个操作非常有效 另外 re.U 应该可行吧?
bugs2k 2013-01-22
  • 打赏
  • 举报
回复
引用 8 楼 mysqlno2 的回复:
可是中文字符都变成了 \xbe\x23\x20\x9a..... 这种形式了
根据需要对字符串进行解码

lines = '''
<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>
'''.decode('gbk').encode('utf-8')

import re
m = re.findall(r'<td>(.*?)</td>', lines, re.I|re.M)
if m:
    for x in m:
        print x
mysqlno2 2013-01-22
  • 打赏
  • 举报
回复
还有假如我的html很长,但是我只想截取上面的从 序列号 开始,到 用户使用 这几个字符为止 这其中的字符串 该怎么截取 我用find 不行 start=s.find('序列号') end=s.find('用户使用') s=s[start:end] 这个办法报错
mysqlno2 2013-01-22
  • 打赏
  • 举报
回复
可是中文字符都变成了 \xbe\x23\x20\x9a..... 这种形式了
bugs2k 2013-01-22
  • 打赏
  • 举报
回复
#!/usr/bin/env python

lines = '''
<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>
'''

import re
m = re.findall(r'<td>(.*?)</td>', lines, re.I|re.M)
if m:
    for x in m:
        print x
mysqlno2 2013-01-22
  • 打赏
  • 举报
回复
要不升级到3.3?
mysqlno2 2013-01-22
  • 打赏
  • 举报
回复
文件头部 是encoding utf-8 的
mysqlno2 2013-01-22
  • 打赏
  • 举报
回复
我想用 r'<td>(\w+)</td>' 去匹配 但是(\w+)只能匹配 字母和数字 还有_ 我现在的问题是里面还有一些特殊的符号 还有中文 用这个re 就不行了
zjs100901 2013-01-22
  • 打赏
  • 举报
回复
Python2.x 的默认字符串不是 Unicode 的。你在编码方面是怎么处理的?
mysqlno2 2013-01-22
  • 打赏
  • 举报
回复
版本是 2.7.3 系统 为 CENTOS
zjs100901 2013-01-22
  • 打赏
  • 举报
回复
是 Python2.6 还是 Python3.0?

37,744

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧