如果你在python中扩展一个类,你如何导入另一个类并使用它?

时间:2011-12-10 03:15:00

标签: python mysql class scrapy

所以我正在玩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的菜鸟所以任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

您的architecture出了点问题。

Spider的工作是解析页面,提取数据并将其放入Item。保存数据库中项目的数据是pipeline's作业:

  

项目管道的典型用途是:

     
      
  • 清理HTML数据
  •   
  • 验证已删除的数据(检查项目是否包含某些字段)
  •   
  • 检查重复项(并删除它们)
  •   
  • 将已删除的项目存储在数据库中
  •   

所以,制作一个管道,将其路径放入settings.py。尝试使用该管道中的数据库。

我认为您需要阅读tutorial并查看examples

答案 1 :(得分:0)

也许你会定义self.cursor
通过这种方式,可以在类方法上访问游标。 我不知道scrapy,但很可能你应该在__init__方法或类测试的get_cursor方法上做到这一点(可能你应该重命名为Test)