これをpythonで書いてdjangoアプリに接続する方法を考えています。メタタグから値を抽出し、ウェブサイトの URL のみを持つ img url を意味します。ユーザーがリンクを貼り付けるときの Facebook と同じです。
1173 次
2 に答える
4
個人的には、非常に優れたRequests、BeautifulSoup、およびLXMLライブラリを使用してこれに取り組むことを選択します。
に次のモデルがあると仮定すると、メソッドをmodels.py
オーバーライドして、、、および属性を設定できます。save()
title
description
keywords
from bs4 import BeautifulSoup
import requests
from django.db import models
class Link(models.Model):
url = models.URLField(blank=True)
title = models.CharField(max_length=20, blank=True)
description = models.TextField(blank=True)
keywords = models.TextField(blank=True)
def save(self, *args, **kwargs):
if self.url and not (self.title or self.keywords or self.description):
# optionally, use 'html' instead of 'lxml' if you don't have lxml installed
soup = BeatifulSoup(requests.get(self.url).content, "lxml")
self.title = soup.title.string
meta = soup.find_all('meta')
for tag in meta:
if 'name' in tag.attrs and tag.attrs['name'].lower() in ['description', 'keywords']:
setattr(self, tag.attrs['name'].lower(), tag.attrs['content'])
super(Link, self).save(*args, **kwargs)
オーバーライドされたメソッドのロジックはsave()
、ビューまたはユーティリティ関数、あるいはLink
条件付きで呼び出すことができるモデル上の別のメソッドに非常によく存在する可能性があります。
上記はDjango1.4で動作します。保証はありませんが、以前のバージョンでも機能するはずです。
編集:構文エラーを修正し、代替パーサーについて言及します。 @jineshと@stonefuryに感謝します。
于 2012-06-19T04:12:15.540 に答える