我一個在scrapy有一個問題關於保存列表項一個scrapy只能保存一個項目
我的代碼是這樣的:
class MySpider(Spider):
name = "test"
start_urls=[""]
def parse(self, response):
sel = Selector(response)
sites = sel.xpath("//a[contains(@href, '.html')]") #many .html
for i,site in enumerate(sites):
item = YoutoItem()
item['link'] = site.xpath("./@href").extract()[0]
item['title'] = site.xpath("./text()").extract()[0]
yield Request(url=link,meta={'item':item}, callback=self.parse_ler)
break #just test the first one.html
def parse_ler(self, response):
item = response.meta['item']
sel = Selector(response)
url = sel.xpath("//embed/@src").extract()
for t in url:
print t #it will print url1,url2,url3
item['url'] = t
yield item
而且我pipline.py
class YoutoPipeline(object):
def process_item(self, item, spider):
item.save()
return item
終端將打印輸出:
{'link': u'http://test.html',
'title': u'A',
'url': u'url1'}
{'link': u'http://test.html',
'title': u'A',
'url': u'url2'}
{'link': u'http://test.html',
'title': u'A',
'url': u'url3'}
但當它保存到數據庫中,它會ONY救了他們的一個
{'link': u'http://test.html',
'title': u'A',
'url': u'url1'}
我thinl這是因爲項目[「網址」]被for循環
獲取請教我如何編輯保存這些3 DATAS seperately到數據庫
我的數據庫PostgreSQL的是
編輯:
我發現了一個方法: 只是把項目= YoutoItem()的for循環下
,它可以工作:
for t in url:
item = YoutoItem()
item['url'] = t
yield item
parse_ler如何被調用?你在這個函數中產生的字典項目是怎麼做的? – greole 2014-10-22 07:31:16
標題A是一個活動,它有3部電影(url1,url2,url3),我想將它保存到數據庫。 – user2492364 2014-10-22 07:35:31
@ user2492364向我們展示有關調用函數parse_ler將數據插入數據庫的代碼,以便我們知道爲什麼只保存第一個數據。 – 2014-10-22 07:55:03