0

私はスクレイピーを使用して、タイトル、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 のセットを使用するので、おそらく正規表現ですか?

4

1 に答える 1