我正在尝试创建一个蜘蛛而不指定某个网址。我想创建蜘蛛对象,从对象中提取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)
我该怎么做呢?谢谢
答案 0 :(得分:1)
您应该将所有相互依赖的初始化移至构造函数,并将MySpiderObj
更改为self
答案 1 :(得分:0)
你想要一个工厂上课吗?然后,您应该使用type
函数生成具有所需属性的类。
但在您的情况下,正如其他人所提到的,您应该能够制作allowed_domains
和start_urls
属性实例属性:
类MySpider(CrawlSpider): name =“my_spider”
def __init__(self, params):
self.allowed_domains = [extract_domains(params)]
self.start_urls = [extract_start_urls(params)]
还要注意start_requests
方法 - 它可能更适合您的需求