当前位置: 首页 > 知识库问答 >
问题:

带爬行器的爬行器初始化中的参数

仲孙诚
2023-03-14

我想用蜘蛛爬虫代码来获取一些房地产数据。但它一直给我这个错误:

回溯(最近一次呼叫最后一次):

文件“//anaconda/lib/python2.7/site packages/twisted/internet/defer.py”,第1301行,in_inlineCallbacks result=g.send(result)

文件“//anaconda/lib/python2.7/site packages/scrapy/crawler.py”,第90行,第六行。重新发布(*exc_信息)

文件“//anaconda/lib/python2.7/site packages/scrapy/crawler.py”,第71行,在crawl self中。蜘蛛=自我_创建_spider(*args,**kwargs)

file"//anaconda/lib/python2.7/site-pack/scrapy/crawler.py",第94行,_create_spider返回self.spidercls.from_crawler(自己,*args,**kwargs)

file"//anaconda/lib/python2.7/site-pack/scrapy/spiders/crawl.py",第96行,from_crawlerspider=Super(CrawlSpider, cls)。from_crawler(爬虫,*args,**kwargs)

文件“//anaconda/lib/python2.7/site packages/scrapy/spider/init.py”,第50行,from_crawler spider=cls(*args,**kwargs)

类型错误:init()正好需要3个参数(1个给定)

以下是定义爬虫程序的代码:

class RealestateSpider(scrapy.spiders.CrawlSpider):

    ###Real estate web crawler
    name = 'buyrentsold'
    allowed_domains = ['realestate.com.au']

    def __init__(self, command, search):
        search = re.sub(r'\s+', '+', re.sub(',+', '%2c', search)).lower()
        url = '/{0}/in-{{0}}{{{{0}}}}/list-{{{{1}}}}'.format(command)
        start_url = 'http://www.{0}{1}'
        start_url = start_url.format(
                self.allowed_domains[0], url.format(search)
        )
        self.start_urls = [start_url.format('', 1)]
        extractor = scrapy.linkextractors.sgml.SgmlLinkExtractor(
                allow=url.format(re.escape(search)).format('.*', '')
        )
        rule = scrapy.spiders.Rule(
                extractor, callback='parse_items', follow=True
        )
        self.rules = [rule]
        super(RealestateSpider, self).__init__()

    def parse_items(self, response):
        ###Parse a page of real estate listings
        hxs = scrapy.selector.HtmlXPathSelector(response)
        for i in hxs.select('//div[contains(@class, "listingInfo")]'):
            item = RealestateItem()
            path = 'div[contains(@class, "propertyStats")]//text()'
            item['price'] = i.select(path).extract()
            vcard = i.select('div[contains(@class, "vcard")]//a')
            item['address'] = vcard.select('text()').extract()
            url = vcard.select('@href').extract()
            if len(url) == 1:
                item['url'] = 'http://www.{0}{1}'.format(
                        self.allowed_domains[0], url[0]
                )
            features = i.select('dl')
            for field in ('bed', 'bath', 'car'):
                path = '(@class, "rui-icon-{0}")'.format(field)
                path = 'dt[contains{0}]'.format(path)
                path = '{0}/following-sibling::dd[1]'.format(path)
                path = '{0}/text()'.format(path)
                item[field] = features.select(path).extract() or 0
            yield item

以下是erorr出现的时间:

crawler = scrapy.crawler.CrawlerProcess(scrapy.conf.settings)
sp=RealestateSpider(command, search)
crawler.crawl(sp)
crawler.start()

有人能帮我解决这个问题吗?谢谢!

共有2个答案

靳举
2023-03-14

我遇到了这个问题,上面的解决方案对我来说太难了
但是我通过将参数作为类属性传递来避开了这个问题:

process = CrawlerProcess()
sp = MySpider
sp.storage = reference_to_datastorage
process.crawl(sp)
process.start()

希望这是你问题的潜在解决方案。

南宫云
2023-03-14

crawler.crawl()方法需要spider类作为参数,其中在代码中提供了一个spider对象

有几种方法可以正确地做到这一点,但是最直接的方法是简单地扩展蜘蛛类:

class MySpider(Spider):
    command = None
    search = None

    def __init__(self):
        # do something with self.command and self.search
        super(RealestateSpider, self).__init__()

然后:

crawler = scrapy.crawler.CrawlerProcess(scrapy.conf.settings)
class MySpider(RealestateSpider):
    command = 'foo'
    search = 'bar'
crawler.crawl(MySpider)
crawler.start()
 类似资料:
  • 嗨,我正在运行这个开源Ex-Crawler的罐子 但我总是收到这样的错误:og4j:WARN找不到记录器的追加器(eu.medsea.mimeutil.TextMimeDetector)。log4j:警告请正确初始化log4j系统。log4j:请参阅http://logging.apache.org/log4j/1.2/faq.html#noconfig更多信息

  • 本文向大家介绍Python反爬虫伪装浏览器进行爬虫,包括了Python反爬虫伪装浏览器进行爬虫的使用技巧和注意事项,需要的朋友参考一下 对于爬虫中部分网站设置了请求次数过多后会封杀ip,现在模拟浏览器进行爬虫,也就是说让服务器认识到访问他的是真正的浏览器而不是机器操作 简单的直接添加请求头,将浏览器的信息在请求数据时传入: 打开浏览器--打开开发者模式--请求任意网站 如下图:找到请求的的名字,打

  • 我有一个Json数组文件的格式:-[[{key1:value1},{key2:value2},{key3:value3}],[{key1:value4},{key2:value5},{key3:value6}]] 我需要使用AWS glue爬取上述文件,并读取json模式,其中每个键都作为模式中的一列。我尝试使用标准的json分类器,但它似乎不起作用,并且模式加载为数组。我需要从S3读取json文

  • 我是nutch的初级用户。当我用bin/nutch抓取命令重新抓取时,我得到一个。锁定已经存在。 以下是我的例外。链接反转 /home/crawler_user/apache-nutch-1.14/bin/nutch invertlinks/data/crawlor_user/nutch/crawled-data/linkdb/data/crawle_user/nutch/crawled-data

  • 我正试着测试这只痒痒的爬行蜘蛛,但我不明白它为什么不爬行。它应该做的是在wikipedia的数学页面上爬行一个深度级别,然后返回每个爬行页面的标题。我错过了什么?非常感谢您的帮助! 设置: 日志: