Scrapy ModuleNotFoundError: нет модуля с именем «MySQLdb» - PullRequest
0 голосов
/ 26 сентября 2018

Только что начал со 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)

Это то, что в моих настройках.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}

Мне не удалось найти рабочий пример того, что я хочу сделать, чтобы иметь возможность работать гдеЯ ошибаюсь, поэтому спасибо всем, кто смотрит на это или может помочь.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

вам потребуется MySQL-python, установленный в вашей среде python, вместе с libmysql, установленным в операционной системе.

В Ubuntu это будет достигнуто следующим образом.

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

0 голосов
/ 26 сентября 2018

у вас установлены эти пакеты "MySQLdb, scrapy, twisted".

В противном случае попробуйте установить с помощью PIP, а затем попробуйте запустить скрипт.

...