智能計算平臺應(yīng)用開發(fā)(初級)-人工智能示教編程-爬蟲流程_第1頁
智能計算平臺應(yīng)用開發(fā)(初級)-人工智能示教編程-爬蟲流程_第2頁
智能計算平臺應(yīng)用開發(fā)(初級)-人工智能示教編程-爬蟲流程_第3頁
智能計算平臺應(yīng)用開發(fā)(初級)-人工智能示教編程-爬蟲流程_第4頁
智能計算平臺應(yīng)用開發(fā)(初級)-人工智能示教編程-爬蟲流程_第5頁
已閱讀5頁,還剩77頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第8章人工智能示教編程爬蟲簡介爬蟲流程爬蟲框架網(wǎng)絡(luò)爬蟲工作時,會首先根據(jù)種子網(wǎng)頁的URL,形成初始的待爬取的URL集合,然后依次讀取并從互聯(lián)網(wǎng)上下載、保存、分析和獲取該網(wǎng)頁中新的URL鏈接。簡單來說,網(wǎng)絡(luò)爬蟲需要先獲取網(wǎng)頁,再從網(wǎng)頁的數(shù)據(jù)中提取想要的數(shù)據(jù),并存儲數(shù)據(jù)。爬蟲流程對于新的URL,根據(jù)深度、寬度和最佳優(yōu)先等不同策略,將其放入待爬取的URL集合中。如果是基于相似度的最佳定向策略,還需要考慮相似度的衡量。對于已經(jīng)處理完畢的網(wǎng)頁,將其內(nèi)容存入數(shù)據(jù)庫作為鏡像緩存,并將URL地址放入已爬取的集合,以免重復(fù)。網(wǎng)址分析URLURL是統(tǒng)一資源定位符,即通常所說的網(wǎng)址,URL是對可以從互聯(lián)網(wǎng)上得到的資源位置和訪問方法的一種簡潔的表示,是互聯(lián)網(wǎng)上標準資源的地址。互聯(lián)網(wǎng)上的每個文件都有唯一的URL,URL包含的信息指出文件的位置以及瀏覽器應(yīng)該怎么處理它。。網(wǎng)絡(luò)爬蟲根據(jù)URL來獲取網(wǎng)頁信息,因此,URL是爬蟲獲取數(shù)據(jù)的基本依據(jù)。URL的格式由以下3個部分組成。網(wǎng)址分析協(xié)議也被稱為服務(wù)方式;目前主流的協(xié)議有HTTP和HTTPS協(xié)議。主機名和端口號為可選參數(shù);一般網(wǎng)站默認端口號為80,如中國醫(yī)科大學的主機名是。主機資源的具體地址如目錄和文件名等??蛻舳擞煽蛻舳讼蚍?wù)器發(fā)起請求服務(wù)器服務(wù)器收到請求后再向客戶端發(fā)送響應(yīng),響應(yīng)中的狀態(tài)碼將顯示此次通信的狀態(tài)。客戶端與服務(wù)器間通過HTTP通信請求與響應(yīng)不同的類型請求與響應(yīng)通過頭字段實現(xiàn)。HTTP響應(yīng)過程請求與響應(yīng)HTTP客戶端HTTP客戶端會向服務(wù)器發(fā)起一個請求,創(chuàng)建一個到服務(wù)器指定端口(默認是80端口)的TCP連接。HTTP服務(wù)器HTTP服務(wù)器從該端口監(jiān)聽客戶端的請求。一旦收到請求,服務(wù)器會向客戶端返回一個狀態(tài),如“HTTP/1.1200OK”,以及響應(yīng)的內(nèi)容,如請求的文件、錯誤消息或其他信息。在HTTP/1.1協(xié)議中共定義8種方法(也叫“動作”)來以不同方式操作指定的資源。請求與響應(yīng)請求方法方法描述GET請求指定的頁面信息,并返回實體主體。GET方法可能會被網(wǎng)絡(luò)爬蟲等隨意訪問,因此GET方法應(yīng)該只用于讀取數(shù)據(jù),而不應(yīng)當被用在產(chǎn)生“副作用”的操作中,如WebApplication等會改變狀態(tài)的操作HEAD與GET方法一樣,都是向服務(wù)器發(fā)出指定資源的請求,只不過服務(wù)器將不傳回具體的內(nèi)容。使用這個方法可以在不必傳輸全部內(nèi)容的情況下,獲取該資源的相關(guān)信息(元信息或稱元數(shù)據(jù))POST向指定資源提交數(shù)據(jù),請求服務(wù)器進行處理(如提交表單或者上傳文件)。數(shù)據(jù)會被包含在請求中,這個請求可能會創(chuàng)建新的資源或修改現(xiàn)有資源,或兩者皆有PUT從客戶端上傳指定資源的最新內(nèi)容,即更新服務(wù)器端的指定資源DELETE請求服務(wù)器刪除標識的指定資源TRACE回顯服務(wù)器收到的請求,主要用于測試或診斷OPTIONS允許客戶端查看服務(wù)器端上指定資源所支持的所有HTTP請求方法。用“*”來代替資源名稱,向服務(wù)器發(fā)送OPTIONS請求,可以測試服務(wù)器功能是否正常CONNECTHTTP/1.1中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器HTTP請求方法的名稱是區(qū)分大小寫請求與響應(yīng)當某個請求所指定的資源不支持對應(yīng)的請求方法時,服務(wù)器會返回狀態(tài)碼405(MethodNotAllowed)。當服務(wù)器不認識或者不支持對應(yīng)的請求方法時,會返回狀態(tài)碼501(NotImplemented)。請求與響應(yīng)HTTP服務(wù)器一般情況下,HTTP服務(wù)器至少需要實現(xiàn)GET和HEAD方法,其他方法為可選項。所有方法支持的實現(xiàn)都應(yīng)當匹配方法各自的語法格式。除上述方法外,特定的HTTP服務(wù)器還能夠擴展自定義的方法。請求與響應(yīng)HTTP采用請求/響應(yīng)模型客戶端向服務(wù)器發(fā)送一個請求報文,請求報文包含請求的方法、URL、協(xié)議版本、請求頭部和請求數(shù)據(jù)。服務(wù)器以一個狀態(tài)行作為響應(yīng),響應(yīng)的內(nèi)容包括協(xié)議版本、響應(yīng)狀態(tài)、服務(wù)器信息、響應(yīng)頭部和響應(yīng)數(shù)據(jù)。請求與響應(yīng)客戶端與服務(wù)器間的請求與響應(yīng)的具體步驟連接Web服務(wù)器發(fā)送HTTP請求服務(wù)器接收請求并返回HTTP響應(yīng)釋放TCP連接客戶端解析HTML內(nèi)容請求與響應(yīng)連接Web服務(wù)器由一個HTTP客戶端,通常為瀏覽器,發(fā)起連接。與Web服務(wù)器的HTTP端口(默認為80)建立一個TCP套接字連接。發(fā)送HTTP請求客戶端經(jīng)TCP套接字向Web服務(wù)器發(fā)送一個文本格式的請求報文.一個請求報文由請求行、請求頭部、空行和請求數(shù)據(jù)4部分組成。服務(wù)器接收請求并返回HTTP響應(yīng)Web服務(wù)器解析請求,定位該次的請求資源,之后將資源副本寫進TCP套接字,由客戶端進行讀取。一個響應(yīng)與一個請求對應(yīng),響應(yīng)報文由狀態(tài)行、響應(yīng)頭部、空行和響應(yīng)數(shù)據(jù)4部分組成。請求與響應(yīng)釋放TCP連接若本次連接的Connection模式為Close,則由服務(wù)器主動關(guān)閉TCP連接,客戶端將被動關(guān)閉連接,釋放TCP連接;若Connection模式為Keep-Alive,則該連接會保持一段時間,在該時間內(nèi)可以繼續(xù)接收請求與回傳響應(yīng)??蛻舳私馕鯤TML內(nèi)容客戶端首先會對狀態(tài)行進行解析,查看狀態(tài)代碼是否能表明該次請求是成功的。之后解析每一個響應(yīng)頭,響應(yīng)頭告知以下內(nèi)容為若干字節(jié)的HTML文檔和文檔的字符集。最后由客戶端讀取響應(yīng)數(shù)據(jù)HTML,根據(jù)HTML的語法對其進行格式化,并在窗口中對其進行顯示??梢允褂胾rllib庫的request模塊下的urlopen函數(shù)打開URL。urlopen函數(shù)常用的參數(shù)及其說明請求與響應(yīng)——urllib參數(shù)名稱參數(shù)說明url統(tǒng)一資源定位地址,可以是一個字符串或一個Request對象datadata是指定要發(fā)送到服務(wù)器的其他數(shù)據(jù)的對象,如果不需要這些數(shù)據(jù),則值為Nonetimeout超時參數(shù)為阻塞操作(如連接嘗試),指定超時(以秒為單位),如果未指定,將使用全局默認超時設(shè)置。超時參數(shù)只適用于HTTP、HTTPS和FTP連接Request是urllib庫的request模塊常用的類,Request類是URL請求的抽象。Request類常用參數(shù)及其說明請求與響應(yīng)——urllib參數(shù)名稱參數(shù)說明url包含有效URL的字符串data指定要發(fā)送到服務(wù)器的其他數(shù)據(jù)的對象,如果不需要數(shù)據(jù),則值為None。當前,HTTP請求是唯一使用數(shù)據(jù)的請求。支持的對象類型包括字節(jié)、類似文件的對象和類似字節(jié)對象的可迭代對象headerheader是一個字典,被當作add_header()被調(diào)用,每個鍵和值作為參數(shù)。通常用于“欺騙”服務(wù)器,該參數(shù)的值表示用戶代理頭文件的值,該值由瀏覽器用于標識自身—一些HTTP服務(wù)器只允許來自普通瀏覽器的請求,而不允許來自腳本origin_req_host原始事務(wù)的請求主機,默認為http.cookiejar.request_host(self),是用戶發(fā)起的原始請求的主機名或IP地址Requests庫所有的功能可以通過7個方法訪問,這7個方法都會返回一個Response對象的實例。請求與響應(yīng)——Requests方法說明request用于構(gòu)造和發(fā)送請求head用于發(fā)送HEAD請求get發(fā)送GET請求post發(fā)送POST請求put發(fā)送PUT請求patch發(fā)送PATCH請求delete發(fā)送DELETE請求Requests庫的Request類和Response類請求與響應(yīng)——RequestsRequest類用于準備發(fā)送到服務(wù)器的PreparedRequest,是用戶創(chuàng)建的Request對象。Response類是響應(yīng)對象,包含服務(wù)器對HTTP請求的響應(yīng)。Response類的主要屬性及其說明請求與響應(yīng)——Requests屬性名稱說明status_code響應(yīng)的HTTP狀態(tài)的整數(shù)代碼,如404或200headers不區(qū)分大小寫的響應(yīng)標題字典cookies服務(wù)器返回的Cookie的CookieJarurl響應(yīng)的最終URL位置historyResponse請求歷史記錄中的對象列表。任何重定向響應(yīng)都將在此結(jié)束。列表從最早的請求到最新的請求進行排序content響應(yīng)的內(nèi)容,以字節(jié)為單位text響應(yīng)的內(nèi)容,以unicode表示。響應(yīng)內(nèi)容的編碼僅根據(jù)HTTP頭確定請求與響應(yīng)——urllib3使用urllib3庫發(fā)出請求與接收響應(yīng)使用urllib3庫發(fā)出請求時,需要先實例化一個PoolManager對象,PoolManager對象處理了所有連接池和線性安全的細節(jié)。可以利用ProxyManager進行請求代理操作。urllib3庫使用request方法發(fā)送一個請求。HTTP響應(yīng)對象提供status、data和headers等屬性。返回的JSON格式數(shù)據(jù)可以通過JSON模塊加載為字典數(shù)據(jù)類型。響應(yīng)返回的數(shù)據(jù)都是字節(jié)類型,對于大量的數(shù)據(jù)可以通過stream來處理,也可以j將其當作一個文件對象來處理。網(wǎng)頁解析網(wǎng)頁解析通過解析網(wǎng)頁可以從網(wǎng)頁獲取包含的信息,如文本、圖片、視頻等,這需要爬蟲具備定位網(wǎng)頁中信息的位置并解析網(wǎng)頁內(nèi)容的功能??赏ㄟ^Chrome開發(fā)者工具直接查看網(wǎng)站的頁面元素、頁面源碼和資源詳細信息,分別通過正則表達式、XPath及BeautifulSoup解析網(wǎng)頁的內(nèi)容,獲取其中的元素及相關(guān)信息。Chrome瀏覽器提供了一個非常便利的開發(fā)者工具,供廣大開發(fā)者使用,該工具可提供查看網(wǎng)頁元素、查看請求資源列表、調(diào)試JS等功能。網(wǎng)頁解析——使用Chrome開發(fā)者工作查看網(wǎng)頁打開開發(fā)者工具可以通過右鍵單擊Chrome瀏覽器頁面,在彈出的菜單中單擊的“檢查”選項來打開該工具。也可以通過單擊Chrome瀏覽器右上角的

