《Python網絡爬蟲》 課件 第2單元-爬取動態(tài)網頁_第1頁
《Python網絡爬蟲》 課件 第2單元-爬取動態(tài)網頁_第2頁
《Python網絡爬蟲》 課件 第2單元-爬取動態(tài)網頁_第3頁
《Python網絡爬蟲》 課件 第2單元-爬取動態(tài)網頁_第4頁
《Python網絡爬蟲》 課件 第2單元-爬取動態(tài)網頁_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Python網絡爬蟲第二單元爬取動態(tài)網頁教學概述概述動態(tài)網頁,是指跟靜態(tài)網頁相對的一種網頁編程技術。靜態(tài)網頁,隨著html代碼的生成,頁面的內容和顯示效果就基本上不會發(fā)生變化了(除非修改頁面代碼)。而動態(tài)網頁則不然,頁面代碼雖然沒有變,但是顯示的內容卻是可以隨著時間、環(huán)境或者數(shù)據(jù)庫操作的結果而發(fā)生改變的。

動態(tài)網頁是基本的html語法規(guī)范與Java、VB、VC等高級程序設計語言、數(shù)據(jù)庫編程等多種技術的融合,以期實現(xiàn)對網站內容和風格的高效、動態(tài)和交互式的管理。因此,從這個意義上來講,凡是結合了HTML以外的高級程序設計語言和數(shù)據(jù)庫技術進行的網頁編程技術生成的網頁都是動態(tài)網頁。第二單元爬取動態(tài)網頁02爬取百度圖片數(shù)據(jù)爬取漫畫數(shù)據(jù)01情境一:爬取百度圖片數(shù)據(jù)01030204情境概述知識準備案例講解總結PART01情境概述情境一:爬取百度圖片數(shù)據(jù)情境概述學習情境描述教學情境描述:通過對Scrapy、JSON、MySQL知識點的學習,對技術綜合應用的操作,學習并掌握如何去區(qū)分靜態(tài)網頁和動態(tài)網頁交互、去分析動態(tài)網頁實際數(shù)據(jù)來源、去獲取動態(tài)網頁交互數(shù)據(jù),最終達到:使用Scrapy獲取動態(tài)數(shù)據(jù)源;使用JSON解析動態(tài)數(shù)據(jù);使用PyMySQL存儲動態(tài)結構化數(shù)據(jù)MySQL數(shù)據(jù)庫。關鍵知識點:Python庫環(huán)境管理;Scrapy網絡交互;JSON數(shù)據(jù)格式;JSON數(shù)據(jù)解析;PyMySQL結構化存儲。關鍵技能點:Scrapy網頁及接口請求;JSON數(shù)據(jù)解析;MySQL結構化數(shù)據(jù)存儲。情境一:爬取百度圖片數(shù)據(jù)情境概述本節(jié)課的學習目標掌握Python模塊庫(Scrapy、JSON、PyMySQL等)安裝管理應用。能區(qū)分靜態(tài)網頁和動態(tài)網頁。能根據(jù)實際情況,定位動態(tài)數(shù)據(jù)來源。理解Scrapy框架體系。理解Scrapy網絡爬蟲框架及原理。掌握Scrapy項目系統(tǒng)配置及爬蟲策略配置。能使用Scrapy進行網頁和接口數(shù)據(jù)采集工作。能使用JSON解析動態(tài)數(shù)據(jù)源。能使用PyMySQL完成MySQL結構化數(shù)據(jù)存儲。情境一:爬取百度圖片數(shù)據(jù)情境概述本節(jié)課的任務書完成通過PIP命令安裝及管理Scrapy、JSON、PyMySQL庫。完成通過Scrappy獲取列表數(shù)據(jù)、分頁數(shù)據(jù)及多層級的汽車銷售數(shù)據(jù)網頁源代碼。完成通過XPath格式化網頁源文檔,并獲取對應類型的汽車銷售數(shù)據(jù)。完成通過Pymysql將解析到的各車型銷售數(shù)據(jù)結構化存儲于本地MySQL中。情境一:爬取百度圖片數(shù)據(jù)PART02知識準備情境一:爬取百度圖片數(shù)據(jù)知識準備引導問題了解什么是動態(tài)網頁,和靜態(tài)網頁有什么不同。如何定位動態(tài)網頁數(shù)據(jù)源?如何獲取動態(tài)網頁數(shù)據(jù)源?動態(tài)網頁數(shù)據(jù)是以什么樣的格式或結構展現(xiàn)?如何解析動態(tài)網頁數(shù)據(jù)?如何將動態(tài)數(shù)據(jù)在MySQL結構化存儲?情境一:爬取百度圖片數(shù)據(jù)知識準備知識點介紹ScrapyJSONPyMySQL情境一:爬取百度圖片數(shù)據(jù)知識準備JSON情境一:爬取百度圖片數(shù)據(jù)JSON介紹JSON(JavaScript

ObjectNotation,JS對象簡譜)是一種輕量級的數(shù)據(jù)交換格式。它基于ECMAScript(歐洲計算機協(xié)會制定的js規(guī)范)的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數(shù)據(jù)。簡潔和清晰的層次結構使得JSON成為理想的數(shù)據(jù)交換語言。易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網絡傳輸效率。JSON是DouglasCrockford在2001年開始推廣使用的數(shù)據(jù)格式,在2005年-2006年正式成為主流的數(shù)據(jù)格式。JSON是存儲和交換文本信息的語法,類似XML。JSON比XML更小、更快,更易解析。知識準備

