簡體   English   中英

如何在沒有回調的情況下從scrapy.Request獲得響應?

[英]How to get response from scrapy.Request without callback?

我想發送一個請求並等待來自服務器的響應以執行依賴於動作的操作。 我寫以下

resp = yield scrapy.Request(*kwargs)

並得到 None 。 在文檔中我發現需要使用 call_back 函數,但是這個函數在處理下一個命令后調用。 如何等待服務器的響應?

我找到了具有inline_requests裝飾器的inline_requests模塊。

它解決了我的問題。

這不是應該如何使用scrapy,因為等待響應與使用回調相同。 如果您需要繼續處理先前的響應和新的響應,您可以始終傳遞並繼續傳遞meta參數上的響應。

現在,為了使這有時更具可讀性,您還可以使用scrapy-inline-requests ,它與之前在引擎蓋下解釋的完全相同,因為它不會停止scrapy,而是按順序發出以下請求(與之后執行請求相同)另一個帶回調)。

如果使用scrapy-inline-requests請小心使方法僅作為生成器,並在處理新的內聯請求時發送新的請求或項目。

這不是這個問題的答案,而是如何獲取響應對象並使用 xpath 解析它的替代方法。 這里我使用了請求、bs4 和 lxml 庫。

import requests
from bs4 import BeautifulSoup
from lxml import etree

url = 'your_url'
soup = BeautifulSoup(requests.get(url).text, 'html.parser')
dom = etree.HTML(str(soup))
target_data = dom.xpath("//div......target path......")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM