pyspider 连接mysql_pyspider 导入模块报错 提示 No module named mysqldb
學習pyspider 參照《 把 pyspider的結果存入自定義的mysql數據庫中 》文章
設置了本地的mysql數據庫及連接,但運行時 提示 :process csair:_on_get_info data:,_on_get_info -> [200] len:12 -> result:None fol:0 msg:0 err:ImportError(‘No module named mysqldb’,)
系統環境:centos7.1
mysql-python(1.2.5) pip 默認安裝
python采用默認的2.7.5
希望得到幫助 感謝
文件已存到 pyspider/database/mysql/mysqldb.py 腳本文件如下:
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2015-12-21 09:28:49
# Project: csair
from pyspider.libs.base_handler import *
from pyspider.database.mysql.mysqldb import SQL
class Handler(BaseHandler):
crawl_config = {
}
@every(minutes=24 * 60)
def on_start(self):
self.crawl('http://www.csair.cn/cn/pages/NewsList.aspx?listname=%D6%D8%D2%AA%B9%AB%B8%E6', callback=self.index_page)
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
for each in response.doc('a[href^="http"]').items():
self.crawl(each.attr.href, callback=self.detail_page)
def list_page(self, response):
for each in response.doc('ul_list7 a').items():
self.crawl(each.attr.href, callback=self.detail_page)
for each in response.doc('.currentnumeric').items():
self.crawl(each.attr.href, callback=self.list_page)
@config(priority=2)
def detail_page(self, response):
return {
"url": response.url,
"title": response.doc('ctl00_ContentPlaceHolder1_DetailBar1_NewsTitle ').text(),
"fabushijain" :response.doc('span#ctl00_ContentPlaceHolder1_DetailBar1_ReleaseLabel').text(),
"content" : response.doc('#ctl00_ContentPlaceHolder1_DetailBar1_ContentInfo').text(),
}
def on_result(self, result):
#print result
if not result or not result['title']:
return
sql = SQL()
sql.replace('info',**result)
++++++++++++++++++++++++++++++++++++++++++++++
mysqldb.py 文件內容如下:
class SQL:
username = 'pyspider' ? #數據庫用戶名
password = 'pyspider' ? #數據庫密碼
database = 'result' ? ? #數據庫
host = 'localhost' ? ? ?#數據庫主機地址
connection = ''
connect = True
placeholder = '%s'
def __init__(self):
if self.connect:
SQL.connect(self)
def escape(self,string):
return '`%s`' % string
def connect(self):
config = {
'user':SQL.username,
'password':SQL.password,
'host':SQL.host
}
if SQL.database != None:
config['database'] = SQL.database
try:
cnx = mysql.connector.connect(**config)
SQL.connection = cnx
return True
except mysql.connector.Error as err:
if (err.errno == errorcode.ER_ACCESS_DENIED_ERROR):
print "The credentials you provided are not correct."
elif (err.errno == errorcode.ER_BAD_DB_ERROR):
print "The database you provided does not exist."
else:
print "Something went wrong: " , err
return False
def replace(self,tablename=None,**values):
if SQL.connection == '':
print "Please connect first"
return False
tablename = self.escape(tablename )
if values:
_keys = ", ".join(self.escape(k) for k in values)
_values = ", ".join([self.placeholder, ] * len(values))
sql_query = "REPLACE INTO %s (%s) VALUES (%s)" % (tablename, _keys, _values)
else:
、 ? ? sql_query = "REPLACE INTO %s DEFAULT VALUES" % tablename
cur = SQL.connection.cursor()
try:
if values:
cur.execute(sql_query, list(itervalues(values)))
else:
cur.execute(sql_query)
SQL.connection.commit()
return True
except mysql.connector.Error as err:
print ("An error occured: {}".format(err))
return False
有兩個思路供參考:
檢查一下包下邊的__init__.py是否存在
檢查一下模塊名和導入的模塊名是否一致,特別是這個模塊被多個py文件導入
感謝支持 貌似不是這個原因
有可能是原來的mysql-python的連接版本過低導致,pip安裝后是mysql-connector-python(1.0.11) Mysql-python(1.2.5)
參考版本地址: http://ftp.ntu.edu.tw/MySQL/Downloads/Connector-Python/
采用最新版的mysql-connector-python(2.1.2) 還是不行 繼續測試中
版本是centos7的版本 已到 http://ftp.ntu.edu.tw/MySQL/Downloads/Connector-Python/下載的 2.1.2版本
是在什么平臺上?如果是windows 需要到mysql的主頁上找到對應的驅動包
ubuntu 上需要安裝 apt-get install python-mysqldb 來安裝這個包
總結
以上是生活随笔為你收集整理的pyspider 连接mysql_pyspider 导入模块报错 提示 No module named mysqldb的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java guava 使用_java –
- 下一篇: java算术运算符_JAVA-基础-算术