JSON語法規(guī)則情境一:爬取百度圖片數(shù)據(jù)JSON使用

JavaScript

語法來描述數(shù)據(jù)對象,但是JSON仍然獨立于語言和平臺。JSON語法是JavaScript語法的子集,包括以下內容:數(shù)據(jù)在名稱/值對中數(shù)據(jù)由逗號分隔花括號保存對象方括號保存數(shù)組JSON支持以下數(shù)據(jù)結構:名/值對集合:這一數(shù)據(jù)結構由不同的鍵值對組成。無序的對象結構:多個名稱/值構成的封裝體,類似字典表。有序的值列表:包括數(shù)組,列表,向量或序列等等。知識準備

情境一:爬取百度圖片數(shù)據(jù)JSON名稱/值對JSON數(shù)據(jù)的書寫格式是:名稱/值對。名稱/值對包括字段名稱(在雙引號中),后面寫一個冒號,然后是值。語法如下所示:其中value所對應的值可以是:數(shù)字、字符串、邏輯值、數(shù)組、對象、null。具體描述如下:"name":value知識準備

情境一:爬取百度圖片數(shù)據(jù)JSON對象JSON對象使用在大括號({})中書寫,對象可以包含多個

key/value(鍵/值)對。其中:key必須是字符串,value可以是合法的JSON數(shù)據(jù)類型(字符串,數(shù)字,對象,數(shù)組,布爾值或null)。key和value中使用冒號(:)分割。每個key/value對使用逗號(,)分割。

數(shù)據(jù)結構如下:{"鍵名1":值1,"鍵名2":值2,……"鍵名n":值n}知識準備

情境一:爬取百度圖片數(shù)據(jù)JSON數(shù)組JSON數(shù)組結構是用中括號“[]”括起來,中括號內部由0個或多個以英文逗號“,”分隔的值列表組成。數(shù)據(jù)結構如下:[{"鍵名1":值1,"鍵名2":值2},{"鍵名3":值3,"鍵名4":值4},……]知識準備

Python中使用JSON情境一:爬取百度圖片數(shù)據(jù)

在Python中要操作JSON數(shù)據(jù)對象,需要使用json模塊。

JSON模塊為Python內置模塊,在環(huán)境安裝時已自動安裝上,所以可以直接使用框架庫,無需額外安裝。

在json模塊中,主要是對Python數(shù)據(jù)的編碼和解碼,分別對應函數(shù):dumps()、loads()。知識準備

情境一:爬取百度圖片數(shù)據(jù)dumps()json.dumps():對數(shù)據(jù)進行編碼,將Python對象編碼成JSON字符串。語法如下:Python對象轉換為JSON數(shù)據(jù)會有類型轉化,類型對照表如下:json.dumps(obj,skipkeys=False,ensure_ascii=True,check_circular=True,allow_nan=True,cls=None,indent=None,separators=None,encoding="utf-8",default=None,sort_keys=False,**kw)知識準備

情境一:爬取百度圖片數(shù)據(jù)loads()json.loads():對數(shù)據(jù)進行解碼,將JSON字符串解碼成Python對象。語法如下:JSON數(shù)據(jù)轉換為Python對象會有類型轉化,類型對照表如下:json.loads(s[,encoding[,cls[,object_hook[,parse_float[,parse_int[,parse_constant[,object_pairs_hook[,**kw]]]]]]]])PART03案例講解情境一:爬取百度圖片數(shù)據(jù)案例講解爬取百度圖片數(shù)據(jù)情境一:爬取百度圖片數(shù)據(jù)步驟:確定目標網頁分析并確定目標數(shù)據(jù)安裝環(huán)境構建項目編寫數(shù)據(jù)采集程序編寫數(shù)據(jù)存儲程序運行程序效果截圖案例講解爬取百度圖片數(shù)據(jù)情境一:爬取百度圖片數(shù)據(jù)具體實操跟隨教材內的步驟實施。PART04總結情境一:爬取百度圖片數(shù)據(jù)總結總結情境一:爬取百度圖片數(shù)據(jù)

