繁体   English   中英

Scrapy ModuleNotFoundError:没有名为“MySQLdb”的模块

[英]Scrapy ModuleNotFoundError: No module named 'MySQLdb'

刚开始使用 Scrapy,我正在尝试写入 MySQL 数据库而不是输出到 csv。

我在这里找到了代码: https : //gist.github.com/tzermias/6982723 ,我用它来尝试完成这项工作,但不幸的是出现了一个我无法理解的错误。

这是我的pipelines.py:

    class WebsitePipeline(object):
    def process_item(self, item, spider):
        return item

import MySQLdb.cursors
from twisted.enterprise import adbapi

from scrapy.xlib.pydispatch import dispatcher
from scrapy import signals
from scrapy.utils.project import get_project_settings
from scrapy import log

SETTINGS = get_project_settings()

class MySQLPipeline(object):

    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler.stats)

    def __init__(self, stats):
        #Instantiate DB
        self.dbpool = adbapi.ConnectionPool ('MySQLdb',
            host=SETTINGS['DB_HOST'],
            user=SETTINGS['DB_USER'],
            passwd=SETTINGS['DB_PASSWD'],
            port=SETTINGS['DB_PORT'],
            db=SETTINGS['DB_DB'],
            charset='utf8',
            use_unicode = True,
            cursorclass=MySQLdb.cursors.DictCursor
        )
        self.stats = stats
        dispatcher.connect(self.spider_closed, signals.spider_closed)
    def spider_closed(self, spider):
        """ Cleanup function, called after crawing has finished to close open
            objects.
            Close ConnectionPool. """
        self.dbpool.close()

    def process_item(self, item, spider):
        query = self.dbpool.runInteraction(self._insert_record, item)
        query.addErrback(self._handle_error)
        return item

def _insert_record(self, tx, item):
        result = tx.execute(
        """ INSERT INTO table VALUES (1,2,3)""" 
        )
        if result > 0:
            self.stats.inc_value('database/items_added')

def _handle_error(self, e):
    log.err(e)

这是我的 settings.py 中的内容:

# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
    'Website.pipelines.MySQLPipeline': 300,
}

#Database settings
DB_HOST = 'localhost'
DB_PORT = 3306
DB_USER = 'username'
DB_PASSWD = 'password'
DB_DB = 'scrape'

这是spider.py:

# -*- coding: utf-8 -*-
import scrapy
from scrapy.spiders import SitemapSpider

class WebsitesitemapSpider(SitemapSpider):
    name = 'Websitesitemap'
    allowed_domains = ['Website.com']
    sitemap_urls = ['https://www.Website.com/robots.txt']

    def parse(self, response):
        yield {response.url}

我一直无法找到我想要做的事情的工作示例,以便能够找出我出错的地方,因此感谢任何查看此内容或可能提供帮助的人。

您是否安装了这些软件包“MySQLdb,scrapy,twisted”。

否则尝试使用 PIP 安装,然后尝试运行脚本。

你需要在你的 python 环境中安装 MySQL-python,以及在操作系统上安装 libmysql。

在 Ubuntu 上,这将通过以下方式实现。

pip install MySQL-python sudo apt-get install libmysql-dev

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM