python类可以访问自己对象的属性



我试图在不指定特定url的情况下创建一个spider。我想创建spider对象,从对象中提取url,并将其用作allowed_domainsstart_urls。换句话说,我想做一些类似的事情(注意MySpiderObj…我只是把这个表达式放在那里,因为我想从类MySpider:的对象中提取信息

from scrapy.settings import default_settings 
from selenium import webdriver
from urlparse import urlparse
import csv    
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item
from scrapy.spider import BaseSpider
from scrapy import log
default_settings.DEPTH_LIMIT = 3
class MySpider(CrawlSpider):
    def __init__(self,url):
        self.x=url
    name = "my_spider"
    allowed_domains = [MySpiderObj.x]
    start_urls = [MySpiderObj.x]
    rules = [Rule(SgmlLinkExtractor(), callback='parse_item', follow=True)]
    def parse_item(self,response):
        self.log('A response from %s just arrived!' % response.url)

我该怎么做?感谢

您应该将所有相互依赖的初始化移到构造函数中,并将MySpiderObj更改为self

你想要一个类的工厂吗?然后应该使用type函数生成一个具有所需属性的类。

但在您的情况下,正如其他人所提到的,您应该能够使allowed_domainsstart_urls属性成为实例属性:

类MySpider(爬行蜘蛛):name="my_spider"

def __init__(self, params):
    self.allowed_domains = [extract_domains(params)]
    self.start_urls = [extract_start_urls(params)]

还要注意start_requests方法-它可能更适合您的需求

最新更新