按鈕,單擊“更多工具”選項中的“開發(fā)者工具”選項,也可以使用“F12”鍵或“Ctrl+Shift+I”組合鍵來打開開發(fā)者工具。網(wǎng)頁解析——使用Chrome開發(fā)者工作查看網(wǎng)頁Chrome開發(fā)者工具界面包括9個面板本書使用的Chrome版本為64位69.0.3497.100Chrome開發(fā)者工具面板的功能對于爬蟲開發(fā)來說,常用的面板為元素面板、源代碼面板及網(wǎng)絡(luò)面板。網(wǎng)頁解析——使用Chrome開發(fā)者工作查看網(wǎng)頁面板說明元素面板(Elements)該面板可查看渲染頁面所需的HTML、CSS和DOM(DocumentObjectModel)對象,并可實時編輯這些元素調(diào)試頁面渲染效果控制臺面板(Console)該面板可記錄各種警告與錯誤信息,并可作為shell在頁面上與JavaScript交互源代碼面板(Sources)該面板可設(shè)置調(diào)試JavaScript的斷點網(wǎng)絡(luò)面板(Network)該面板可查看頁面請求、下載的資源文件,以及優(yōu)化網(wǎng)頁加載性能。還可查看HTTP的請求頭、響應(yīng)內(nèi)容等性能面板(Performance)原舊版Chrome中的時間線面板(Timeline),該頁面可展示頁面加載時所有事件花費時長的完整分析內(nèi)存面板(Memory)原舊版Chrome中的分析面板(Profiles),可提供比性能面板更詳細的分析,如跟蹤內(nèi)存泄漏等應(yīng)用面板(Application)原舊版Chrome中的資源面板(Sources),該面板可檢查加載的所有資源安全面板(Security)該面板可調(diào)試當前網(wǎng)頁的安全和認證等問題,并確保網(wǎng)站上已正確地實現(xiàn)HTTPS審查面板(Audits)該面板可對當前網(wǎng)頁的網(wǎng)絡(luò)利用情況、網(wǎng)頁性能方面進行診斷,并給出優(yōu)化建議網(wǎng)頁解析——使用Chrome開發(fā)者工作查看網(wǎng)頁元素面板查看頁面元素所對應(yīng)的位置,如圖片所在的位置或文字鏈接所對應(yīng)的位置。元素面板左側(cè)可看到,當前頁面的結(jié)構(gòu)為樹狀結(jié)構(gòu),單擊三角符號即可展開分支。源代碼面板通常用來調(diào)試JS代碼;但對于爬蟲開發(fā)而言,還有一個附帶的功能可以查看HTML源碼。網(wǎng)頁解析——使用Chrome開發(fā)者工作查看網(wǎng)頁網(wǎng)頁解析——使用Chrome開發(fā)者工作查看網(wǎng)頁源代碼面板左側(cè)展示了頁面包含的文件,在左側(cè)選擇HTML文件,將在面板中間展示其完整代碼。網(wǎng)絡(luò)面板對于爬蟲開發(fā)而言,網(wǎng)絡(luò)面板主要用于查看頁面加載時讀取的各項資源,如圖片、HTML、JS、頁面樣式等的詳細信息。通過單擊某個資源便可以查看該資源的詳細信息。網(wǎng)頁解析——使用Chrome開發(fā)者工作查看網(wǎng)頁網(wǎng)頁解析——使用Chrome開發(fā)者工作查看網(wǎng)頁切至網(wǎng)絡(luò)面板(Network),重新加載頁面后,在資源文件名中單擊“sklearn.svm.OneClassSVM.html”資源,在中間將顯示該資源的頭部信息、預(yù)覽、響應(yīng)信息、花費時間詳情和Cookies。網(wǎng)頁解析——使用Chrome開發(fā)者工作查看網(wǎng)頁Headers標簽頁展示該資源的HTTP頭部信息,主要包括RequestURL、RequestMethod、StatusCode、RemoteAddress等基本信息,以及ResponseHeaders、RequestHeaders等詳細消息。網(wǎng)頁解析——使用Chrome開發(fā)者工作查看網(wǎng)頁Preview標簽頁可根據(jù)所選擇的資源類型(JSON、圖片、文本)來顯示相應(yīng)的預(yù)覽。網(wǎng)頁解析——使用Chrome開發(fā)者工作查看網(wǎng)頁Response標簽頁可顯示HTTP的響應(yīng)信息,選中的“index.html”文件為HTML文件,則將展示HTML代碼。網(wǎng)頁解析——使用Chrome開發(fā)者工作查看網(wǎng)頁Cookies標簽頁可顯示資源的HTTP請求和響應(yīng)過程中的Cookie信息。網(wǎng)頁解析——使用Chrome開發(fā)者工作查看網(wǎng)頁Timing標簽頁可顯示資源在整個請求過程中各部分花費的時間。網(wǎng)頁解析——使用正則表達式解析網(wǎng)頁在編寫處理網(wǎng)頁文本的程序時,經(jīng)常會有查找符合某些復(fù)雜規(guī)則的字符串的需求,而正則表達式正好能滿足這一點。正則表達式(RegularExpression)簡稱Regex或RE,又稱為正規(guī)表示法或常規(guī)表示法,常常用于檢索、替換符合某個模式的文本。主要思想為:先設(shè)置一些特殊的字及字符組合,再通過組合的“規(guī)則字符串”來對表達式進行過濾,從而獲取或匹配需要的特定內(nèi)容。正則表達式具有靈活、邏輯性和功能性非常強的特點,能迅速地通過表達式從字符串中找到所需信息的優(yōu)點,但對于剛接觸的人來說,比較晦澀難懂。網(wǎng)頁解析——使用正則表達式解析網(wǎng)頁正則表達式的組件可以是單個的字符、字符集合、字符范圍、字符間的內(nèi)容或者所有這些組件的任意組合。正則表達式的特殊字符使用正則表達式匹配一些有特殊含義的字符時,必須先使字符轉(zhuǎn)義。網(wǎng)頁解析——使用正則表達式解析網(wǎng)頁字符描述$匹配輸入字符串的結(jié)尾位置。如果設(shè)置了RegExp對象的Multiline屬性,則“$”也匹配“\n”或“\r”。要匹配“$”字符本身,需要使用“\$”()標記一個子表達式的開始和結(jié)束位置。可以獲取子表達式供以后使用。要匹配“(”和“)”字符,請使用“\(”和“\)”*匹配前面的子表達式零次或多次。要匹配“*”字符,請使用“\*”+匹配前面的子表達式一次或多次。要匹配“+”字符,請使用“\+”.匹配除換行符“\n”之外的任何單字符。要匹配“.”,請使用“\.”[標記一個中括號表達式的開始。要匹配“[”,請使用“\[”?匹配前面的子表達式零次或一次,或指明一個非貪婪限定符。要匹配“?”字符,請使用“\?”\將下一個字符標記為特殊字符、原義字符、向后引用、八進制轉(zhuǎn)義符。例如,“n”匹配字符“n”。“\n”匹配換行符。序列“\\”匹配“\”,而“\(”則匹配“(”^匹配輸入字符串的開始位置,除非在方括號表達式中使用,當該符號在方括號表達式中使用時,表示不接受該方括號表達式中的字符集合。要匹配“^”字符本身,請使用“\^”{標記限定符表達式的開始。要匹配“{”,請使用“\{”|指明兩項之間的一個選擇。要匹配“|”,請使用“\|”正則表達式中的特殊字符及說明網(wǎng)頁解析——使用正則表達式解析網(wǎng)頁字符描述*匹配前面的子表達式零次或多次。例如,“zo*”能匹配“z”以及“zoo”?!?”等價于{0,}+匹配前面的子表達式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”?!?”等價于{1,}?匹配前面的子表達式零次或一次。例如,“do(es)?”可以匹配“do”“does”中的“does”或者“doxy”中的“do”?!?”等價于{0,1}{n}n是一個非負整數(shù)。匹配確定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的兩個“o”{n,}n是一個非負整數(shù)。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有“o”?!皁{1,}”等價于“o+”?!皁{0,}”則等價于“o*”{n,m}m和n均為非負整數(shù),其中n<=m。最少匹配n次且最多匹配m次。正則表達式的限定字符限定符用來指定正則表達式的一個給定組件必須要出現(xiàn)多少次才滿足匹配。網(wǎng)頁解析——使用正則表達式解析網(wǎng)頁正則表達式的定位符定位符能夠?qū)⒄齽t表達式固定到行首或行尾,用來描述字符串或單詞的邊界。不能將限定符與定位符一起使用。若要匹配一行文本開始處的文本,需要在正則表達式的開始使用“^”字符。網(wǎng)頁解析——使用正則表達式解析網(wǎng)頁字符描述^匹配輸入字符串開始的位置。如果設(shè)置了RegExp對象的Multiline屬性,“^”還會與“\n”或“\r”之后的位置匹配$匹配輸入字符串結(jié)尾的位置。如果設(shè)置了RegExp對象的Multiline屬性,“$”還會與“\n”或“\r”之前的位置匹配\b匹配一個單詞邊界,即字與空格間的位置\B非單詞邊界匹配正則表達式的定位符及說明網(wǎng)頁解析——使用正則表達式解析網(wǎng)頁正則表達式運算符的優(yōu)先級順序正則表達式從左到右進行計算,并遵循優(yōu)先級順序,這與算術(shù)表達式非常類似。相同優(yōu)先級的從左到右進行運算,不同優(yōu)先級的運算先高后低。運算符描述\轉(zhuǎn)義符(),(?:),(?=),[]圓括號和方括號*,+,?,{n},{n,},{n,m}限定符^,$,\任何元字符、任何字符定位點和序列(即:位置和順序)|替換,“或”操作,字符具有高于替換運算符的優(yōu)先級,使得“m|food”匹配“m”或“food”按上到下的排序說明了各種正則表達式運算符的從最高到最低的優(yōu)先級順序。網(wǎng)頁解析——使用正則表達式解析網(wǎng)頁先將正則表達式的字符串形式編譯為Pattern實例使用Pattern實例處理文本獲得匹配結(jié)果,即一個Match實例使用Match實例獲得信息,進行其他的操作。re模塊Python通過自帶的re模塊提供了對正則表達式的支持。使用re模塊的步驟網(wǎng)頁解析——使用正則表達式解析網(wǎng)頁方法名稱說明compile將正則表達式的字符串轉(zhuǎn)化為Pattern匹配對象match將輸入的字符串從頭開始對輸入的正則表達式進行匹配,如果遇到無法匹配的字符或到達字符串末尾,則立即返回None,否則獲取匹配結(jié)果search將輸入的整個字符串進行掃描,對輸入的正則表達式進行匹配,并獲取匹配結(jié)果,如果沒有匹配結(jié)果,則輸出Nonesplit以能夠匹配的字符串作為分隔符,將字符串分割后返回一個列表findall搜索整個字符串,返回一個包含全部能匹配子串的列表finditer與findall方法的作用類似,以迭代器的形式返回結(jié)果sub使用指定內(nèi)容替換字符串中匹配的每一個子串內(nèi)容re模塊中常用的方法及其說明網(wǎng)頁解析——使用正則表達式解析網(wǎng)頁compile方法常用的參數(shù)及其說明參數(shù)名稱說明pattern接收str。表示需要轉(zhuǎn)換的正則表達式的字符串。無默認值flags接收str。表示匹配模式,取值為運算符“|”時表示同時生效,如re.I|re.M。默認為0flags參數(shù)的可選值可選值說明re.I忽略大小寫re.M多行模式,改變“^”和“$”的行為re.S將“.”修改為任意匹配模式,改變“.”的行為re.L表示特殊字符集“\w,\W,\b,\B,\s,\S”,取決于當前區(qū)域設(shè)定re.U表示特殊字符集“\w,\W,\b,\B,\d,\D,\s,\S”,取決于unicode定義的字符屬性re.X詳細模式,該模式下正則表達式可為多行,忽略空白字符并可加入注釋網(wǎng)頁解析——使用正則表達式解析網(wǎng)頁search方法常用的參數(shù)及其說明參數(shù)名稱說明pattern接收Pattern實例。表示轉(zhuǎn)換后的正則表達式。無默認值string接收str。表示輸入的需要匹配的字符串。無默認值flags接收str。表示匹配模式,取值為運算符“|”時表示同時生效,如re.I|re.M。默認為0search方法中輸入的pattern參數(shù)需要使用compile方法先轉(zhuǎn)換為正則表達式的字符串。網(wǎng)頁解析——使用正則表達式解析網(wǎng)頁findall方法常用的參數(shù)及其說明參數(shù)名稱說明pattern接收Pattern實例。表示轉(zhuǎn)換后的正則表達式。無默認值string接收str。表示輸入的需要匹配的字符串。無默認值flags接收str。表示匹配模式,取值為運算符“|”時表示同時生效,如re.I|re.M。默認為0使用正則表達式無法很好地定位特定節(jié)點并獲取其中的鏈接和文本內(nèi)容,而使用XPath和BeautifulSoup能較為便利地實現(xiàn)這個功能。網(wǎng)頁解析——使用XPath解析網(wǎng)頁XML路徑語言(XMLPathLanguage,XPath)一門在XML文檔中查找信息的語言。XPath最初被設(shè)計用來搜尋XML文檔,但是同樣適用于HTML文檔的搜索。XPath的選擇功能十分強大,它提供了非常簡潔明了的路徑選擇表達式,還提供了超過100個內(nèi)建函數(shù),用于字符串、數(shù)值、時間的匹配,以及節(jié)點、序列的處理等,幾乎所有定位的節(jié)點都可以用XPath來選擇。使用XPath需要從lxml庫中導(dǎo)入etree模塊,還需要使用HTML類對需要匹配的HTML對象進行初始化。HTML類的常用參數(shù)及其說明網(wǎng)頁解析——使用XPath解析網(wǎng)頁參數(shù)名稱說明text接收str。表示需要轉(zhuǎn)換為HTML的字符串。無默認值parser接收str。表示選擇的HTML解析器。無默認值base_url接收str。表示文檔的原始URL,用于查找外部實體的相對路徑。默認為None使用HTML類將網(wǎng)頁內(nèi)容初始化,首先需要調(diào)用HTML類對Requests庫請求回來的網(wǎng)頁進行初始化,這樣就成功構(gòu)造了一個XPath解析對象。若HTML中的節(jié)點沒有閉合,etree模塊也可提供自動補全功能。網(wǎng)頁解析——使用XPath解析網(wǎng)頁調(diào)用tostring方法即可輸出修正后的HTML代碼,但是結(jié)果為bytes類型,需要使用decode方法將其轉(zhuǎn)成str類型。也可以直接從本地文件中導(dǎo)入HTML文件,調(diào)用保存有網(wǎng)頁內(nèi)容的HTML文件,將其中的內(nèi)容導(dǎo)入并使用HTML類進行初始化,編碼格式設(shè)為utf-8。etree模塊常用函數(shù)網(wǎng)頁解析——使用XPath解析網(wǎng)頁函數(shù)名稱說明fromstring將string解析為Element或者ElementTreeparse將文件或者是file_like對象解析為ElementTree(非Element對象),因為parse一般解析整篇文檔,字符串解析函數(shù)一般只解析片段。其中file還可以是HTTP/FTPURL,也就是說,file應(yīng)該是一個Bytes流XML/HTML行為比較像fromstring,比較直接地對XML和HTML文檔進行特定解析,可以修改解析器parser參數(shù)。其中parser可以由相應(yīng)的XMLParser/HTMLParser函數(shù)生成,可設(shè)置項有很多不僅限于encoding、recover、remove_blank_text、remove_commentstostring將一個Element或者ElementTree轉(zhuǎn)換為string形式。這里面有幾個可選參數(shù):pretty_print表示是否格式化提高可讀性,method選擇輸出后的文檔格式,不同的選擇,做的修改也不相同,可選參數(shù)有xml、html、text、c14n(規(guī)范化xml);encoding表示輸出的字符串編碼格式,在無XML文檔聲明情況下默認是ASCⅡ,可通過encoding進行修改,但是如果所改編碼不是utf-8兼容,那么將會啟用默認聲明XPath常用的表達式使用類似正則的表達式來匹配HTML文件中的內(nèi)容。網(wǎng)頁解析——使用XPath解析網(wǎng)頁表達式說明nodename選取nodename節(jié)點的所有子節(jié)點/從當前節(jié)點選取直接子節(jié)點//從當前節(jié)點選取所有子孫節(jié)點.選取當前節(jié)點..選取當前節(jié)點的父節(jié)點@選取屬性使用XPath方法進行匹配時,可按表達式查找對應(yīng)位置,并輸出至一個列表內(nèi)。使用名稱定位head節(jié)點,分別使用層級結(jié)構(gòu)、名稱定位head節(jié)點下的title節(jié)點。直接使用名稱無法定位子孫節(jié)點的title節(jié)點,因為名稱只能定位子節(jié)點的head節(jié)點或body節(jié)點。網(wǎng)頁解析——使用XPath解析網(wǎng)頁子節(jié)點子節(jié)點表示當前節(jié)點的下一層節(jié)點。子孫節(jié)點子孫節(jié)點表示當前節(jié)點的所有下層節(jié)點。父節(jié)點父節(jié)點表示當前節(jié)點的上一層節(jié)點。XPath通配符可以選取未知的XML元素。網(wǎng)頁解析——使用XPath解析網(wǎng)頁通配符描述*匹配任何元素@*匹配任何屬性node()匹配任何類型XPath運算符網(wǎng)頁解析——使用XPath解析網(wǎng)頁運算符描述|計算兩個節(jié)點集+加法-減法*乘法div除法=等于!=不等于<

小于<=小于或等于>

大于>=大于或等于or或and與mod計算除法的余數(shù)網(wǎng)頁解析——使用XPath解析網(wǎng)頁XPath謂語可用來查找某個特定的節(jié)點或包含某個指定的值的節(jié)點,謂語被嵌在路徑后的方括號中。使用謂語時,將表達式加入XPath的路徑中即可。XPath謂語常用的表達式表達式說明/html/body/div[1]選取屬于body子節(jié)點的第一個div節(jié)點/html/body/div[last()]選取屬于body子節(jié)點的最后一個div節(jié)點/html/body/div[last()-1]選取屬于body子節(jié)點的倒數(shù)第二個div節(jié)點/html/body/div[position()<3]選取屬于body子節(jié)點的前兩個div節(jié)點/html/body/div[@id]選取屬于body子節(jié)點的帶有id屬性的div節(jié)點/html/body/div[@id="content"]選取屬于body子節(jié)點的id屬性值為content的div節(jié)點/html/body/div[xx>10.00]選取屬于body子節(jié)點的xx元素值大于10的節(jié)點網(wǎng)頁解析——使用XPath解析網(wǎng)頁XPath功能函數(shù)有時僅掌握了對象的部分特征,當需要模糊搜索該類對象時,可使用功能函數(shù)來實現(xiàn)。功能函數(shù)示例說明starts-with//div[starts-with(@id,"co")]選取id值以co開頭的div節(jié)點contains//div[contains(@id,"co")]選取id值包含co的div節(jié)點and//div[contains(@id,"co")andcontains(@id,"en")]選取id值包含co和en的div節(jié)點text//li[contains(text(),"first")]選取節(jié)點文本包含first的li節(jié)點text函數(shù)用于提取文本內(nèi)容定位title節(jié)點可以獲取title節(jié)點內(nèi)的文本內(nèi)容,使用text函數(shù)可以提取某個單獨子節(jié)點下的文本。若想提取出定位到的子節(jié)點及其子孫節(jié)點下的全部文本,則需要使用string方法來實現(xiàn)。網(wǎng)頁解析——使用BeautifulSoup庫解析網(wǎng)頁BeautifulSoup庫BeautifulSoup是一個可以從HTML或XML文件中提取數(shù)據(jù)的Python庫。它提供了一些簡單的函數(shù)用來處理導(dǎo)航、搜索、修改分析樹等功能。通過解析文檔,BeautifulSoup庫可為用戶提供需要抓取的數(shù)據(jù),非常簡便,僅需少量代碼就可以寫出一個完整的應(yīng)用程序。目前,BeautifulSoup3已經(jīng)停止開發(fā),大部分的爬蟲選擇使用BeautifulSoup4開發(fā)。網(wǎng)頁解析——使用BeautifulSoup庫解析網(wǎng)頁BeautifulSoup不僅支持Python標準庫中的HTML解析器,還支持一些第三方的解析器。BeautifulSoup支持的HTML解析器解析器語法格式優(yōu)點缺點Python標準庫BeautifulSoup(markup,"html.parser")Python的內(nèi)置標準庫;執(zhí)行速度適中;文檔容錯能力強Python2.7.3或3.2.2前的版本的文檔容錯能力差lxmlHTML解析器BeautifulSoup(markup,"lxml")速度快;文檔容錯能力強需要安裝C語言庫lxmlXML解析器BeautifulSoup(markup,["lxml-xml"])BeautifulSoup(markup,"xml")速度快;唯一支持XML的解析器需要安裝C語言庫html5libBeautifulSoup(markup,"html5lib")最好的容錯性;以瀏覽器的方式解析文檔;生成HTML5格式的文檔;不依賴外部擴展速度慢創(chuàng)建BeautifulSoup對象使用BeautifulSoup庫解析網(wǎng)頁,首先需要創(chuàng)建BeautifulSoup對象,通過將字符串或HTML文件傳入BeautifulSoup庫的構(gòu)造方法可以創(chuàng)建一個BeautifulSoup對象。生成的BeautifulSoup對象可通過prettify方法進行格式化輸出。prettify方法常用的參數(shù)及其說明網(wǎng)頁解析——使用BeautifulSoup庫解析網(wǎng)頁參數(shù)名稱說明encoding接收str。表示格式化時使用的編碼。默認為Noneformatter接收str。表示格式化的模式。默認為minimal,表示按最簡化的格式化方法將字符串處理成有效的HTML∕XML對象類型BeautifulSoup庫可將HTML文檔轉(zhuǎn)換成一個復(fù)雜的樹形結(jié)構(gòu),每個節(jié)點都是Python對象。網(wǎng)頁解析——使用BeautifulSoup庫解析網(wǎng)頁(4種)對象類型Tag對象NavigableString對象BeautifulSoup對象Comment對象網(wǎng)頁解析——使用BeautifulSoup庫解析網(wǎng)頁Tag對象Tag對象為HTML文檔中的標簽,形如“<title>TheDormouse'sstory</title>”或“<pclass="title"><b>TheDormouse'sstory</b></p>”等HTML標簽,再加上其中包含的內(nèi)容便是BeautifulSoup庫中的Tag對象。通過Tag名稱可以很方便地在文檔樹中獲取需要的Tag對象,使用Tag名稱查找的方法只能獲取文檔樹中第一個同名的Tag對象,而通過多次調(diào)用可獲取某個Tag對象下的分支Tag對象。通過find_all方法可以獲取文檔樹中的全部同名Tag對象。Tag對象有兩個非常重要的屬性:name和attributes。網(wǎng)頁解析——使用BeautifulSoup庫解析網(wǎng)頁name屬性可通過name方法來獲取和修改,修改過后的name屬性將會應(yīng)用至BeautifulSoup對象生成的HTML文檔。attributes屬性表示Tag對象標簽中HTML文本的屬性,通過attrs屬性可獲取Tag對象的全部attributes屬性,返回的值為字典,修改或增加等操作方法與字典相同。網(wǎng)頁解析——使用BeautifulSoup庫解析網(wǎng)頁NavigableString對象NavigableString對象為包含在Tag對象中的文本字符串內(nèi)容,如“<title>TheDormouse‘sstory</title>”中的“TheDormouse’sstory”,可使用string的方法獲取。NavigableString對象無法被編輯,但可以使用replace_with的方法進行替換。網(wǎng)頁解析——使用BeautifulSoup庫解析網(wǎng)頁BeautifulSoup對象BeautifulSoup對象表示的是一個文檔的全部內(nèi)容。大部分時候,可以把它當作Tag對象。BeautifulSoup對象并不是真正的HTML或XML的Tag對象,所以并沒有Tag對象的name和attributes屬性,但其包含了一個值為“[document]”的特殊name屬性。Tag對象、NavigableString對象、BeautifulSoup對象幾乎覆蓋了HTML和XML中的所有內(nèi)容,但是還有一些特殊對象。文檔的注釋部分是最容易與Tag對象中的文本字符串混淆的部分。網(wǎng)頁解析——使用BeautifulSoup庫解析網(wǎng)頁Comment對象在BeautifulSoup庫中,將文檔的注釋部分識別為Comment類型,Comment對象是一個特殊類型的NavigableString對象。但是當Comment對象出現(xiàn)在HTML文檔中時,Comment對象會使用特殊的格式輸出,需調(diào)用prettify函數(shù)獲取節(jié)點的Comment對象并輸出內(nèi)容。搜索特定節(jié)點并獲取其中的鏈接及文本BeautifulSoup庫中定義了很多搜索方法,其中常用的有find方法和find_all方法,兩者的參數(shù)一致。網(wǎng)頁解析——使用BeautifulSoup庫解析網(wǎng)頁find_all方法的返回結(jié)果是只包含一個元素的列表。find_all方法可用于搜索文檔樹中的Tag對象,非常方便。find方法返回的直接是結(jié)果。find_all方法常用的參數(shù)及其說明網(wǎng)頁解析——使用BeautifulSoup庫解析網(wǎng)頁參數(shù)名稱說明name接收str。表示查找所有名字為name的Tag對象,字符串對象會被自動忽略掉,搜索name參數(shù)的值時可以使用任一類型的過濾器,如字符串、正則表達式、列表、方法或True。默認值為Noneattrs接收str。表示查找符合CSS類名的Tag對象,使用class做參數(shù)會導(dǎo)致語法錯誤,從BeautifulSoup庫的4.1.1版本開始,可以通過class參數(shù)搜索有指定CSS類名的Tag對象。默認為空recursive接收Built-in。表示是否檢索當前Tag對象的所有子孫節(jié)點。默認為True,若只想搜索Tag對象的直接子節(jié)點,可將該參數(shù)設(shè)為Falsestring接收str。表示搜索文檔中能夠匹配傳入的字符串的內(nèi)容,與name參數(shù)的可選值一樣,string參數(shù)也接收多種過濾器。無默認值**kwargs若一個指定名字的參數(shù)不是搜索內(nèi)置的參數(shù)名,搜索時會把該參數(shù)當作指定名字的Tag對象的屬性來搜索find_all方法可通過多種方法遍歷搜索文檔樹中符合條件的所有子節(jié)點。網(wǎng)頁解析——使用BeautifulSoup庫解析網(wǎng)頁可通過name參數(shù)搜索同名的全部子節(jié)點,并接收多種過濾器。按照CSS類名可模糊匹配或完全匹配。完全匹配class的值時,如果CSS類名的順序與實際不符,將搜索不到結(jié)果。若Tag對象的class屬性是多值屬性,可以分別搜索Tag對象中的每個CSS類名。通過字符串內(nèi)容搜索符合條件的全部子節(jié)點,可通過過濾器操作。通過傳入的關(guān)鍵字參數(shù),搜索匹配關(guān)鍵字的子節(jié)點。使用find_all方法搜索到指定節(jié)點后網(wǎng)頁解析——使用BeautifulSoup庫解析網(wǎng)頁使用get方法可獲取列表中的節(jié)點所包含的鏈接。使用get_text方法可獲取其中的文本內(nèi)容。爬蟲通過解析網(wǎng)頁獲取頁面中的數(shù)據(jù)后,還需要將獲得的數(shù)據(jù)存儲下來以供后續(xù)分析。數(shù)據(jù)入庫JSON模塊使用JSON模塊能夠?qū)Path獲取的文本內(nèi)容存儲為JSON文件。PyMySQL庫使用PyMySQL庫能夠?qū)@取的結(jié)構(gòu)化數(shù)據(jù)存入MySQL數(shù)據(jù)庫,使用PyMongo庫能夠?qū)⒎墙Y(jié)構(gòu)化數(shù)據(jù)存入MongoDB數(shù)據(jù)庫。。JSON文件的操作在Python中分為解碼和編碼兩種,都通過JSON模塊來實現(xiàn)。數(shù)據(jù)入庫——將數(shù)據(jù)存儲為JSON文件編碼編碼過程是將Python對象轉(zhuǎn)換為JSON對象的過程。編碼過程常用dump函數(shù)和dumps函數(shù)。解碼編碼過程是將JSON對象轉(zhuǎn)換為Python對象的過程。dump函數(shù)和dumps函數(shù)的區(qū)別數(shù)據(jù)入庫——將數(shù)據(jù)存儲為JSON文件dump函數(shù)將Python對象轉(zhuǎn)換為JSON對象,并通過fp文件流將JSON對象寫入文件內(nèi),將數(shù)據(jù)存儲為JSON文件時主要使用的是dump函數(shù)。dumps函數(shù)是生成一個字符串。寫入文件時需要先序列化Python對象,否則會報錯。dump函數(shù)和dumps函數(shù)常用的參數(shù)及其說明數(shù)據(jù)入庫——將數(shù)據(jù)存儲為JSON文件參數(shù)名稱說明skipkeys接收Built-in。表示是否跳過非Python基本類型的key,若dict的keys內(nèi)的數(shù)據(jù)為非Python基本類型,即不是str、unicode、int、long、float、bool、None等類型,則設(shè)置該參數(shù)為False時,會報TypeError錯誤。默認值為False,設(shè)置為True時,跳過此類keyensure_ascii接收Built-in。表示顯示格式,若dict內(nèi)含有非ASCII的字符,則會以類似“\uXXX”的格式顯示。默認值為True,設(shè)置為False后,將會正常顯示indent接收int。表示顯示的行數(shù),若為0或為None,則在一行內(nèi)顯示數(shù)據(jù),否則將會換行顯示數(shù)據(jù)且按照indent的數(shù)量顯示前面的空白,同時將JSON內(nèi)容格式化顯示。默認為Noneseparators接收str。表示分隔符,實際上為(item_separator,dict_separator)的一個元組,當indent為None時,默認取值為(',',':'),表示dictionary內(nèi)的keys之間用“,”隔開,而key和value之間用“:”隔開。默認為Noneencoding接收str。表示設(shè)置的JSON數(shù)據(jù)的編碼形式,處理中文時需要注意此參數(shù)的值。默認為utf-8sort_keys接收Built-in。表示是否根據(jù)keys的值進行排序。默認為False,為True時數(shù)據(jù)將根據(jù)keys的值進行排序PyMySQL與MySQLdb都是Python中用來操作MySQL的庫,兩者使用方法一致。PyMySQL庫與MySQLdb庫的區(qū)別PyMySQL支持Python3.X版本;MySQLdb不支持Python3.X版本。數(shù)據(jù)入庫——將數(shù)據(jù)存儲入MySQL數(shù)據(jù)庫PyMySQL庫使用connect函數(shù)連接數(shù)據(jù)庫。connect函數(shù)常用的參數(shù)及其說明數(shù)據(jù)入庫——將數(shù)據(jù)存儲入MySQL數(shù)據(jù)庫參數(shù)名稱說明host接收str。表示數(shù)據(jù)庫地址,本機地址通常為。默認為Noneport接收str。表示數(shù)據(jù)庫端口,通常為3306。默認為0user接收str。數(shù)據(jù)庫用戶名,管理員用戶為root。默認為Nonepasswd接收str。

溫馨提示

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

最新文檔

評論

0/150

提交評論