私はスクレイピーを使用して、タイトル、h1、h2、img src、alts などのさまざまな一般データを Web サイトから抽出しています。タイトル、h1、h2s で問題なく動作するようになりました。しかし、src と alt を抽出するときにいくつかの問題に遭遇しました。
次のような構文で src と alt を抽出できることを知っています (この場合は src):
hxs = HtmlXPathSelector(response)
for img in hxs.select('//img/@src').extract():
私の問題は、見つかった各画像をループしてから、src と alt を別のモデルに保存することです。
これらは私のモデルです:
class Page(models.Model):
website = models.ForeignKey(Website)
url = models.CharField(max_length=200, unique=True)
class Image(models.Model):
page = models.ForeignKey(Page)
src = models.CharField(max_length=300, unique=True)
class Alt(models.Model):
image = models.ForeignKey(Image)
text = models.CharField(max_length=200)
これは私がこれまでに持っているコードです。
hxs = HtmlXPathSelector(response)
for img in hxs.select('//img').extract():
hxs2 = HtmlXPathSelector(img)
try:
i = Image(page=page, src=hxs2.select('//img/@src'))
i.save()
except:
pass
try:
a = Alt(image=i, text=hxs2.select('//img/@alt'))
a.save()
except:
pass
これは本当にうまくいきません。次のエラーが表示されます。
exceptions.TypeError: cannot create weak reference to 'unicode' object
私の質問は、これが良いアプローチなのか、それとも別の方法を試す必要があるのかということです。毎回非常に定義された html のセットを使用するので、おそらく正規表現ですか?