我是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'
我感觉我只是缺少一些简单的东西,但对于我的生活,我无法理解它并且一直在检查所有地方。
你可以在蜘蛛爬行的输出中看到我写的调试行打印出来,但之后我得到一个错误。真的以为我应该从蜘蛛和命令行工作中得到相同的输出。
答案 0 :(得分:0)
你在启动网址中犯了错误 - 你有http://
两次。
请参阅http://http://quotes.toscrape.com/