python - 使用项目管道抓取到 SQLite - 由于列表中的 None 值而丢弃了整个记录
问题描述
我正在尝试使用 Scrapy 的项目管道从我的蜘蛛中插入四个项目,一切都很顺利,除了其中包含空值的 doc_id 项目(来自原始源并使用正则表达式清理)。
我的问题是,一旦它找到一个空值,整行就会被丢弃,而当我将数据导出为 CSV 文件时,如果有一个包含 None 值的列是完全可以的。
这是我得到的关键错误:
Traceback (most recent call last):
File "/Users/opt/anaconda3/lib/python3.7/site-packages/twisted/internet/defer.py", line 654, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "/Users/opt/anaconda3/lib/python3.7/site-packages/scrapy/utils/defer.py", line 154, in f
return deferred_from_coro(coro_f(*coro_args, **coro_kwargs))
File "/Users/user/document_scraper/doc/pipelines.py", line 32, in process_item
self.store_db(item)
File "/Users/user/document_scraper/doc/pipelines.py", line 40, in store_db
item['doc_id'][0],
File "/Users/opt/anaconda3/lib/python3.7/site-packages/scrapy/item.py", line 83, in __getitem__
return self._values[key]
KeyError: 'doc_id'
我的物品.py:
import scrapy
from scrapy.loader import ItemLoader
from itemloaders.processors import TakeFirst, MapCompose, Compose
import re
class DocItem(scrapy.Item):
date = scrapy.Field()
office = scrapy.Field(output_processor = TakeFirst())
doc_body = scrapy.Field()
doc_id = scrapy.Field(input_processor = MapCompose(lambda item: re.findall('C\.\s\d{4}', item)[0].split('C. ')[1]))
我的管道.py:
import sqlite3
class DocPipeline(object):
def __init__(self):
self.create_connection()
self.create_table()
def create_connection(self):
self.conn = sqlite3.connect("//document.db")
self.curr = self.conn.cursor()
def create_table(self):
self.curr.execute("""DROP TABLE IF EXISTS DOC""")
self.curr.execute("""CREATE TABLE DOC(
DOC_DATE date,
OFFICE text,
BODY text,
DOC_ID number
)""")
def process_item(self, item, spider):
self.store_db(item)
return item
def store_db(self, item):
self.curr.execute("""INSERT INTO DOC VALUES (?,?,?,?)""",(
item['date'][0],
item['office'],
item['doc_body'][0],
item['doc_id'][0],
))
self.conn.commit()
无论其中一列中的 None 值如何,我如何告诉 SQLite 或 Scrapy 我希望返回我的项目?
解决方案
推荐阅读
- julia - 如何在 Julia 中计算数组的模式?
- angular - 警告:当执行 npm install 时,“推断的 tsconfig 文件”..../frontend/tsconfig.json”似乎是“解决方案风格”...”
- javascript - 如何将全局变量传递到具有 3 个测试用例的测试套件中
- mysql - 使用 REGEX 组合多个查询
- swift - 从滑动操作(Swift/Xcode)调用时,键盘不会停留在文本字段上
- python-3.x - 将 TFIDF 向量转换为句子
- algorithm - 关于算法复杂度,我怎么知道 n^(0.1) = w[ (log n)^10 ]
- python - 如何在 Python 中使现有的时间序列更加不稳定?
- .net - Asp.net Core 路由等效
- neural-network - Ordinal Pooling 神经网络的函数