从外部网站获取元描述

时间:2014-03-11 06:31:08

标签: python django

我需要提取外部网站的元描述。我已经搜索过,也许已经有了简单的答案,但我无法将其应用到我的代码中。

目前,我可以通过以下方式获得它的标题:

external_sites_html = urllib.request.urlopen(url)
soup = BeautifulSoup(external_sites_html)
title = soup.title.string

然而,描述有点棘手。它可以采用以下形式:

<meta name="og:description" content="blabla"
<meta property="og:description" content="blabla"
<meta name="description" content="blabla"

所以我想要的是提取出现在html中的第一个。然后它将被添加到数据库中:

entry.description = extracted_desc
entry.save

如果根本找不到任何描述,那么它只会保存标题。

2 个答案:

答案 0 :(得分:5)

您可以在汤对象上使用find方法,并找到具有特定属性的标记。在这里,我们需要找到meta标记,其中name属性等于og:descriptiondescriptionproperty属性等于description

# First get the meta description tag
description = soup.find('meta', attrs={'name':'og:description'}) or soup.find('meta', attrs={'property':'description'}) or soup.find('meta', attrs={'name':'description'})

# If description meta tag was found, then get the content attribute and save it to db entry
if description:
    entry.description = description.get('content')

答案 1 :(得分:1)

你可以这样做:

# Order these in order of preference
description_selectors = [
    {"name": "description"},
    {"name": "og:description"},
    {"property": "description"}
]

for selector in description_selectors:
    description_tag = soup.find(attrs=selector)
    if description_tag and description_tag.get('content'):
        description = description_tag['content']
        break
else:
    desciption = ''

请注意,其他内容适用于for,而不适用于if