V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
saximi
V2EX  ›  Python

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

  •  
  •   saximi · 2017-10-11 20:18:58 +08:00 · 3009 次点击
    这是一个创建于 2600 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想在 pipelines.py 中将爬到的数据写入 MYSQL 数据库,希望能有这样的范例代码可供学习,
    恳请大家指点,感谢!
    12 条回复    2017-10-16 21:54:42 +08:00
    ioven
        1
    ioven  
       2017-10-11 21:19:25 +08:00
    [scrapy 爬虫成长日记之将抓取内容写入 mysql 数据库 - 秋楓 - 博客园]( http://www.cnblogs.com/rwxwsblog/p/4572367.html)
    xielemon
        2
    xielemon  
       2017-10-11 21:57:59 +08:00
    哈哈 我最近也在搞这个,一个 tips,不要每次处理 item 就插入,速度很慢,可以做 batch insert
    saximi
        3
    saximi  
    OP
       2017-10-12 20:48:49 +08:00
    @xielemon 有 batch insert 的实例么?感谢!
    saximi
        4
    saximi  
    OP
       2017-10-12 20:49:00 +08:00
    @ioven 感谢,我先看看去
    saximi
        6
    saximi  
    OP
       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
        7
    saximi  
    OP
       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
        8
    ioven  
       2017-10-14 10:45:57 +08:00
    @saximi
    1. MySQLdb 支持 py3
    2. 通用语法
    3. from MySQLdb.cursors import DictCursor

    conn 和 addBoth 貌似都是 twisted 维护连接池的用法,连接池会自动提交
    saximi
        9
    saximi  
    OP
       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
        10
    ioven  
       2017-10-15 09:41:28 +08:00
    @saximi 还没上 3.6 不太了解是否支持,github 看看是否支持 3.6

    建议先把 py 的基础语法过一遍再写爬虫
    sunwei0325
        11
    sunwei0325  
       2017-10-15 23:47:04 +08:00
    https://github.com/rmax/dirbot-mysql/blob/master/dirbot/pipelines.py
    这里有一个异步操作 mysql 的 pipeline 例子
    saximi
        12
    saximi  
    OP
       2017-10-16 21:54:42 +08:00
    @ioven 博文中的代码,在插入和更新记录时,是每条记录就提交一次事务么? 如果不是,那么在哪里可以设置一次事务包括多少条记录呢?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2798 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:59 · PVG 15:59 · LAX 23:59 · JFK 02:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.