我正在使用 scrapy 从网站中提取各种通用数据,例如标题、h1、h2、img src 和 alts。我已经让它对标题、h1 和 h2s 工作得很好。但是我在提取 src 和 alt 时遇到了一些问题。
我知道我可以使用这样的语法提取 src 和 alt(在本例中为 src):
hxs = HtmlXPathSelector(response)
for img in hxs.select('//img/@src').extract():
我的问题是我想遍历找到的每个图像,然后将 src 和 alts 保存到不同的模型。
这些是我的模型:
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?