1. 程式人生 > >Request和Response

Request和Response

ini resp ble 載器 css選擇器 爬蟲 head 裏的 can

Request對象:

class Request(object_ref):

        def __init__(self, url, callback=None, method=‘GET‘, headers=None, body=None,
                 cookies=None, meta=None, encoding=‘utf-8‘, priority=0,
                 dont_filter=False, errback=None, flags=None):

        self._encoding = encoding  # this one has to be set first
        self.method = str(method).upper()
        self._set_url(url)
        self._set_body(body)
        assert isinstance(priority, int), "Request priority not an integer: %r" % priority
        self.priority = priority

        if callback is not None and not callable(callback):
            raise TypeError(‘callback must be a callable, got %s‘ % type(callback).__name__)
        if errback is not None and not callable(errback):
            raise TypeError(‘errback must be a callable, got %s‘ % type(errback).__name__)
        assert callback or not errback, "Cannot use errback without a callback"
        self.callback = callback
        self.errback = errback

        self.cookies = cookies or {}
        self.headers = Headers(headers or {}, encoding=encoding)
        self.dont_filter = dont_filter

        self._meta = dict(meta) if meta else None
        self.flags = [] if flags is None else list(flags)

Request對象在我們寫爬蟲,爬取一頁的數據需要重新發送一個請求的時候調用。這個類需要傳遞一些參數,其中比較常用的參數有:

  1. url:這個request對象發送請求的url。
  2. callback:在下載器下載完相應的數據後執行的回調函數。
  3. method:請求的方法。默認為GET方法,可以設置為其他方法。
  4. headers:請求頭,對於一寫固定的設置,放在settings.py中指定就可以了。對於那些非固定的,可以發送請求的時候指定。
  5. meta:比較常用。用於在不同的請求之間傳遞參數用的。
  6. encoding:編碼。默認的為utf-8,使用默認的就可以了。
  7. dont-filter:表示不由調度器過濾。在執行多次重復的請求的時候用的比較多。
  8. errback:在發生錯誤的時候執行的函數。

Response對象

Response一般由Scrapy給你自動構建的。因此開發者不需要關心如何構建Response對象,而是如何使用他。Response對象由很多屬性,可以用來提取數據的。主要由以下屬性:

  1. meta:從其他請求傳過來的meta屬性,可以用來保持多個請求之間的數據連接。
  2. encoding:返回當前字符串編碼和解碼格式。
  3. text:將返回來的數據作為unicode字符串返回。
  4. body:將返回來的數據作為bytes字符串返回。
  5. xpath:xpath選擇器。
  6. css:css選擇器。

發送POST請求:

有時候我們想要在請求數據的時候發送post請求,那麽這個時候需要使用Request

的子類FormRequest來實現。如果想要在爬蟲一開始的時候就發送POST請求,那麽需要在爬蟲類中重寫start_requests(self)方法,並且不再調用start_urls裏的url

Request和Response