我试图在不指定特定url的情况下创建一个spider。我想创建spider对象,从对象中提取url,并将其用作allowed_domains
和start_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_domains
和start_urls
属性成为实例属性:
类MySpider(爬行蜘蛛):name="my_spider"
def __init__(self, params):
self.allowed_domains = [extract_domains(params)]
self.start_urls = [extract_start_urls(params)]
还要注意start_requests
方法-它可能更适合您的需求