iT邦幫忙

0

如何利用scrapy request 中的callback函數回傳布林值?

run = scrapy.Request('https://httpbin.org/ip',callback=self.proxy_check_available, meta=meta, dont_filter=True,errback = lambda x: self.download_errback(x,i['proxy']))
def proxy_check_available(self, response):
        json_data = json.loads(response.text)['origin']
        print(json_data)
        proxy_ip = response.meta['_proxy_ip']+', '+response.meta['_proxy_ip']
        print('proxy_ip:'+proxy_ip)
        if proxy_ip == json.loads(response.text)['origin']:
            return True
        else:
            return False

我希望能夠把True或False的值回傳到第一個function
想請問應該如何呼叫?
網路上查好像只查得到由第一個function傳值給callback function
卻沒有倒過來的例子。

froce iT邦大師 3 級 ‧ 2019-12-17 07:12:53 檢舉
Callback就是指在某個函式執行後再執行的某個函式,你要執行前檢查的話,該找的的東西是閉包和裝飾子
Huiicat iT邦新手 5 級 ‧ 2019-12-17 14:02:00 檢舉
因為我是想將request之後執行的callback函式中回傳,並不是request之前檢查@@
這樣的話應該使用什麼方法比較好呢?

1 個回答

2
froce
iT邦大師 3 級 ‧ 2019-12-18 00:09:31
最佳解答

剛剛幫你看了一下文件,我自己是沒用過scrapy

def proxy_check_available(self, response):
        json_data = json.loads(response.text)['origin']
        print(json_data)
        proxy_ip = response.meta['_proxy_ip']+', '+response.meta['_proxy_ip']
        print('proxy_ip:'+proxy_ip)
        if proxy_ip == json.loads(response.text)['origin']:
            response.meta["proxy_check_available"] = True
        else:
            response.meta["proxy_check_available"] = False

Request物件get以後,永遠是回傳Response物件,不過好像你可以透過callback改變Response物件的meta。

run = scrapy.Request('https://httpbin.org/ip',callback=self.proxy_check_available, meta=meta, dont_filter=True,errback = lambda x: self.download_errback(x,i['proxy']))

print(run.meta["proxy_check_available"])
Huiicat iT邦新手 5 級 ‧ 2019-12-20 04:53:02 檢舉

非常感謝您幫我找出解決方法!

我要發表回答

立即登入回答