所以我正在玩Scrapy,这是一组允许你进行网络抓取的类,我想把一些数据放到数据库中,但是我在扩展scrapy的同时输入了MySQL方法。图书馆。
这是我的代码:
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.http import Request
import MySQLdb
class test(BaseSpider): #if i don't extend the class the MySQL works, but the Scrapy functionallity does not.
name = "test"
allowed_domains = ["some-website.com"] #i know this is probibly not a real websit... just using it as an example.
start_urls = [
"http://some-website.com",
]
db = MySQLdb.connect(
host = 'localhost',
user = 'root',
passwd = '',
db = 'scrap'
)
#cursor = db.cursor()
def parse(self, response):
hxs = HtmlXPathSelector(response)
for title in hxs.select('//a[@class="title"]/text()').extract():
print title
cursor.execute("INSERT INTO `scrap`.`shows` (id, title) VALUES (NULL , '"+title+"');")
我仍然是python的菜鸟所以任何帮助将不胜感激。
答案 0 :(得分:3)
您的architecture出了点问题。
Spider的工作是解析页面,提取数据并将其放入Item。保存数据库中项目的数据是pipeline's作业:
项目管道的典型用途是:
- 清理HTML数据
- 验证已删除的数据(检查项目是否包含某些字段)
- 检查重复项(并删除它们)
- 将已删除的项目存储在数据库中
所以,制作一个管道,将其路径放入settings.py。尝试使用该管道中的数据库。
答案 1 :(得分:0)
也许你会定义self.cursor
?
通过这种方式,可以在类方法上访问游标。
我不知道scrapy,但很可能你应该在__init__
方法或类测试的get_cursor
方法上做到这一点(可能你应该重命名为Test)