本情景,主要介紹了Scrapy、JSON、PyMySQL的相關知識,通過對案例的學習,讓同學們掌握

Scrapy、JSON、PyMySQL

的運用。情境二:爬取漫畫數(shù)據(jù)01030204情境概述知識準備案例講解總結PART01情境概述情境二:爬取漫畫數(shù)據(jù)情境概述學習情境描述教學情境描述:通過對Selenium、PhantomJS、threading、Pillow知識點的學習,對技術綜合應用的操作,學習并掌握如何去區(qū)分靜態(tài)網頁和動態(tài)網頁交互、去分析動態(tài)網頁實際數(shù)據(jù)來源、去模擬瀏覽器訪問網頁、模擬用戶操作瀏覽器、去獲取動態(tài)網頁交互數(shù)據(jù)。達到本次最終目的:使用Selenium模擬瀏覽器與用戶行為操作、使用PhantomJS提供無界面瀏覽器支持與滾動截屏支持、使用threading構建多線程數(shù)據(jù)采集、使用Pillow裁剪處理并保存目標圖片。關鍵知識點:Python庫環(huán)境管理;PhantomJS軟件安裝與配置;Selenium框架理解;Selenium原理;Selenium自動化操作;threading多線程構建與管理;Pillow圖片裁剪與存儲。關鍵技能點:PhantomJS軟件安裝與配置;Selenium自動化操作;threading多線程構建與管理;Pillow圖片裁剪與存儲。情境二:爬取漫畫數(shù)據(jù)情境概述本節(jié)課的學習目標掌握Python模塊庫(Selenium、threading、Pillow等)安裝管理應用。掌握PhantomJS軟件安裝與配置。能區(qū)分靜態(tài)網頁和動態(tài)網頁。能根據(jù)實際情況,定位動態(tài)數(shù)據(jù)來源。理解Selenium自動化框架及原理。掌握Selenium運行環(huán)境和項目配置。能使用Selenium模擬瀏覽器操作和用戶行為操作。能使用threading構建和管理多線程爬蟲任務。能使用Pillow對圖片進行裁剪和存儲。情境二:爬取漫畫數(shù)據(jù)情境概述本節(jié)課的任務書完成通過PIP命令安裝及管理Selenium、threading、Pillow庫。完成通過Selenium模擬瀏覽器請求,模擬用戶行為操作,獲取動漫作品的章節(jié)列表及章節(jié)漫畫圖片原型。完成通過threading構建和管理多線程爬蟲任務。完成通過Pillow的相關模塊完成對圖片進行裁剪和存儲操作。情境二:爬取漫畫數(shù)據(jù)PART02知識準備情境二:爬取漫畫數(shù)據(jù)知識準備引導問題網頁中列表數(shù)據(jù)和圖片加載方式有幾種?分別是如何加載的,動態(tài)加載和靜態(tài)加載的區(qū)別。如何定位動態(tài)網頁列表數(shù)據(jù)源和圖片數(shù)據(jù)源?除了Requests或Scrapy直接請求地址的方式,還可以通過哪些方式獲取動態(tài)網頁數(shù)據(jù)和圖片數(shù)據(jù)?如何通過Selenium獲取動態(tài)加載的網頁圖片?如何通過Selenium技術實現(xiàn)網頁截屏?如何將圖片進行裁剪并本地化存儲?情境二:爬取漫畫數(shù)據(jù)知識準備知識點介紹PhantomJSSeleniumthreadingPillow情境二:爬取漫畫數(shù)據(jù)知識準備PhantomJS情境二:爬取漫畫數(shù)據(jù)PhantomJS介紹PhantomJS是一個無界面的、可腳本編程的WebKit瀏覽器引擎。它可以在Windows、macOS、Linux和FreeBSD系統(tǒng)上運行。使用QtWebKit作為后端,它為各種Web標準提供快速和本地支持:DOM處理、CSS選擇器、JSON、畫布和SVG。PhantomJS有如下特點:PhantomJS是一個基于webkit內核、無界面的瀏覽器,即它就是一個瀏覽器,只是其內的點擊、翻頁等人為相關操作需要程序設計實現(xiàn);PhantomJS提供JavascriptAPI接口,可以通過編寫JS程序直接與webkit內核交互;PhantomJS的應用:無需瀏覽器的Web測試、網頁截屏、頁面訪問自動化、網絡監(jiān)測。知識準備

PhantomJS安裝與配置情境二:爬取漫畫數(shù)據(jù)下載軟件PhantomJS是一款無頭瀏覽器,是一款軟件。官網下載地址:

下載phantomjs-2.1.1-windows.zip后解壓到本地文件夾即可。環(huán)境配置定位到phantomjs.exe所在地址,此處演示地址為:C:\Software\phantomjs-2.1.1-windows\bin,將其添加在系統(tǒng)環(huán)境變量中。/download.html知識準備

