【发布时间】:2015-12-30 23:17:40
【问题描述】:
我正在使用 Scrapy 制作一个基本的蜘蛛,并希望使用 SQLite 存储数据。蜘蛛工作正常并保存了我想要的数据,但它将所有数据写入数据库的同一行。
这是我的蜘蛛:
def parse(self, response):
for sel in response.xpath('//*[@class="class"]'):
item = ScrapedItem()
item['Name'] = sel.xpath('*/header/div//h2/a/text()').extract()
item['Site'] = sel.xpath('*/header/div/a[1]/text()').extract()
item['Category'] = sel.xpath('*/header/div/h6[3]/text()').extract()
yield item
这是我的管道:
import sqlite3 as lite
from xyz import settings
from xyz import items
con = None
class Pipeline(object):
def __init__(self):
self.setupDBCon()
self.createTables()
def process_item(self, item, spider):
self.storeInfoInDb(item)
return item
def storeInfoInDb(self, item):
self.cur.execute("INSERT INTO Table(\
Name, \
Site, \
Category\
) \
VALUES( ?, ?, ?, ? )", \
( \
str(item.get('Name', '')),
str(item.get('Site', '')),
str(item.get('Category', ''))
))
print item.get('Name', '')
self.con.commit()
def setupDBCon(self):
self.con = lite.connect('test.db')
self.cur = self.con.cursor()
def __del__(self):
self.closeDB()
def createTables(self):
self.dropAgencyTable()
self.createAgencyTable()
def createTable(self):
self.cur.execute("CREATE TABLE IF NOT EXISTS Table(id INTEGER PRIMARY KEY NOT NULL, \
Name TEXT, \
Site TEXT, \
Category TEXT )")
def dropTable(self):
self.cur.execute("DROP TABLE IF EXISTS Agency")
def closeDB(self):
self.con.close()
如何将我的爬取数据保存在每个爬取项目的单独一行中?
【问题讨论】:
-
请提供您要抓取的页面的链接。也看看这个答案:stackoverflow.com/questions/34511252/…
-
非常感谢@Rahul,问题解决了!
-
那么让我添加这个作为答案。