十多年来我都没有编写任何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上打印任何内容?他们保持沉默。似乎没有一种方法可以将任何内容回显到控制台,我很好奇我在这里缺少什么。
答案 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