scrapy spider的输出不同于scrapy shell

时间:2017-12-05 02:08:38

标签: python scrapy web-crawler

我是scrapy的新手,并试图找出为什么我能够从scrapy shell中提取我需要的元素,而不是从命令行创建的scrapy spider中提取。

在scrapy shell中,我做了以下事情:

pipenv run scrapy shell http://quotes.toscrape.com/

然后

response.css('small.author::text').extract()

返回以下内容:

  

['Albert Einstein','J.K。罗琳','阿尔伯特爱因斯坦','简奥斯汀','玛丽莲梦露','阿尔伯特爱因斯坦','安德烈吉德','托马斯A.爱迪生','埃莉诺罗斯福','史蒂夫马丁']

这完全符合预期。但是当我创建一个scrapy蜘蛛并在之后运行它时,我开始遇到一些问题。我的代码如下:

# -*- coding: utf-8 -*-
import scrapy

class Yolo1Spider(scrapy.Spider):
    name = 'yolo1'
    allowed_domains = ['toscrape.com']
    start_urls = ['http://http://quotes.toscrape.com/']

    def parse(self, response):
        self.log('Just visited' + response.url)
        yield {
            'author': response.css('small.author::text').extract()
            }

我从命令行运行蜘蛛:

pipenv run scrapy crawl yolo1

我得到的错误如下:

  

2017-12-04 20:03:56 [yolo1] DEBUG:刚刚访问过:http://www.dnsrsearch.com/index.php?origURL = http://http/quotes.toscrape.com/&bc=   2017-12-04 20:03:56 [scrapy.core.scraper]错误:处理错误{'author':[]}   Traceback(最近一次调用最后一次):     _runCallbacks中的文件“c:\ users \ alice.virtualenvs \ all-the-places-c44chfla \ lib \ site-packages \ twisted \ internet \ defer.py”,第653行       current.result = callback(current.result,* args,** kw)     在process_item中输入文件“C:\ Users \ alice \ all-the-places \ locations \ pipelines.py”,第16行       ref = item ['ref']   KeyError:'ref'

我感觉我只是缺少一些简单的东西,但对于我的生活,我无法理解它并且一直在检查所有地方。

你可以在蜘蛛爬行的输出中看到我写的调试行打印出来,但之后我得到一个错误。真的以为我应该从蜘蛛和命令行工作中得到相同的输出。

1 个答案:

答案 0 :(得分:0)

你在启动网址中犯了错误 - 你有http://两次。

请参阅http://http://quotes.toscrape.com/