无法从两个字符之间的unicode中提取数据

2024-09-28 17:18:37 发布

您现在位置:Python中文网/ 问答频道 /正文

在html解析中的应用

<div>
<h3>
    <small style="text-align:left;color:gray;">05/23 13:58頃</small> 
    <small>苫小牧市</small><br>
    (支援)苫小牧市新富町1丁目
</h3> 

我必须从小括号“()”中提取数据支援 在python中。当我试图通过命令获取数据时

text = div.h3.findAll(text=True, recursive=False)[2].strip()

我要走了

u'\uff08\u652f\u63f4\uff09\u82eb\u5c0f\u7267\u5e02\u65b0\u5bcc\u753a1\u4e01\u76ee'

它是'(支援)苫小牧市新富町1丁目'的unicode数据,因此我无法从小括号中获取数据,如'支援'


Tags: 数据textbr命令divstylehtmlleft
1条回答
网友
1楼 · 发布于 2024-09-28 17:18:37

BeautifulSoup不会帮你解析出子字符串。您可以使用Python的string方法来处理这个问题,或者使用正则表达式

这里的开始圆括号和结束圆括号是U+FF08和U+FF09全形圆括号,您可以在这些圆括号上划分字符串:

text.partition(u'\uff08')[-1].partition(u'\uff09')[0]

或者您可以使用正则表达式来获取两个这样的代码点之间的所有文本:

re.search(ur'\uff08([^\uff09]*)\uff09', text).group(1)

它们都适用于示例字符串:

>>> print text.partition(u'\uff08')[-1].partition(u'\uff09')[0]
支援
>>> import re
>>> print re.search(ur'\uff08([^\uff09]*)\uff09', text).group(1)
支援

区别在于它们如何处理没有一个或两个括号的字符串^{<在这些情况下,cd1>}将返回None,然后您将获得一个AttributeError,用于尝试在该对象上使用.group,而str.partition()将生成空字符串或部分字符串:

>>> text = u'no parentheses'
>>> text.partition(u'\uff08')[-1].partition(u'\uff09')[0]
u''
>>> text = u'\uff08open parentheses'
>>> text.partition(u'\uff08')[-1].partition(u'\uff09')[0]
u'open parentheses'
>>> text = u'close parentheses\uff09'
>>> text.partition(u'\uff08')[-1].partition(u'\uff09')[0]
u''

选择最适合你需要的方法

相关问题 更多 >