情境二:爬取漫畫數(shù)據(jù)驗證安裝使用快捷鍵打開CMD命令窗口,輸入查看PhantomJS的版本。如圖:知識準備

PhantomJS運行腳本情境二:爬取漫畫數(shù)據(jù)PhantomJS是一款無頭瀏覽器,也可以使用PhantomJS命令行工具運行JS腳本。PhantomJS運行腳本案例如圖:知識準備Selenium情境二:爬取漫畫數(shù)據(jù)Selenium框架介紹Selenium是支持web瀏覽器自動化的一系列工具和庫的綜合項目。它提供了擴展來模擬用戶與瀏覽器的交互,用于擴展瀏覽器分配的分發(fā)服務器,以及用于實現(xiàn)

W3CWebDriver規(guī)范的基礎結構,該規(guī)范允許您為所有主要Web瀏覽器編寫可互換的代碼。Selenium的核心是

WebDriver,這是一個編寫指令集的接口,可以在許多瀏覽器中互換運行。知識準備

Selenium搭建情境二:爬取漫畫數(shù)據(jù)安裝Selenium

可以使用PIP安裝Python的Selenium庫。語法如下:驗證安裝可以使用PIP驗證Selenium庫的安裝成果。語法如下:pipinstallSeleniumpiplist知識準備

情境二:爬取漫畫數(shù)據(jù)下載WebDriver二進制文件通過WebDriver,Selenium支持市面上所有主流的瀏覽器,如Chrom(ium)、Firefox、InternetExplorer、Opera和Safari。盡管并非所有瀏覽器都對遠程控制提供官方支持,但WebDriver盡可能使用瀏覽器的內置自動化支持來驅動瀏覽器。常見瀏覽器及其對應的WebDriver二進制文件下載地址:知識準備

情境二:爬取漫畫數(shù)據(jù)配置二進制文件環(huán)境通過將包含WebDriver二進制文件的文件夾添加到系統(tǒng)path環(huán)境變量中,Selenium將能夠找到其他二進制文件,而無需您的測試代碼來定位驅動程序的確切位置。如圖:驗證Path打開命令行窗口,輸入WebDriver名稱,查看驅動程序啟動的輸出,如圖:知識準備

WebDriver通信介紹情境二:爬取漫畫數(shù)據(jù)WebDriver通過一個驅動程序與瀏覽器對話。通信基本方式是:直接通信,WebDriver通過驅動程序向瀏覽器傳遞命令,然后通過相同的路徑接收信息。結構如圖:知識準備

Selenium應用情境二:爬取漫畫數(shù)據(jù)實例化WebDriver定位元素操控瀏覽器等待Keyboard知識準備threading情境二:爬取漫畫數(shù)據(jù)線程介紹多線程類似于同時執(zhí)行多個不同程序。線程不能夠獨立執(zhí)行,必須依存在應用程序中,由應用程序提供多個線程執(zhí)行控制。線程在執(zhí)行過程中與進程還是有區(qū)別的,每個獨立的進程有一個程序運行的入口、順序執(zhí)行序列和程序的出口。多線程運行有如下優(yōu)點:使用線程可以把占據(jù)長時間的程序中的任務放到后臺去處理。用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發(fā)某些事件的處理,可以彈出一個進度條來顯示處理的進度。程序的運行速度可能加快。在一些等待的任務實現(xiàn)上如用戶輸入、文件讀寫和網絡收發(fā)數(shù)據(jù)等,線程就比較有用了。在這種情況下我們可以釋放一些珍貴的資源如內存占用等等。知識準備

threading模塊情境二:爬取漫畫數(shù)據(jù)Python3通過兩個標準庫_thread和threading提供對線程的支持。threading模塊除了包含_thread模塊中的所有方法外,還提供的其他方法:threading.currentThread():返回當前的線程變量。threading.enumerate():返回一個包含正在運行的線程的list。正在運行指線程啟動后、結束前,不包括啟動前和終止后的線程。threading.activeCount():返回正在運行的線程數(shù)量,與len(threading.enumerate())有相同的結果。知識準備

threading模塊情境二:爬取漫畫數(shù)據(jù)threading模塊同樣提供了Thread類來處理線程,Thread類提供了以下方法:run():

用以表示線程活動的方法。start():啟動線程活動。join([time]):

等待至線程中止。這阻塞調用線程直至線程的join()方法被調用中止-正常退出或者拋出未處理的異常-或者是可選的超時發(fā)生。isAlive():

返回線程是否活動的。getName():

返回線程名。setName():

設置線程名。知識準備Pillow情境二:爬取漫畫數(shù)據(jù)Pillow介紹Pillow是一個友好的圖形處理庫。PythonPillow庫為您的Python翻譯增加了圖像處理功能。此庫提供廣泛的文件格式支持、高效的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論