美丽的小组 - 我应该如何获得body内容



我正在用美丽的小组解析HTML。最后,我想获得body内容,但没有body标签。但是BeautifulSoup添加了htmlheadbody标签。我这个GoogleGrops讨论了一种可能的解决方案:

>>> from bs4 import BeautifulSoup as Soup
>>> soup = Soup('<p>Some paragraph</p>')
>>> soup.body.hidden = True
>>> soup.body.prettify()
u' <p>n  Some paragraphn </p>'

此解决方案是骇客。应该有一种更好而明显的方法。

您的意思是在身体标签之间获得所有内容吗?

在这种情况下,您可以使用:

import urllib2
from bs4 import BeautifulSoup
page = urllib2.urlopen('some_site').read()
soup = BeautifulSoup(page)
body = soup.find('body')
the_contents_of_body_without_body_tags = body.findChildren(recursive=False)

我找到了获得身体内容的最简单方法是从身体上的内部使用unwrap()

>>> html = "<p>Hello World</p>"
>>> soup = BeautifulSoup(html, "html5lib")
>>> print(soup)
<html><head></head><body><p>Hello World</p></body></html>
>>>
>>> soup.html.unwrap()
<html></html>
>>>
>>> print(soup)
<head></head><body><p>Hello World</p></body>
>>>
>>> soup.head.unwrap()
<head></head>
>>>
>>> print(soup)
<body><p>Hello World</p></body>
>>>
>>> soup.body.unwrap()
<body></body>
>>>
>>> print(soup)
<p>Hello World</p>

要更有效和可重复使用,您可以将这些不良元素放在列表中,然后循环通过它们...

>>> def get_body_contents(html):
...  soup = BeautifulSoup(html, "html5lib")
...  for attr in ['head','html','body']:
...    if hasattr(soup, attr):
...      getattr(soup, attr).unwrap()
...  return soup
>>>
>>> html = "<p>Hello World</p>"
>>> print(get_body_contents(html))
<p>Hello World</p>

相关内容

  • 没有找到相关文章

最新更新