不知道如何解析这个

时间:2015-05-05 23:05:09

标签: python html beautifulsoup html-parsing

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

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

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

3 个答案:

答案 0 :(得分:1)

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

  1. 使用XPath(通过lxml
  2. 使用正则表达式(通过re module
  3. 使用Beautiful Soup
  4. 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])
      
    3. 上述两种方法都要求您学习一些新的库/“子语言”(XPath / Regex),但它们是通用的,可以用于许多其他语言(Beautiful Soup只适用于Python)。

      快乐解析!

答案 1 :(得分:0)

如果要省略所有子标签并且只能对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)

会帮你的

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

(假设&#34;おもに。もっぱら。&#34;是一个错字,因为它在源字符串中没有任何地方)

答案 2 :(得分:0)

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

我在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

或使用CSS selector

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

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

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

所有四个选项都会产生:

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