scrapy抓取网页信息插入MySQL
2015-03-16 16:32
302 查看
在文章/article/11283779.html 的基础下,将抓取到的信息保存到MySQL数据库。
代码参考自:http://www.oschina.net/question/553899_113210
更改 pipelines.py文件,文件内容如下:
期间遇到的问题:
问题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/ 文章,
下载了
安装成功。
问题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
]
可以写成:
代码参考自: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)]
相关文章推荐
- 如何运用SCRAPY+MySQL抓取相关信息
- 基于scrapy的分布式爬虫抓取新浪微博个人信息和微博内容存入MySQL
- 基于scrapy的分布式爬虫抓取新浪微博个人信息和微博内容存入MySQL
- 基于Internet Explorer内核的网页信息抓取程序
- C#实现通过程序自动抓取远程Web网页信息
- c#信息抓取一:抓取网页源代码
- 正则表达式相关:C# 抓取网页类(获取网页中所有信息)
- 网页信息抓取
- 网页信息抓取抓取博客园的文章标题和链接
- 网页信息抓取
- php抓取alexa网页内容 提取站点统计信息
- 正则表达式相关:C# 抓取网页类(获取网页中所有信息)
- C#实现通过程序自动抓取远程Web网页信息
- 网页信息抓取-如何获取延迟加载的网页数据
- 网页信息抓取实现
- 利用WebBrowser和StreamReader动态抓取网页信息
- C#实现通过程序自动抓取远程Web网页信息
- 针对某个网页的快照以及某些重要信息的抓取代码解析_2
- 使用网页抓取技术获取自己World Community Grid任务信息的经历
- 网页信息抓取(转载)