亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Scrapy爬蟲入門教程八

2019-11-06 06:07:17
字體:
來源:轉載
供稿:網友

簡單的Python版本管理:pyenv Scrapy爬蟲入門教程一 Scrapy爬蟲入門教程二 Scrapy爬蟲入門教程三 Scrapy爬蟲入門教程四 Scrapy爬蟲入門教程五 Scrapy爬蟲入門教程六 Scrapy爬蟲入門教程七

Scrapy shell配置shell啟動shell使用shell可用快捷鍵可用Scrapy對象shell會話的示例從爬蟲調用shell檢查響應

開發環境: Python 3.6.0 版本 (當前最新) Scrapy 1.3.2 版本 (當前最新)

Scrapy shell

Scrapy shell是一個交互式shell,您可以在此快速嘗試和調試您的抓取代碼,而無需運行爬蟲程序。它用于測試數據提取代碼,但實際上可以使用它來測試任何類型的代碼,因為它也是一個常規的Python shell。

shell用于測試XPath或CSS表達式,并查看它們如何工作,以及他們從您要嘗試抓取的網頁中提取的數據。它允許您在編寫爬蟲時交互式測試表達式,而無需運行爬蟲來測試每個更改。

一旦你熟悉了Scrapy shell,你會發現它是開發和調試你的爬蟲的一個非常寶貴的工具。

配置shell

如果你安裝了ipython,Scrapy shell會使用它(而不是標準的Python控制臺)。該IPython的控制臺功能更強大,并提供智能自動完成和彩色輸出,等等。

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

Scrapy還支持bpython,并且將嘗試在IPython 不可用的地方使用它。

通過scrapy的設置,您可以配置為使用中的任何一個 ipythonbpython或標準python外殼,安裝無論哪個。這是通過設置SCRAPY_PYTHON_SHELL環境變量來完成的; 或通過在scrapy.cfg中定義它:

[settings]shell = bpython

啟動shell

要啟動Scrapy shell,可以使用如下shell命令:

scrapy shell <url>

其中,是您要抓取的網址。

shell也適用于本地文件。如果你想玩一個網頁的本地副本,這可以很方便。shell了解本地文件的以下語法:

# UNIX-stylescrapy shell ./path/to/file.htmlscrapy shell ../other/path/to/file.htmlscrapy shell /absolute/path/to/file.html# File URIscrapy shell file:///absolute/path/to/file.html

注意

當使用相對文件路徑時,是顯式的,并在它們前面./(或../相關時)。 將不會像一個人所期望的那樣工作(這是設計,而不是一個錯誤)。scrapy shell index.html 因為shell喜歡文件URI上的HTTP URL,并且index.html在語法上類似example.com, shell會將其視為index.html域名并觸發DNS查找錯誤:

$ scrapy shell index.html[ ... scrapy shell starts ... ][ ... traceback ... ]twisted.internet.error.DNSLookupError: DNS lookup failed:address 'index.html' not found: [Errno -5] No address associated with hostname.

shell將不會預先測試index.html 當前目錄中是否存在調用的文件。再次,明確。

使用shell

Scrapy shell只是一個普通的Python控制臺(或IPython控制臺,如果你有它),為方便起見,它提供了一些額外的快捷方式功能。

可用快捷鍵

shelp() - 打印有可用對象和快捷方式列表的幫助 *fetch(url[, redirect=True]) - 從給定的URL獲取新的響應,并相應地更新所有相關對象。你可以選擇要求HTTP 3xx重定向,不要通過redirect=Falsefetch(request) - 從給定請求獲取新響應,并相應地更新所有相關對象。view(response) - 在本地Web瀏覽器中打開給定的響應,以進行檢查。這將向響應正文添加一個標記,以便正確顯示外部鏈接(如圖片和樣式表)。但請注意,這將在您的計算機中創建一個臨時文件,不會自動刪除。

可用Scrapy對象

Scrapy shell自動從下載的頁面創建一些方便的對象,如Response對象和 Selector對象(對于HTML和xml內容)。

這些對象是:

crawler- 當前Crawler對象。spider- 已知處理URL的Spider,或者Spider如果沒有為當前URL找到的爬蟲,則為 對象request- Request最后一個抓取頁面的對象。您可以replace() 使用fetch 快捷方式或使用快捷方式獲取新請求(而不離開shell)來修改此請求。response- 包含Response最后一個抓取頁面的對象settings- 當前Scrapy設置

shell會話的示例

下面是一個典型的shell會話示例,我們首先抓取 http://scrapy.org頁面,然后繼續抓取https://reddit.com 頁面。最后,我們將(Reddit)請求方法修改為POST并重新獲取它獲取錯誤。我們通過在Windows中鍵入Ctrl-D(在Unix系統中)或Ctrl-Z結束會話。

請記住,在這里提取的數據可能不一樣,當你嘗試它,因為那些網頁不是靜態的,可能已經改變了你測試這個。這個例子的唯一目的是讓你熟悉Scrapy shell的工作原理。

