Scrapy通过sqlite3保存数据

Posted duck_lu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scrapy通过sqlite3保存数据相关的知识,希望对你有一定的参考价值。

以爬取当当网作为实例 http://bj.ganji.com/fang1/chaoyang/

通过xpath获取title和price

分别贴出spider, items, pipelines的code

 1 # -*- coding: utf-8 -*-
 2 import scrapy
 3 from ..items import RenthouseItem
 4 
 5 class GanjiSpider(scrapy.Spider):
 6     name = \'ganji\'
 7     # allowed_domains = [\'bj.ganji.com\']
 8     start_urls = [\'http://bj.ganji.com/fang1/chaoyang/\']
 9 
10     def parse(self, response):
11         #print(response)
12         rh = RenthouseItem()
13         title_list = response.xpath(\'//*[@class="f-list-item ershoufang-list"]/dl/dd[1]/a/text()\').extract()
14         price_list = response.xpath(\'//*[@class="f-list-item ershoufang-list"]/dl/dd[5]/div[1]/span[1]/text()\').extract()
15         # d = {}
16         for i, j in zip(title_list, price_list):
17             rh[\'title\'] = i
18             rh[\'price\'] = j
19             yield rh
20             # d[\'title\'] = i
21             # d[\'price\'] = j
22             # yield d
23         #     print(i, \':\', j)
 1 # -*- coding: utf-8 -*-
 2 
 3 # Define here the models for your scraped items
 4 #
 5 # See documentation in:
 6 # https://doc.scrapy.org/en/latest/topics/items.html
 7 
 8 import scrapy
 9 
10 
11 class RenthouseItem(scrapy.Item):
12     # define the fields for your item here like:
13     # name = scrapy.Field()
14     title = scrapy.Field()
15     price = scrapy.Field()
16     # pass
 1 # -*- coding: utf-8 -*-
 2 
 3 # Define your item pipelines here
 4 #
 5 # Don\'t forget to add your pipeline to the ITEM_PIPELINES setting
 6 # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
 7 import sqlite3
 8 
 9 class RenthousePipeline(object):
10     def open_spider(self, spider):
11         self.con = sqlite3.connect(\'renthouse.sqlite\')
12         self.cu = self.con.cursor()    
13 
14     def process_item(self, item, spider):
15         #print(spider.name)
16         insert_sql = \'insert into renthouse (title, price) values ("{}", "{}")\'.format(item[\'title\'], item[\'price\'])
17         #print(insert_sql)
18         self.cu.execute(insert_sql)
19         self.con.commit()
20         return item
21 
22     def spider_close(self, spider):
23         self.con.close() 

spider通过 rh = RenthouseItem() 这一句话初始化一个rh的实例,使我们可以通过这个rh传到pipelines进行处理

所以这里我们每次通过rh传一个字典给pipelines(标题titile,价格price)然后通过sql语句插入到sqlite3

open_spider是打开spider的时候做的,所以这个时候我们连接数据库,个人觉得这篇文章关于cursor光标及sqlite的应用讲的很清楚https://www.cnblogs.com/qq78292959/archive/2013/04/01/2993327.html

注意insert等这种修改数据execute(执行)以后一定要commit(提交)!!!

close_spider就是关闭spider的时候做的,所以这个时候我们关闭与数据库的连接

 

插入成功

以上是关于Scrapy通过sqlite3保存数据的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向使用 DB Browser 查看并修改 SQLite 数据库 ( 从 Android 应用数据目录中拷贝数据库文件 | 使用 DB Browser 工具查看数据块文件 )(代码片段

scrapy主动退出爬虫的代码片段(python3)

scrapy按顺序启动多个爬虫代码片段(python3)

FreeBSD中Python3使用pip,scrapy,sqlite3问题

如何将日期+时间保存和检索到 sqlite3 数据库中?

Python sqlite3 保存数据