不确定如何解析这个

Not sure how to parse this

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

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

通常,hinshi class 与我要解析的句子是分开的,但对于其中一些句子,它们似乎组合在一起。无论如何只打印句子而忽略 [副]?

如果你想省略所有的子标签,只需要字符串 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)

会得到你

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

(假设“おもり。もっぱら。”是一个错字,因为它在源字符串中无处可寻)

有多种方法可以获得所需的文本。

我会在 divclass="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

CSS selector:

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

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

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

所有四个选项的结果为:

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

您可以通过多种方式完成此操作,即:

  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])
    

以上两种方法都需要你学习一些新的库/"sublanguages"(XPath/Regex),但是都是通用的,可以在许多其他语言中使用(Beautiful Soup是Python-仅).

解析愉快!