<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 調試spiders > 譯者:[OSGeo 中國](https://www.osgeo.cn/) 本文檔介紹調試spider的最常用技術。考慮下面的殘廢 Spider : ```py import scrapy from myproject.items import MyItem class MySpider(scrapy.Spider): name = 'myspider' start_urls = ( 'http://example.com/page1', 'http://example.com/page2', ) def parse(self, response): # <processing code not shown> # collect `item_urls` for item_url in item_urls: yield scrapy.Request(item_url, self.parse_item) def parse_item(self, response): # <processing code not shown> item = MyItem() # populate `item` fields # and extract item_details_url yield scrapy.Request(item_details_url, self.parse_details, meta={'item': item}) def parse_details(self, response): item = response.meta['item'] # populate more `item` fields return item ``` 基本上,這是一個簡單的spider,它解析兩頁項目(start-url)。項目還有一個包含附加信息的詳細信息頁,因此我們使用 `meta` 的功能 [`Request`](request-response.html#scrapy.http.Request "scrapy.http.Request") 傳遞部分填充的項。 ## 解析命令 檢查 Spider 輸出的最基本方法是使用 [`parse`](commands.html#std:command-parse) 命令。它允許在方法級別檢查spider的不同部分的行為。它的優點是靈活和易于使用,但不允許在方法內部調試代碼。 為了查看從特定URL中獲取的項目: ```py $ scrapy parse --spider=myspider -c parse_item -d 2 <item_url> [ ... scrapy log lines crawling example.com spider ... ] >>> STATUS DEPTH LEVEL 2 <<< # Scraped Items ------------------------------------------------------------ [{'url': <item_url>}] # Requests ----------------------------------------------------------------- [] ``` 使用 `--verbose` 或 `-v` 選項我們可以看到每個深度級別的狀態: ```py $ scrapy parse --spider=myspider -c parse_item -d 2 -v <item_url> [ ... scrapy log lines crawling example.com spider ... ] >>> DEPTH LEVEL: 1 <<< # Scraped Items ------------------------------------------------------------ [] # Requests ----------------------------------------------------------------- [<GET item_details_url>] >>> DEPTH LEVEL: 2 <<< # Scraped Items ------------------------------------------------------------ [{'url': <item_url>}] # Requests ----------------------------------------------------------------- [] ``` 檢查從一個開始的項目,也可以很容易地實現使用:: ```py $ scrapy parse --spider=myspider -d 3 'http://example.com/page1' ``` ## Scrapy Shell 而 [`parse`](commands.html#std:command-parse) 命令對于檢查 Spider 的行為非常有用,除了顯示接收到的響應和輸出之外,檢查回調中發生的情況幾乎沒有幫助。如何調試情況 `parse_details` 有時沒有收到物品? 幸運的是, [`shell`](commands.html#std:command-shell) 在這種情況下,你的面包和黃油(見 [從spiders調用shell來檢查響應](shell.html#topics-shell-inspect-response) ): ```py from scrapy.shell import inspect_response def parse_details(self, response): item = response.meta.get('item', None) if item: # populate more `item` fields return item else: inspect_response(response, self) ``` 參見: [從spiders調用shell來檢查響應](shell.html#topics-shell-inspect-response) . ## 在瀏覽器中打開 有時,您只想查看某個響應在瀏覽器中的外觀,可以使用 `open_in_browser` 功能。以下是您將如何使用它的示例: ```py from scrapy.utils.response import open_in_browser def parse_details(self, response): if "item name" not in response.body: open_in_browser(response) ``` `open_in_browser` 將打開一個瀏覽器,此時Scrapy接收到響應,調整 [base tag](https://www.w3schools.com/tags/tag_base.asp) 以便正確顯示圖像和樣式。 ## Logging 日志記錄是獲取 Spider 運行信息的另一個有用選項。盡管不太方便,但它的優點是,如果需要,日志在將來的所有運行中都將可用: ```py def parse_details(self, response): item = response.meta.get('item', None) if item: # populate more `item` fields return item else: self.logger.warning('No item received for %s', response.url) ``` 有關詳細信息,請檢查 [Logging](logging.html#topics-logging) 部分。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看