首先,我們啟動shell: scrapy shell 'http://scrapy.org' --nolog

然后,shell獲取URL(使用Scrapy下載器)并打印可用對象和有用的快捷方式列表(您會注意到這些行都以[s]前綴開頭):

[s] Available Scrapy objects:[s] scrapy scrapy module (contains scrapy.Request, scrapy.Selector, etc)[s] crawler <scrapy.crawler.Crawler object at 0x7f07395dd690>[s] item {}[s] request <GET http://scrapy.org>[s] response <200 https://scrapy.org/>[s] settings <scrapy.settings.Settings object at 0x7f07395dd710>[s] spider <DefaultSpider 'default' at 0x7f0735891690>[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 objects[s] shelp() Shell help (PRint this help)[s] view(response) View response in a browser>>>

之后,我們可以開始使用對象:

>>> response.xpath('//title/text()').extract_first()'Scrapy | A Fast and Powerful Scraping and Web Crawling Framework'>>> fetch("http://reddit.com")>>> response.xpath('//title/text()').extract()['reddit: the front page of the internet']>>> request = request.replace(method="POST")>>> fetch(request)>>> response.status404>>> from pprint import pprint>>> pprint(response.headers){'Accept-Ranges': ['bytes'], 'Cache-Control': ['max-age=0, must-revalidate'], 'Content-Type': ['text/html; charset=UTF-8'], 'Date': ['Thu, 08 Dec 2016 16:21:19 GMT'], 'Server': ['snooserv'], 'Set-Cookie': ['loid=KqNLou0V9SKMX4qb4n; Domain=reddit.com; Max-Age=63071999; Path=/; expires=Sat, 08-Dec-2018 16:21:19 GMT; secure', 'loidcreated=2016-12-08T16%3A21%3A19.445Z; Domain=reddit.com; Max-Age=63071999; Path=/; expires=Sat, 08-Dec-2018 16:21:19 GMT; secure', 'loid=vi0ZVe4NkxNWdlH7r7; Domain=reddit.com; Max-Age=63071999; Path=/; expires=Sat, 08-Dec-2018 16:21:19 GMT; secure', 'loidcreated=2016-12-08T16%3A21%3A19.459Z; Domain=reddit.com; Max-Age=63071999; Path=/; expires=Sat, 08-Dec-2018 16:21:19 GMT; secure'], 'Vary': ['accept-encoding'], 'Via': ['1.1 varnish'], 'X-Cache': ['MISS'], 'X-Cache-Hits': ['0'], 'X-Content-Type-Options': ['nosniff'], 'X-Frame-Options': ['SAMEORIGIN'], 'X-Moose': ['majestic'], 'X-Served-By': ['cache-cdg8730-CDG'], 'X-Timer': ['S1481214079.394283,VS0,VE159'], 'X-Ua-Compatible': ['IE=edge'], 'X-Xss-Protection': ['1; mode=block']}>>>

從爬蟲調用shell檢查響應

有時候,你想檢查在爬蟲的某一點被處理的響應,如果只檢查你期望的響應到達那里。

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

下面是一個如何從爬蟲調用它的例子:

import scrapyclass MySpider(scrapy.Spider): name = "myspider" start_urls = [ "http://example.com", "http://example.org", "http://example.net", ] def parse(self, response): # We want to inspect one specific response. if ".org" in response.url: from scrapy.shell import inspect_response inspect_response(response, self) # Rest of parsing code.

當你運行爬蟲,你會得到類似的東西:

2014-01-23 17:48:31-0400 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://example.com> (referer: None)2014-01-23 17:48:31-0400 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://example.org> (referer: None)[s] Available Scrapy objects:[s] crawler <scrapy.crawler.Crawler object at 0x1e16b50>...>>> response.url'http://example.org'

然后,您可以檢查提取代碼是否正常工作:

>>> response.xpath('//h1[@class="fn"]')[]

不,不是。因此,您可以在Web瀏覽器中打開響應,看看它是否是您期望的響應:

>>> view(response)True

最后,您按Ctrl-D(或Windows中的Ctrl-Z)退出外殼并繼續抓?。?/p>>>> ^D2014-01-23 17:50:03-0400 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://example.net> (referer: None)...

