[英]How to understand callback function in scrapy.Request?
我正在閱讀 Web Scraping with Python 2nd Ed,並想使用 Scrapy 模塊從網頁中抓取信息。
我從文檔中獲得了以下信息: https://docs.scrapy.org/en/latest/topics/request-response.html
callback (callable) – function 將調用此請求的響應(一旦下載)作為其第一個參數。 有關更多信息,請參閱下面的將附加數據傳遞給回調函數。 如果請求沒有指定回調,則將使用蜘蛛的 parse() 方法。 請注意,如果在處理過程中引發異常,則會調用 errback。
我的理解是:
傳入 url 並像我們在請求模塊中一樣獲得響應
resp = requests.get(url)
傳入resp進行數據解析
解析(響應)
問題是:
class ArticleSpider(scrapy.Spider):
name='article'
def start_requests(self):
urls = [
'http://en.wikipedia.org/wiki/Python_'
'%28programming_language%29',
'https://en.wikipedia.org/wiki/Functional_programming',
'https://en.wikipedia.org/wiki/Monty_Python']
return [scrapy.Request(url=url, callback=self.parse) for url in urls]
def parse(self, response):
url = response.url
title = response.css('h1::text').extract_first()
print('URL is: {}'.format(url))
print('Title is: {}'.format(title))
您可以在此處找到有關self
的信息 - https://docs.python.org/3/tutorial/classes.html
關於這個問題:
can we extract URL from response parameter like this: url = response.url or should be url = self.url
您應該使用response.url
來獲取您當前抓取/解析的頁面的 URL
似乎您缺少一些與 python 類和 OOP 相關的概念。 閱讀 python文檔或至少閱讀這個問題是個好主意。
下面是 Scrapy 的工作原理,您實例化一個請求 object 並將其交給 Scrapy 調度程序。
yield scrapy.Request(url=url) #or use return like you did
Scrapy 將處理請求,下載 html 並將它返回的所有請求返回給回調 function。 如果您沒有在請求中設置回調 function (如我上面的示例),它將調用默認的 function 稱為parse
。
Parse 是 object 的一種方法(又名函數)。 您在上面的代碼中編寫了它,即使您沒有它仍然存在,因為您的 class 繼承了它的父 class 的所有功能
class ArticleSpider(scrapy.Spider): # <<<<<<<< here
name='article'
所以一個TL; 您的問題博士:
1-您沒有看到它,因為它發生在父 class 中。
2-你需要使用self.
所以 python 知道您正在引用蜘蛛實例的方法。
3- self
參數是它自己的實例,它被python使用。
4-Response 是一個獨立的 object,您的 parse 方法作為參數接收,因此您可以訪問它的屬性,如response.url
或response.headers
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.