Python 为什么print()函数不回显到控制台?

Python 为什么print()函数不回显到控制台?,python,scrapy,Python,Scrapy,我已经10多年没有写过任何Python代码了。因此,我尝试使用Scrapy从网站上收集一些信息: import scrapy class TutorialSpider(scrapy.Spider): name = "tutorial" def start_requests(self): urls = [ 'https://example.com/page/1', 'https://example.com/page

我已经10多年没有写过任何Python代码了。因此,我尝试使用Scrapy从网站上收集一些信息:

import scrapy

class TutorialSpider(scrapy.Spider):
    name = "tutorial"

    def start_requests(self):
        urls = [
            'https://example.com/page/1',
            'https://example.com/page/2',
        ]
        for url in urls:
            print(f'{self.name} spider')
            print(f'url is {url}')
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        print(response.url)
        self.log(response.url)
        sys.stdout.write('hello')

我正在尝试用
parse
方法解析url。我不明白的是,为什么那些简单的
打印
语句不会将任何内容打印到stdout?他们沉默了。似乎没有办法将那里的任何内容回显到控制台,我很好奇我在这里遗漏了什么。

您在spider中执行的两个请求都会收到
404未找到的响应。默认情况下,Scrapy会忽略具有这种状态的响应,并且不会调用回调

为了让您的
self.parse
回调调用此类响应,您必须使用
handle\u httpstatus\u list
元键将
404
状态代码添加到已处理状态代码列表中(更多信息)

您可以更改
start\u请求
方法,以便请求指示Scrapy处理404响应:

import scrapy

class TutorialSpider(scrapy.Spider):
    name = "tutorial"

    def start_requests(self):
        urls = [
            'https://example.com/page/1',
            'https://example.com/page/2',
        ]
        for url in urls:
            print(f'{self.name} spider')
            print(f'url is {url}')
            yield scrapy.Request(
                url=url,
                callback=self.parse,
                meta={'handle_httpstatus_list': [404]},
            )

    def parse(self, response):
        print(response.url)
        self.log(response.url)
        sys.stdout.write('hello')

你是如何使用这个类的?你真的在调用这些函数/方法吗?就目前的情况而言,您的代码似乎只是定义了一个类,而没有对它做任何操作。请有人向我解释我的问题应该如何以“离题”结束。关于缩进,我粘贴它的位置是正确的,我在这里更正了它。在您的示例代码中,您似乎没有创建类的实例或调用它的任何方法,爬行器的异步特性似乎正在干扰
print
stdout.write
,因此日志记录似乎是一种方法。您已经在使用内置记录器,因此可能找不到这些日志消息。。我建议您创建自己的日志,以便将消息与内置消息分开。