请问哪里可以找到在爬虫的 pipelines.py 中将数据写入 MYSQL 数据库的例子?

2017-10-11 20:18:58 +08:00
 saximi
想在 pipelines.py 中将爬到的数据写入 MYSQL 数据库,希望能有这样的范例代码可供学习,
恳请大家指点,感谢!
3012 次点击
所在节点    Python
12 条回复
ioven
2017-10-11 21:19:25 +08:00
[scrapy 爬虫成长日记之将抓取内容写入 mysql 数据库 - 秋楓 - 博客园]( http://www.cnblogs.com/rwxwsblog/p/4572367.html)
xielemon
2017-10-11 21:57:59 +08:00
哈哈 我最近也在搞这个,一个 tips,不要每次处理 item 就插入,速度很慢,可以做 batch insert
saximi
2017-10-12 20:48:49 +08:00
@xielemon 有 batch insert 的实例么?感谢!
saximi
2017-10-12 20:49:00 +08:00
@ioven 感谢,我先看看去
xielemon
2017-10-12 21:13:08 +08:00
saximi
2017-10-13 23:54:54 +08:00
@ioven 感谢,文章中的代码好像适用于 PYTHON2 的环境,我在 PYTHON3 运行时遇到下面几个问题,恳请指点:
1、MySQLdb 包在 WIN7+PYTHON3 的环境下应该改为用 pymysql ?
2、dbpool=adbapi.ConnectionPool('MySQLdb',**dbargs) 这个方法对应的 PYTHON3 的语法应该是什么?
3、cursorclass=MySQLdb.cursors.DictCursor, 这个语句对应的 PYTHON3 的语法应该是什么?
4、conn.execute() 这个方法的 conn 在文中找不到定义的地方,我看文中有 conn.fetchone()这样的方法调用,是否说明 conn 是个游标,但是 adbapi.ConnectionPool 是没有 cursor 属性的,那么游标是如何定义的呢?
5、程序有 INSERT 的操作,但是为何没有 commit()来提交事务,这样不会有问题么?
saximi
2017-10-14 00:13:03 +08:00
@ioven 在这篇文章中还看到以下的代码,上网搜了搜没找到关于这三个语句用法的详细说明,不知哪里可以找到?
特别是第三条语句的用法猜不出来。

d=self.dbpool.runInteraction(self._do_upinsert,item,spider)
d.addErrback(self._handle_error,item,spider)
d.addBoth(lambda _:item)
ioven
2017-10-14 10:45:57 +08:00
@saximi
1. MySQLdb 支持 py3
2. 通用语法
3. from MySQLdb.cursors import DictCursor

conn 和 addBoth 貌似都是 twisted 维护连接池的用法,连接池会自动提交
saximi
2017-10-14 21:18:00 +08:00
@ioven 谢谢。为了能 import MySQLdb,我应该安装什么包呢?
我在网上看到这句话:“ MySQLdb,目前看来,可以视为一个不再继续维护的项目了。另外,针对 python 3.x 的 mysql,另外一个项目,pymysql 导致可以考虑。其是兼容 dbapi 的”
因为我是 PYTHON3.6 的版本,所以是不是应该用 pymysql 更合适呢?
如果确实更建议用 pymysql 的话,文章中这些代码在 pymysql 下应该如何改写呢?

dbpool=adbapi.ConnectionPool('MySQLdb',**dbargs)
cursorclass=MySQLdb.cursors.DictCursor

另外,d.addBoth(lambda _:item) 这个语句的作用是什么呢?
恳请指点!
ioven
2017-10-15 09:41:28 +08:00
@saximi 还没上 3.6 不太了解是否支持,github 看看是否支持 3.6

建议先把 py 的基础语法过一遍再写爬虫
sunwei0325
2017-10-15 23:47:04 +08:00
https://github.com/rmax/dirbot-mysql/blob/master/dirbot/pipelines.py
这里有一个异步操作 mysql 的 pipeline 例子
saximi
2017-10-16 21:54:42 +08:00
@ioven 博文中的代码,在插入和更新记录时,是每条记录就提交一次事务么? 如果不是,那么在哪里可以设置一次事务包括多少条记录呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/396895

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX