我需要提取外部网站的元描述。我已经搜索过,也许已经有了简单的答案,但我无法将其应用到我的代码中。
目前,我可以通过以下方式获得它的标题:
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
如果根本找不到任何描述,那么它只会保存标题。
答案 0 :(得分:5)
您可以在汤对象上使用find
方法,并找到具有特定属性的标记。在这里,我们需要找到meta
标记,其中name
属性等于og:description
或description
或property
属性等于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
。