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

时间:2018-05-23 14:03:38

标签: python python-2.7 beautifulsoup

解析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数据,因此我无法从小括号中获取数据'支援'

1 个答案:

答案 0 :(得分:2)

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

这里的开括号和右括号是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)
支援

不同之处在于他们如何在没有这些括号中的一个或两个的情况下处理字符串;在这些情况下,re.search()会返回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''

选择最适合您需求的方法。