Python I';我试图存储多个spider';在MySQL中将结果存储到单独的表中
这是我的管道。我有两只蜘蛛,一只叫bristol.py,一只叫bath.py。当我运行“scrapy crawl bristol”时,它会自动将结果添加到名为“bristol”的MySQL数据库表中。我希望运行“srapy crawl-bath”,并能够将结果存储在MySQL数据库中的表名“bath”下。我尝试为“Bristol”表添加完全相同的代码行,但收到一个错误。这是我试图直接放在第一个self.cursor.execute下面的代码Python I';我试图存储多个spider';在MySQL中将结果存储到单独的表中,python,mysql,sql,web-scraping,scrapy,Python,Mysql,Sql,Web Scraping,Scrapy,这是我的管道。我有两只蜘蛛,一只叫bristol.py,一只叫bath.py。当我运行“scrapy crawl bristol”时,它会自动将结果添加到名为“bristol”的MySQL数据库表中。我希望运行“srapy crawl-bath”,并能够将结果存储在MySQL数据库中的表名“bath”下。我尝试为“Bristol”表添加完全相同的代码行,但收到一个错误。这是我试图直接放在第一个self.cursor.execute下面的代码 self.cursor.execute("""INSE
self.cursor.execute("""INSERT INTO Bath(BathCountry, BathQualification) VALUES ('{0}', '{1}')""".format(item['BathCountry'], "".join([s.encode('utf8') for s in item['BathQualification']])))
当我尝试这一点时,我收到一个错误,有没有办法做到这一点?这就是错误所在
exceptions.KeyError: 'BathCountry'
提前谢谢你的帮助
import sys
import MySQLdb
import MySQLdb.cursors
import hashlib
from scrapy.exceptions import DropItem
from scrapy.http import Request
class TestPipeline(object):
def __init__(self):
self.conn = MySQLdb.connect(
user='user',
passwd='password',
db='db',
host='host',
charset='utf8',
use_unicode=True
)
self.cursor = self.conn.cursor()
def process_item(self, item, spider):
try:
self.cursor.execute("""INSERT INTO Bristol(BristolCountry, BristolQualification) VALUES ('{0}', '{1}')""".format(item['BristolCountry'], "".join([s.encode('utf8') for s in item['BristolQualification']])))
self.conn.commit()
return item
except MySQLdb.Error as e:
print "Error %d: %s" % (e.args[0], e.args[1])
请出示您的
项目定义好吗?两个爬行器是否使用相同的Item
类?您好,它们在这里,它们是否应该是单独的Item类?我将如何定义这一点。从scrapy.item import item,Field class QualificationItem(item):BristolQualification=Field(),BristolCountry=Field(),BathQualification=Field(),BathCountry=Field(),我现在将其更改为'self.cursor.execute(s)'之间的if和elif语句,它可以工作,但会跳过一些结果,在巴斯的例子中,它返回41行,而它应该返回50+(我不记得确切的数字),我可以看到它缺少一些国家。有什么建议吗?确保浴缸蜘蛛中的物品包含“BathCountry”