剛學的scrapy,現在遇到了這個問題很困擾我,情況是這樣的,這是我的程式從parse進入之后呼叫了next_one函式,然后進入next_one之后發起formrequest請求,結果回呼入next_two,進入next_two之后再呼叫next_three函式,但是這個時候就是進入不了next_three函式,debug也進入不了,而這時候改用request請求頁面,再debug,這時候就能夠進入next_three函式之中了,這是怎么回事,formrequest跟request同樣是異步回呼,為什么一個可以完成回呼,一個不可以所以我的問題有一下幾個 1、為什么在parse中呼叫函式還需要用yield,需要交給scrapy處理什么嗎
2、為什么同樣的程式request可以進入到第四個函式,而formrequest進入不了
3、到底scrapy中應該如何正確呼叫普通函式,如在parse中正確呼叫其他普通函式 麻煩各位大哥救救我。
uj5u.com熱心網友回復:

uj5u.com熱心網友回復:
只能使用yield來呼叫函式,不知道為什么。。。uj5u.com熱心網友回復:
我也遇到這個問題,無法直接呼叫spider內部函式。我的解決方法是:
把需要抽出來的方法放在spider外部,即可通過函式方式呼叫。直接定義函式或者使用class都可以。
但外部函式無法直接使用yield 回傳item。先return 得到資料,再在spider 內部使用yield即可。
...
class MySpider(scrapy.Spider):
def parse(self, response):
...
yield base.info(response)
...
class Base:
def info(self, response):
...
myitem = MyItem()
...
return myitem
yield 在spider內部只能適用 Request、item、dict 等等,錯誤使用 有報錯提示。
uj5u.com熱心網友回復:
其實可以呼叫,是我弄錯了
uj5u.com熱心網友回復:
果然是這樣,真是神奇了。難道必須要有回傳?呼叫的地方必須要去接識訓傳才能成功呼叫嗎
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/126291.html
