您的位置:首页 > 数据库 > MySQL

scrapy抓取网页信息插入MySQL

2015-03-16 16:32 302 查看
在文章/article/11283779.html 的基础下,将抓取到的信息保存到MySQL数据库。

代码参考自:http://www.oschina.net/question/553899_113210

更改 pipelines.py文件,文件内容如下:

from scrapy import log
from twisted.enterprise import adbapi
import MySQLdb.cursors

class W3SchoolPipeline(object):
def __init__(self):
self.dbpool =adbapi.ConnectionPool('MySQLdb',
host ='127.0.0.1',#本地
db='test',
user ='root',
passwd='123456',
charset ='utf8',#防止中文乱码
cursorclass=MySQLdb.cursors.DictCursor,
use_unicode=True
)

def process_item(self,item,spider):
#print spider
query =self.dbpool.runInteraction(self._conditional_insert,item)
#query =addErrback(self.handle_error)

return item

def _conditional_insert(self,tx,item):
#if item.get('title'):
tx.execute(\
"insert into book(title,link,descs) "
"values(%s,%s,%s)",
(item['title'][0],item['link'][0],item['desc'][0])
)
def handle_error(self,e):
log.err(e)


期间遇到的问题:
问题1:ImportError: No module named MySQLdb

原因:没有安装MySQL-python

使用命令安装MySQL-python:easy_install MySQL-python

出现了问题2:error: Unable to find vcvarsall.bat

不知道什么原因,百度了一下,根据 http://www.crifan.com/python_install_module_mysql_mysqldb/ 文章,

下载了

MySQL-python-1.2.3.win-amd64-py2.7.exe


安装成功。

问题3:在插入数据的时,将MySQL的关键字 desc 当成 列名了,导致插入失败,于是更改为列名 descs。

问题4:插入数据库时发现中文乱码,于是在 dbpool 添加了 charset ='utf8' ,成功。(注意:请先确认你的MySQL 是否插入中文乱码【用insert语句测试一下】)。

附带1:

根据问题4,如果出现乱码,将MySQL安装目录中找到 my.ini 配置文件,将 default-character-set=latin1 改成 default-character-set= utf8(注:共有两处)。

建表时将charset 设置成 utf8。

注:latin1 是ISO-8859-1的别名。

附带2:

如果插入数据库的数据不按顺序插入,可以在 setting.py文件 或 w3school_spider.py文件中添加: download_delay =5 (延迟下载时间,适当加大即可)。

附带3:

如果start_urls 中有多个网页是有规则的,例如:

start_urls=[
http://www.abc.com/1page, http://www.abc.com/2page, http://www.abc.com/3page
]

可以写成:

start_urls = ["http://www.abc.com/%dpage" % i for i in range(1,4)]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: