不知道怎么解析这个

2024-06-11 08:56:24 发布

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

<div class="meaning"><span class="hinshi">[副]</span>物事の重点・大勢を述べるときに用いる。</div>

我只需要おもに。もっぱら。物事の重点・大勢を述べるときに用いる。你知道吗

通常,hinshi类与我试图解析的句子是分开的,但对于其中一些句子来说,它们似乎是组合在一起的。有没有什么方法可以只打印句子而忽略[副]?你知道吗


Tags: 方法div重点class句子spanmeaning大勢
1条回答
网友
1楼 · 发布于 2024-06-11 08:56:24

有多种方法可以获得所需的文本。你知道吗

我会在div中找到一个文本节点,其中class="meaning"具有recursive=False

soup.find('div', class_="meaning").find(text=True, recursive=False)

或者,您可以获取内部span元素并找到next sibling

soup.find('div', class_="meaning").find('span', class_="hinshi").next_sibling

或使用^{}

soup.select('div.meaning > span.hinshi')[0].next_sibling

或者,您可以从^{}列表中获取最后一个元素:

soup.select('div.meaning')[0].contents[-1]

这四个选项的结果都是:

物事の重点・大勢を述べるときに用いる。
网友
2楼 · 发布于 2024-06-11 08:56:24

如果您想省略所有子标签,只需将div.meaning的内容串起来,就可以通过查看其name属性(只有标签才有)来过滤节点:

from BeautifulSoup import BeautifulSoup
s = BeautifulSoup('[<div class="meaning"><span class="hinshi">[副]</span>物事の重点・大勢を述べるときに用いる。</div>]')
nodes = s.find('div', 'meaning').contents
only_strings = [x for x in nodes if getattr(x, 'name', None) is None]                                           
print ''.join(only_strings)

我会抓到你的

物事の重点・大勢を述べるときに用いる。

(假定“おもに.もっぱら”是一个打字错误,因为它不在源字符串中)

网友
3楼 · 发布于 2024-06-11 08:56:24

您可以通过两种方式来实现这一点,即:

  1. 使用XPath(通过lxml
  2. 使用正则表达式(通过re module
  3. 使用Beautiful Soup

alcxe和che介绍了如何使用方法3,所以这里还有两种方法:

  1. XPath:

    from lxml.html import fromstring
    s = u'<div class="meaning"><span class="hinshi">[副]</span>物事の重点・大勢を述べるときに用いる。</div>'
    print(fromstring(s).xpath('//div/text()')[0])
    
  2. 正则表达式:

    import re
    s = u'<div class="meaning"><span class="hinshi">[副]</span>物事の重点・大勢を述べるときに用いる。</div>'
    print(re.findall("</span>(.*)</div>", s)[0])
    

以上两种方法都要求您学习一些新的库/“子语言”(XPath/Regex),但是它们是通用的,并且可以在许多其他语言中使用(Beautiful Soup仅适用于Python)。你知道吗

快乐解析!你知道吗

相关问题 更多 >