1. 程式人生 > >二.Pyhon_scrapy終端(scrapy shell)學習筆記

二.Pyhon_scrapy終端(scrapy shell)學習筆記

等等 print ins ide 信息 unix xtra rec .net

Scrapy shell

Scrapy shell是一個交互式shell,您可以非常快速地嘗試調試您的抓取代碼,而無需運行蜘蛛。它用於測試數據提取代碼,但您實際上可以使用它來測試任何類型的代碼,因為它也是常規的Python shell。

配置

官方原文:如果安裝了IPython,Scrapy shell將使用它(而不是標準的Python控制臺)。IPython的控制臺功能更強大,並提供智能自動完成和彩色輸出,等等。

我們強烈建議您安裝IPython,特別是如果您正在使用Unix系統(IPython擅長)。有關 詳細信息,請參閱IPython安裝指南

Scrapy也支持bpython,並且會嘗試在IPython 不可用的地方使用它

調用的話,可以進入你文件中的scrapy.cfg中設置,添加,例如ipython:

可以在筆記一的E:\pythoncode中設置:

[settings]
shell = ipython

啟動

進入命令行
scrapy shell <url>

scrapy也可以抓取本地文件:

scrapy shell X:///XXX/XXX/XXX/XXX.html

使用

Scrapy shell只是一個常規的Python控制臺(如果有的話,它可以是IPython控制臺),它提供了一些額外的快捷功能以方便使用。

Available Shortcuts(可用的命令?)

shelp()

fetch(url[, redirect=True])

fetch(request)

view(response)

可用的Scrapy對象

Scrapy shell自動從下載的頁面創建一些方便的對象,如Response對象和 Selector對象

crawler- 當前Crawler對象。
spider- 已知處理URL的Spider,或者Spider當前URL沒有找到蜘蛛時的 對象
request- Request最後一個獲取頁面的對象。您可以replace() 使用fetch 快捷方式使用或獲取新請求(不離開shell)來修改此請求。

response- Response包含最後一個提取頁面的對象
settings- 目前的Scrapy設置

shell會話的例子

首先,進入E:\pythoncode,然後啟動shell:

scrapy shell "https://www.baidu.com" --nolog

可以看到使用的一些命令:

[s] Available Scrapy objects:
[s] scrapy scrapy module (contains scrapy.Request, scrapy.Selector, etc)
[s] crawler <scrapy.crawler.Crawler object at 0x0000000000B27390>
[s] item {}
[s] request <GET https://www.baidu.com>
[s] settings <scrapy.settings.Settings object at 0x0000000004BA03C8>
[s] Useful shortcuts:
[s] fetch(url[, redirect=True]) Fetch URL and update local objects (by default
, redirects are followed)
[s] fetch(req) Fetch a scrapy.Request and update local object
s
[s] shelp() Shell help (print this help)
[s] view(response) View response in a browser

接著我們輸入:
response.css("div.celltop a b::text").extract_first() Information
fetch("http://www.guoxuedashi.com/")
註:記得url要加前綴(http://或者https://
註:如果前面scrapy shell的時候沒有加--nolog,會顯示
註:DEBUG: Crawled (200)XXXXXXXXXXXXXXXXXX

response.css("a[target=_blank]::text").extract_first()
‘四庫全書‘

request = request.replace(method="POST")

fetch(request)

註:"POST","GET","PUT","HEAD"等等都是HTTP請求方法(一般是用GET,這裏用POST是想舉個例子)

response.status
200

註:200是網頁響應代碼

from pprint import pprint

pprint(response.headers)

註:ppint是美觀的print

從爬蟲中調用shell

有時您想要檢查蜘蛛的某個特定點正在處理的響應,如果只是為了檢查您期望的響應是否到達那裏。

這可以通過使用該scrapy.shell.inspect_response功能來實現。

在E:\pythoncode\myproject\spiders創建

import scrapy


class MySpider(scrapy.Spider):
    name = "scrapy_sh"
    start_urls = [
        "http://example.com",
        "http://example.org",
        "http://example.net",
    ]

    def parse(self, response):        
        if ".org" in response.url:
            from scrapy.shell import inspect_response
            inspect_response(response, self)
       
註:shell就出來了~
response.url
‘http://example.org‘

response.css("p::text").extract()
["This domain is established to be used for illustrative examples in doc..........."]

view(response)
True

註:Ctrl+Z或者Ctrl+D可以退出

附上源頭活水:https://docs.scrapy.org/en/latest/topics/shell.html

二.Pyhon_scrapy終端(scrapy shell)學習筆記