【发布时间】:2012-04-03 15:50:08
【问题描述】:
我正在研究处理互联网上的新闻文本。所以,我正在编写一个程序来通过新闻 url 获取新闻并将其存储在数据库中。
例如,这是一个随机的news url(西班牙新闻网站)。所以,我使用BeautifulSoup 来获取 HTML 内容,经过一些简单的处理后,我得到了新闻标题、摘要、内容、类别以及有关新闻的更多信息。
但是,正如您在我在示例中使用的新闻中看到的那样,还有一些“社交网络”信息(新闻图片的右侧):
- 推荐数量(facebook)
- 推文数(推特)
- +1 的数量 (google+)
我也想获取这些信息,所以我尝试处理该部分的 HTML 内容,但它不存在!这就是我所做的:
>>> import urllib
>>> from BeautifulSoup import BeautifulSoup as Soup
>>> news = urllib.urlopen('http://elcomercio.pe/mundo/1396187/noticia-horror-eeuu-cinco-ninos-muertos-deja-tiroteo-escuela-religiosa')
>>> soup = Soup(news.read())
>>> sociales = soup.findAll('ul', {'class': 'sociales'})[0].findAll('li')
>>> len(sociales)
3
这是 Facebook 部分的 HTML 内容:
>>> sociales[0] # facebook
<li class="top">
<div class="fb-plg">
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=224939367568467";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<div class="fb-like" data-href="http://elcomercio.pe/noticia/1396187/horror-eeuu-cinco-ninos-muertos-deja-tiroteo-escuela-religiosa" data-send="false" data-layout="box_count" data-width="70" data-show-faces="false" data-action="recommend"></div></div></li>
推特部分:
>>> sociales[1] # twitter
<li><a href="https://twitter.com/share" class="twitter-share-button" data-count="vertical" data-via="elcomercio" data-lang="es">Tweet</a><script type="text/javascript" src="//platform.twitter.com/widgets.js"></script></li>
Google+ 部分:
>>> sociales[2] # google+
<li><script type="text/javascript" src="https://apis.google.com/js/plusone.js">
{lang: 'es'}
</script><g:plusone size="tall"></g:plusone></li>
如您所见,我正在寻找的信息不包含在 HTML 内容中,我猜它是通过使用某种 API 的这些链接获得的。
所以我的问题是:我是否可以从某个新闻的 HTML 内容中获取我正在寻找的信息(Facebook 推荐的数量、推文的数量、+1 的数量)?
【问题讨论】:
标签: python html-parsing beautifulsoup