Python Can';不要顺利地开始
我已经开始使用官方教程,但我不能成功地使用它。我的代码与官方教程完全相同Python Can';不要顺利地开始,python,scrapy,Python,Scrapy,我已经开始使用官方教程,但我不能成功地使用它。我的代码与官方教程完全相同 import scrapy class QuotesSpider(scrapy.Spider): name = 'Quotes'; def start_requests(self): urls = [ 'http://quotes.toscrape.com/page/1/', ] for url in urls:
import scrapy
class QuotesSpider(scrapy.Spider):
name = 'Quotes';
def start_requests(self):
urls = [
'http://quotes.toscrape.com/page/1/',
]
for url in urls:
yield scrapy.Request(url=url,callback = self.parse);
def parse(self, response):
page = response.url.split('/')[-2];
print('--------------------------------->>>>');
for quote in response.css('div.quote'):
yield {
'text': quote.css('span.text::text').get(),
'author': quote.css('small.author::text').get(),
'tags': quote.css('div.tags a.tag::text').getall(),
}
当我在CMD上用指令(刮擦爬网引号)执行它时,结果如下:
2020-12-20 10:00:25 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://quotes.toscrape.com/page/1/> (referer: None)
2020-12-20 10:00:26 [scrapy.core.scraper] ERROR: Spider error processing <GET http://quotes.toscrape.com/page/1/> (referer: None)
Traceback (most recent call last):
File "c:\users\a\appdata\local\programs\python\python38-32\lib\site-packages\twisted\internet\defer.py", line 1418, in _inlineCallbacks
result = g.send(result)
StopIteration: <200 http://quotes.toscrape.com/page/1/>
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\users\a\appdata\local\programs\python\python38-32\lib\site-packages\scrapy\utils\defer.py", line 55, in mustbe_deferred
result = f(*args, **kw)
File "c:\users\a\appdata\local\programs\python\python38-32\lib\site-packages\scrapy\core\spidermw.py", line 58, in process_spider_input
return scrape_func(response, request, spider)
File "c:\users\a\appdata\local\programs\python\python38-32\lib\site-packages\scrapy\core\scraper.py", line 149, in call_spider
warn_on_generator_with_return_value(spider, callback)
File "c:\users\a\appdata\local\programs\python\python38-32\lib\site-packages\scrapy\utils\misc.py", line 245, in warn_on_generator_with_return_value
if is_generator_with_return_value(callable):
File "c:\users\a\appdata\local\programs\python\python38-32\lib\site-packages\scrapy\utils\misc.py", line 230, in is_generator_with_return_value
tree = ast.parse(dedent(inspect.getsource(callable)))
File "c:\users\a\appdata\local\programs\python\python38-32\lib\ast.py", line 47, in parse
return compile(source, filename, mode, flags,
File "<unknown>", line 1
def parse(self, response):
^
IndentationError: unexpected indent
2020-12-20 10:00:26 [scrapy.core.engine] INFO: Closing spider (finished)
2020-12-20 10:00:26 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
2020-12-20 10:00:25[scrapy.core.engine]调试:爬网(200)(参考:无)
2020-12-20 10:00:26[scrapy.core.scraper]错误:Spider错误处理(参考:无)
回溯(最近一次呼叫最后一次):
文件“c:\users\a\appdata\local\programs\python\python38-32\lib\site packages\twisted\internet\defer.py”,第1418行,在内联回调中
结果=g.send(结果)
停止迭代:
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“c:\users\a\appdata\local\programs\python\python38-32\lib\site packages\scrapy\utils\defer.py”,第55行,必须延迟
结果=f(*参数,**kw)
文件“c:\users\a\appdata\local\programs\python\python38-32\lib\site packages\scrapy\core\spidermw.py”,第58行,进程中输入
返回scrape_func(响应、请求、spider)
文件“c:\users\a\appdata\local\programs\python\python38-32\lib\site packages\scrapy\core\scraper.py”,第149行,在call\u spider中
使用返回值警告\u生成器上的\u(爬行器,回调)
文件“c:\users\a\appdata\local\programs\python\python38-32\lib\site packages\scrapy\utils\misc.py”,第245行,在带有返回值的\u生成器\u上的警告\u中
如果是带有返回值的生成器(可调用):
文件“c:\users\a\appdata\local\programs\python\python38-32\lib\site packages\scrapy\utils\misc.py”,第230行,在is_generator_中,带有返回值
tree=ast.parse(dedent(inspect.getsource(可调用)))
文件“c:\users\a\appdata\local\programs\python\python38-32\lib\ast.py”,第47行,在parse中
返回编译(源、文件名、模式、标志、,
文件“”,第1行
def解析(自我,响应):
^
缩进错误:意外缩进
2020-12-20 10:00:26[刮屑芯发动机]信息:关闭卡盘(已完成)
2020-12-20 10:00:26[斯拉比统计局]信息:倾销斯拉比统计局:
我检查了很多次,但我仍然不知道如何处理它!您可能会在这里找到解决问题的方法
有一个
缩进错误
。需要修复代码缩进。它工作正常。这与产量无关,我认为要么是所有分号,要么是getall()之后的最后一个逗号
'tags':quote.css('div.tags a.tag::text').getall(),
可能会让口译员期待其他事情
删除分号和最后一个逗号-它仍然不起作用吗
错误输出显示以下位置的缩进错误:
def parse
^
这告诉您,是之前的某个原因导致了它,所以我想它应该是第一个分号。当我在响应中删除了quote的代码时,我可以成功运行它。css('div.quote'):yield{'text':quote.css('span.text::text')。get(),'author':quote.css('small.author::text')。get(),'tags':quote.css('div.tags a.tag::text').getall(),}问题是当我使用yield…时,出现了错误。我知道错误是indicationError。当我消除函数“parse”的“yield”时。我的程序可以成功执行。但是我在缩进上检查了很多次,仍然错误。不需要;行的结尾。删除它。你能显示错误吗?def parse(self,response):page=response.url.split(“/”)[-2];print(“------------------------------------->>>>>”);for-quote-in-response.css('div.quote'):yield{'text':quote.css('span.text::text').get(),'author':quote.css('div.tags a.tag::text')).getall(),}如果我删除产量,程序可以顺利执行