請注意,您不能使用fetch此處的快捷方式,因為Scrapy引擎被shell阻止。然而,在你離開shell之后,爬蟲會繼續爬到它停止的地方,如上圖所示。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲福利视频免费观看| 97视频在线免费观看| 欧洲美女7788成人免费视频| 在线国产精品播放| 国产欧美最新羞羞视频在线观看| 日韩国产精品视频| 亚洲跨种族黑人xxx| 4438全国成人免费| 亚洲美女在线视频| 欧美猛男性生活免费| 日韩欧美中文字幕在线播放| 亚洲国产一区二区三区在线观看| 国产精品99久久久久久久久| 成人午夜激情免费视频| 精品国产一区二区三区久久久狼| 亚洲精品久久久久久久久久久久久| 国产精品久久久久久五月尺| 欧美极品少妇全裸体| 日韩精品视频在线免费观看| 日本成人黄色片| 97视频免费观看| 欧美激情第6页| 91精品久久久久久久久久| 日韩三级影视基地| 中文字幕亚洲综合久久| 成人国产精品免费视频| 国产精品美女主播在线观看纯欲| 精品少妇一区二区30p| 日韩在线观看成人| 成人观看高清在线观看免费| 伊人伊成久久人综合网站| 日韩av在线不卡| 久久影视电视剧免费网站| 国产精品伦子伦免费视频| 久久婷婷国产麻豆91天堂| 日本精品一区二区三区在线播放视频| 精品一区二区亚洲| 亚洲国产日韩欧美在线99| 国产一区二区三区在线播放免费观看| 中文精品99久久国产香蕉| 欧美一级高清免费播放| 国产精品视频专区| 亚洲在线观看视频| 国产欧美在线看| 国产精品精品视频一区二区三区| 日韩欧美在线视频日韩欧美在线视频| 欧美日韩午夜剧场| 欧美视频中文字幕在线| 青青草99啪国产免费| 亚洲free性xxxx护士白浆| 久久久久久久久久久人体| 日韩成人在线免费观看| 久久影院中文字幕| 色综合久久久久久中文网| 亚洲精品电影网站| 欧美激情在线狂野欧美精品| 久久精品91久久久久久再现| 青青青国产精品一区二区| 91中文在线视频| 日韩一区二区在线视频| 亚洲精品电影在线| 精品久久久久久久久久ntr影视| 精品国产一区久久久| 在线亚洲国产精品网| 欧美午夜片欧美片在线观看| 国产成人一区二区三区| 久久青草精品视频免费观看| 欧美成人精品三级在线观看| 欧美大尺度电影在线观看| 久久99久久99精品中文字幕| 亚洲久久久久久久久久久| 91精品久久久久久久久久久久久久| 久久人人爽人人爽人人片av高清| 成人a视频在线观看| 国产精品美女呻吟| 色妞在线综合亚洲欧美| 亚洲成成品网站| 欧美小视频在线观看| 久久夜色精品亚洲噜噜国产mv| 成人免费高清完整版在线观看| 九九热精品在线| 国产精品福利在线观看| 国产日韩欧美黄色| 欧美视频免费在线观看| 亚洲黄页网在线观看| 精品无人区乱码1区2区3区在线| 久久999免费视频| 91精品国产高清自在线看超| 亚洲欧美精品在线| 国产一区二区成人| 国产精品日韩一区| 国产999精品久久久影片官网| 亚洲国产日韩一区| 中文字幕少妇一区二区三区| 欧美中文字幕在线播放| 亚洲福利在线播放| 欧美性受xxxx黑人猛交| 在线精品视频视频中文字幕| 国产精品极品尤物在线观看| 日韩不卡在线观看| 国产精品91久久久久久| 国产经典一区二区| 国产成人精品在线观看| 国产精品美女主播在线观看纯欲| 伊人久久免费视频| 91在线直播亚洲| 亚洲欧美中文字幕在线一区| 亚洲电影第1页| 日韩欧美999| 亚洲视频国产视频| 欧美一级淫片aaaaaaa视频| 伊是香蕉大人久久| 欧美精品成人91久久久久久久| 精品国产一区二区三区久久狼黑人| 国语自产精品视频在线看| 色吧影院999| 国产xxx69麻豆国语对白| 欧美日韩在线视频一区| 国产精品夜间视频香蕉| 亚洲香蕉伊综合在人在线视看| 亚洲欧美国产一区二区三区| 粉嫩av一区二区三区免费野| 国产91色在线播放| 日韩h在线观看| 久久精品国产免费观看| 最近2019年手机中文字幕| 日韩av在线网站| 欧美大秀在线观看| 国自在线精品视频| 欧美午夜丰满在线18影院| 97在线免费观看| 亚洲福利视频久久| 国产精品一区二区三区免费视频| 亚洲成av人乱码色午夜| 久久欧美在线电影| 国产精品自产拍在线观| 国产精品久久久久久久久久ktv| 欧美亚洲成人xxx| 91精品久久久久久久久| 亚洲欧美日韩精品久久亚洲区| 精品综合久久久久久97| 国语自产精品视频在线看抢先版图片| 美女撒尿一区二区三区| 在线播放国产一区中文字幕剧情欧美| 欧美激情精品久久久久久变态| 欧美一级淫片aaaaaaa视频| 色妞在线综合亚洲欧美| 欧美日韩免费观看中文| 色综合久久88色综合天天看泰| 久久精品久久久久电影| 欧美在线一区二区三区四| 91久久精品国产91性色| 日韩av123| 久久av在线看| 久久久久久中文字幕| 97精品久久久中文字幕免费| 欧美疯狂做受xxxx高潮| 国产亚洲精品va在线观看| 国产成人精品一区二区| 亚洲精品国偷自产在线99热| 国产精品av在线播放| 国产最新精品视频| 欧美视频专区一二在线观看| 欧美日韩精品在线|