不确定如何解析这个
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)
会得到你
物事の重点・大勢を述べるときに用いる。
(假设“おもり。もっぱら。”是一个错字,因为它在源字符串中无处可寻)
有多种方法可以获得所需的文本。
我会在 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]
所有四个选项的结果为:
物事の重点・大勢を述べるときに用いる。
您可以通过多种方式完成此操作,即:
- 使用 XPath(通过 lxml)
- 使用正则表达式(通过re module)
- 使用Beautiful Soup
alcxe 和 che 介绍了如何使用方法 #3 进行操作,因此这里还有两种操作方法:
XPath:
from lxml.html import fromstring
s = u'<div class="meaning"><span class="hinshi">[副]</span>物事の重点・大勢を述べるときに用いる。</div>'
print(fromstring(s).xpath('//div/text()')[0])
正则表达式:
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-仅).
解析愉快!
<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)
会得到你
物事の重点・大勢を述べるときに用いる。
(假设“おもり。もっぱら。”是一个错字,因为它在源字符串中无处可寻)
有多种方法可以获得所需的文本。
我会在 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]
所有四个选项的结果为:
物事の重点・大勢を述べるときに用いる。
您可以通过多种方式完成此操作,即:
- 使用 XPath(通过 lxml)
- 使用正则表达式(通过re module)
- 使用Beautiful Soup
alcxe 和 che 介绍了如何使用方法 #3 进行操作,因此这里还有两种操作方法:
XPath:
from lxml.html import fromstring s = u'<div class="meaning"><span class="hinshi">[副]</span>物事の重点・大勢を述べるときに用いる。</div>' print(fromstring(s).xpath('//div/text()')[0])
正则表达式:
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-仅).
解析愉快!