无法在Python中将MySQL.connector与Scrapy配合使用

0 投票
1 回答
544 浏览
提问于 2025-04-18 10:57

我在用Scrapy把抓取的数据导出到本地MySQL数据库时遇到了一些问题。

我尝试用Scrapy做一个网络爬虫,到目前为止,它确实能从我想要的网站上抓取到需要的数据,但我就是无法把这些数据导出到本地的MySQL数据库。我看过Mysql连接器的文档,但里面的例子让我有点困惑(http://dev.mysql.com/doc/connector-python/en/connector-python-example-cursor-transaction.html)。我也在谷歌上搜索过,希望能找到解决办法,但所有的结果都在用MySQLdb,而我想用MySQL连接器。

这是我在pipelines.py里的代码

from scrapy.extensions import DropItem
import mysql.connector
from mysql.connector import errorcode

cnx = mysql.connector.connect(user='user', password='pwd', host='localhost', database='ftdb2')
cursor = cnx.cursor()

TABLES = {}

TABLES['fttable2'] = (
    "CREATE TABLE 'fttable2' ("
    "  'id' int(11) NOT NULL AUTO_INCREMENT,"
    "  'nr' varchar(100),"
    "  'titel' varchar(9999),"
    "  'forslagsstiller' varchar(999),"
    "  'ministeromraade' varchar(100),"
    "  'udvalg' varchar(100),"
    "  'status' varchar(100),"
    "  'samling' varchar(100),"
    "  PRIMARY KEY ('id')"
    ") ENGINE=InnoDB")

add = ("INSERT INTO fttable2 " "(nr) " "VALUES (item['nr'])")
cursor.execute(add)
cnx.commit()
cursor.close()
cnx.close()

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

当我在终端输入命令 -> mysql -> 然后写:describe fttable2;,我发现连表都没创建(我确保已经给用户赋予了完全的权限)。

这是spider.py的代码(是基于Scrapy教程里的代码改的):

from scrapy.spider import Spider
from scrapy.selector import Selector 
from tutorial2.items import FTItem

class DmozSpider(Spider):
    name = "dmoz"
    allowed_domains = ["ft.dk"]
    start_urls = ["http://www.ft.dk/Dokumenter/Vis_efter_type/Beslutningsforslag.aspx?session=&caseStatus=-1&ministerArea=-1&committee=&proposedBy=1&startDate=20110915&endDate=20140421&dateRelatedActivity=100242%2f200049&sortColumn=&sortOrder=&startRecord=&totalNumberOfRecords=&numberOfRecords=999&pageNr=#dok"]

    def parse(self, response):
        sel = Selector(response)
        item = FTItem()
        # Extract title
        item['nr'] = sel.xpath('/html/body/form/div[3]/div/div[2]/div[5]/div/div/table/tbody/tr/td[1]/text()').extract()
        return item

我不太确定这样做是否正确。

1 个回答

-1

Scrapy会调用启用的处理流程函数,但你写的mysql代码并没有放在任何处理流程函数里面。

撰写回答