2

これをpythonで書いてdjangoアプリに接続する方法を考えています。メタタグから値を抽出し、ウェブサイトの URL のみを持つ img url を意味します。ユーザーがリンクを貼り付けるときの Facebook と同じです。

外部 Web サイトからタイトルとメタ タグを取得する

4

2 に答える 2

4

個人的には、非常に優れたRequestsBeautifulSoup、およびLXMLライブラリを使用してこれに取り組むことを選択します。

に次のモデルがあると仮定すると、メソッドをmodels.pyオーバーライドして、、、および属性を設定できます。save()titledescriptionkeywords

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 に答える