为什么print()函数没有回显到控制台?

时间:2018-10-01 16:48:39

标签: python scrapy

十多年来我都没有编写任何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方法中的网址。我不知道的是,为什么那些简单的print语句不会在stdout上打印任何内容?他们保持沉默。似乎没有一种方法可以将任何内容回显到控制台,我很好奇我在这里缺少什么。

1 个答案:

答案 0 :(得分:2)

您在蜘蛛网中执行的两个请求均会收到package main import ( "database/sql" "encoding/json" "log" ) // NullString type NullString struct { Set bool sql.NullString } func (n *NullString) UnmarshalJSON(b []byte) error { n.Set = true n.Valid = string(b) != "null" e := json.Unmarshal(b, &n.String) return e } type Person struct { Name NullString `json:"name"` } func BuildUpdateSQL(jsonString string) string { p := Person{} e := json.Unmarshal([]byte(jsonString), &p) if e != nil { log.Println(e) } log.Printf("%#v", p) return "" } func main() { BuildUpdateSQL(`{"field_not_exist":"samantha"}`) BuildUpdateSQL(`{"name":"samantha"}`) BuildUpdateSQL(`{"name":null}`) } 个响应。默认情况下,Scrapy会忽略具有这种状态的响应,并且不会调用您的回调。

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

您可以更改handle_httpstatus_list方法,以使请求指示Scrapy甚至处理404个响应:

start_requests