我正在尝试将抓取的项目保存到在 localhost 上运行的 MySQL 中。即使蜘蛛以预期的方式爬行站点并刮擦项目,我的持久化管道对象也不起作用 - 它不会将项目存储到数据库中。
pipelines.py 文件中的 PersistMySQL 类:
class PersistMySQL(object):
con = None
cur = None
query = "INSERT INTO table(title, description, price) VALUES(%s, %s, %s)"
def __init__(self):
self.setupDBCon()
def __del__(self):
self.con.close()
def setupDBCon(self):
self.con = MySQLdb.connect(host='localhost',
user='root',
passwd='mypass',
db='mydb')
self.cur = self.con.cursor()
def process_items(self, item):
try:
self.cur.execute(self.query, (item['Title'], item['Desc'], item['Price']))
self.con.commit()
except Error as err:
print err
它不打印异常块,所以我的查询似乎是有效的。以下代码位于 settings.py 中(以及其他设置):
ITEM_PIPELINES = {
'myScraper.pipelines.CleanHTMLPipeline': 100,
'myScraper.pipelines.CleanStringPipeline': 200,
'myScraper.pipelines.PersistMySQL': 300
}
我使用了scrapy shell,发现它非常有用,但似乎没有办法从shell调试项目管道,使用会打印MySQL错误的异常也无济于事。蜘蛛程序在没有错误的情况下关闭,并且抓取了合理数量的项目,这些项目应该被持久化到数据库中。