无法在Python中将MySQL.connector与Scrapy配合使用
我在用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代码并没有放在任何处理流程函数里面。