Python爬蟲大數(shù)據采集與挖掘-微課視頻版- 第二版 課件匯 曾劍平-1-5概述、Web頁面及相關技術 -動態(tài)頁面采集技術與Python實現(xiàn)_第1頁
Python爬蟲大數(shù)據采集與挖掘-微課視頻版- 第二版 課件匯 曾劍平-1-5概述、Web頁面及相關技術 -動態(tài)頁面采集技術與Python實現(xiàn)_第2頁
Python爬蟲大數(shù)據采集與挖掘-微課視頻版- 第二版 課件匯 曾劍平-1-5概述、Web頁面及相關技術 -動態(tài)頁面采集技術與Python實現(xiàn)_第3頁
Python爬蟲大數(shù)據采集與挖掘-微課視頻版- 第二版 課件匯 曾劍平-1-5概述、Web頁面及相關技術 -動態(tài)頁面采集技術與Python實現(xiàn)_第4頁
Python爬蟲大數(shù)據采集與挖掘-微課視頻版- 第二版 課件匯 曾劍平-1-5概述、Web頁面及相關技術 -動態(tài)頁面采集技術與Python實現(xiàn)_第5頁
已閱讀5頁,還剩243頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Python爬蟲大數(shù)據采集與挖掘(1)

--概述《Python爬蟲大數(shù)據采集與挖掘》第二版.微課視頻版(清華大學出版社,2025)課程基本內容和課時分配32課時(供參考)概述(2課時)Web頁面及相關技術(2課時)Web應用架構與協(xié)議(2課時)普通爬蟲頁面采集技術與Python實現(xiàn)(3課時)動態(tài)頁面采集技術與Python實現(xiàn)大數(shù)據語義分析技術(2課時)Web信息提取與Python實現(xiàn)(2課時)主題爬蟲頁面采集技術與Python實現(xiàn)(2課時)DeepWeb爬蟲與Python實現(xiàn)(2課時)微博信息采集與Python實現(xiàn)(2課時)反爬蟲技術(1課時)文本處理與表示(2課時)文本分類與文本情感分析(2課時)主題建模與文本聚類(2課時)社交網絡分析、時間序列分析(2課時)綜合應用(2課時)學生作業(yè)交流(2課時)提綱互聯(lián)網大數(shù)據與采集Python大數(shù)據技術的重要性爬蟲技術研究及應用現(xiàn)狀爬蟲技術的應用場景爬蟲大數(shù)據采集的技術體系采集與挖掘的合規(guī)性大數(shù)據采集與挖掘技術展望常見互聯(lián)網大數(shù)據來源社交媒體社交網絡百科知識庫新聞網站評論信息位置型信息大數(shù)據特征的三種觀點4V:olume、Variety、Value、Velocity5V:Volume、Velocity、Variety、Veracity、Variability7V:Volume、Velocity、Vast、Variety、Veracity、Value、Visualize拓展閱讀互聯(lián)網大數(shù)據的特征大數(shù)據類型和語義更加豐富數(shù)據的規(guī)范化程度比OLTP中的數(shù)據要弱數(shù)據的流動性更大數(shù)據的開放性更好數(shù)據的來源更加豐富互聯(lián)網大數(shù)據的價值體現(xiàn)形式更加多樣化提綱互聯(lián)網大數(shù)據與采集Python大數(shù)據技術的重要性爬蟲技術研究及應用現(xiàn)狀爬蟲技術的應用場景爬蟲大數(shù)據采集的技術體系采集與挖掘的合規(guī)性大數(shù)據采集技術展望大數(shù)據采集技術的重要性若干個重要環(huán)節(jié),包括數(shù)據采集、結構化處理、數(shù)據存儲、分析挖掘、可視化、共享交易等大數(shù)據采集處于整個架構的底層,是整個架構的基礎。大數(shù)據采集技術性能的好壞直接影響到數(shù)據采集的效率和數(shù)據的質量互聯(lián)網大數(shù)據能滿足大數(shù)據技術教學的要求當前其他大數(shù)據存在的問題:數(shù)據領域封閉、共享范圍有限、數(shù)據量少、靜態(tài)數(shù)據偏多、缺乏動態(tài)機制、數(shù)據類型過于單一、應用價值很有限等。社交媒體、網絡論壇等網絡應用時刻產生各種用戶數(shù)據“互聯(lián)網+”國家戰(zhàn)略互聯(lián)網大數(shù)據解決了當前大數(shù)據研究應用存在的無米之炊的局面。Python語言生態(tài)的成熟和流行開源軟件和插件涵蓋科學計算、語言處理、文本挖掘、圖像處理等等選擇Python語言進行互聯(lián)網大數(shù)據采集技術的實現(xiàn)具有一定實際意義和必要性提綱互聯(lián)網大數(shù)據與采集Python大數(shù)據技術的重要性爬蟲技術研究及應用現(xiàn)狀爬蟲技術的應用場景爬蟲大數(shù)據采集的技術體系采集與挖掘的合規(guī)性大數(shù)據采集技術展望爬蟲技術的關注度在知網數(shù)據庫中全文精確檢索“網絡爬蟲”或“爬蟲技術”關鍵詞,并按照年度統(tǒng)計相關文獻數(shù)量后得到的趨勢圖對網絡爬蟲技術及應用關注度排名在前面的領域依次是:計算機軟件及計算機應用、互聯(lián)網技術自動化技術、新聞與傳媒、貿易經濟、圖書情報與數(shù)字圖書館、企業(yè)經濟、自然地理學和測繪學、金融投資超過90%的關注度主要集中在計算機軟件及計算機應用、互聯(lián)網技術自動化技術,它們側重于爬蟲技術研究怎么看待各種爬蟲開源包?高度封裝的開源包使得很少有人愿意深入理解其中的關鍵技術,導致這種途徑生產出來的爬蟲質量、性能和友好程度都受到很大影響。低質量的個人、小型爬蟲,存在的主要問題不遵守Robots協(xié)議爬行策略沒有優(yōu)化許多爬蟲實現(xiàn)了多線程、分布式的架構,這個看似好的軟件架構技術,對于網絡爬蟲來說可能只是一廂情愿。提綱互聯(lián)網大數(shù)據與采集Python大數(shù)據技術的重要性爬蟲技術研究及應用現(xiàn)狀爬蟲技術的應用場景爬蟲大數(shù)據采集的技術體系采集與挖掘的合規(guī)性大數(shù)據采集技術展望爬蟲技術的應用可以分為兩大類采集型爬蟲采集型爬蟲延續(xù)了搜索引擎爬蟲技術,是目前使用最廣泛的爬蟲。監(jiān)測型爬蟲利用爬蟲在內容采集和分析方面的能力對服務器的信息內容進行監(jiān)測。采集型爬蟲的典型使用場景互聯(lián)網搜索引擎互聯(lián)網輿情監(jiān)測社交媒體評論信息監(jiān)測學術論文采集離線瀏覽監(jiān)測型爬蟲的典型使用場景應用安全監(jiān)測Web自動化測試網頁掛馬SQL注入…內容安全監(jiān)測敏感信息泄密信息提綱互聯(lián)網大數(shù)據與采集Python大數(shù)據技術的重要性爬蟲技術研究及應用現(xiàn)狀爬蟲技術的應用場景爬蟲大數(shù)據采集的技術體系采集與挖掘的合規(guī)性大數(shù)據采集技術展望網絡連接層由TCPSocket連接的建立、數(shù)據傳輸以及連接管理組成頁面采集層對URL的處理搜索策略實現(xiàn)Session機制Cookie處理頁面提取層從中提取超鏈接、正文信息等內容編碼方式頁面解析的開源框架領域處理層主題爬蟲文本分析技術文本分詞主題建?!嚓P技術網絡爬蟲是一種客戶端技術,它不能離開服務端獨立工作。相關協(xié)議與規(guī)范TCP協(xié)議HTTP協(xié)議Robots協(xié)議Cookie規(guī)范網頁編碼規(guī)范HTML語言規(guī)范

Web信息提取Web頁面中的超鏈接提取正則表達式Web內容提取基于樹結構的信息提取html.parser、lxml、html5lib、BeautifulSoup等統(tǒng)計的方法應對網站頁面調整典型應用中的數(shù)據獲取技術DeepWeb主題獲取網絡爬蟲的軟件技術多線程技術單機系統(tǒng)分布式系統(tǒng)爬蟲技術評價方法合規(guī)性是否遵守Robots協(xié)議爬蟲請求行為高效性多線程DNS緩存優(yōu)化爬行策略優(yōu)化健壯性網絡異常處理程序錯誤處理超時處理等爬蟲技術評價方法可維護性配置代碼封裝、優(yōu)化智能性語義分析能力深度爬蟲爬蟲對抗健壯性、高效性和可維護性是爬蟲的基本要求;合規(guī)性是一種約束;智能性是對爬蟲系統(tǒng)的一種提升手段。技術評價方法的10個方面是否遵守Robots協(xié)議友好爬蟲請求技術高效采集技術對增量式采集的支持對動態(tài)頁面的支持頁面編碼與語言處理能力主題相關度評估對分布式架構的支持可配置線程技術容錯能力提綱互聯(lián)網大數(shù)據與采集Python大數(shù)據技術的重要性爬蟲技術研究及應用現(xiàn)狀爬蟲技術的應用場景爬蟲大數(shù)據采集的技術體系采集與挖掘的合規(guī)性大數(shù)據采集技術展望不合理使用網絡爬蟲技術進行大數(shù)據采集的案例1.程序員們,老板讓你抓高德地圖數(shù)據,你該怎么辦?辭職嗎?微信公眾號:互聯(lián)網大數(shù)據處理技術與應用,

2024年07月15日該推文描述了萬得抓取高德地圖數(shù)據的法院審判。2.某大數(shù)據服務公司的“爬蟲”數(shù)據采集違法案例解讀,微信公眾號:互聯(lián)網大數(shù)據處理技術與應用,

2021年04月15日該推文描述了杭州西湖法院對杭州M數(shù)據科技有限公司侵犯個人信息,與爬蟲技術有關。更多案例閱讀公眾號的歷史推文:數(shù)據抓取權限訪問權限可以從數(shù)據是否公開、頁面是否許可來判斷。爬蟲對不公開的數(shù)據當然不具備抓取權限公開或不公開的判斷依據并不容易界定,因為公開是有一定的范圍含義。特定人群使用,屬于不公開數(shù)據Robots協(xié)議許可非法獲取計算機信息系統(tǒng)數(shù)據罪人采用破解密碼、盜取密碼、強行突破安全工具等方法,在沒有得到許可時違背計算機信息系統(tǒng)控制人或所有人意愿進入其無權進入的計算機信息系統(tǒng)中。爬蟲的訪問方式指爬蟲訪問服務器的方式,其邊界是爬蟲是否對服務器的正常運行造成影響。Robots協(xié)議,在該協(xié)議中定義了抓取延時、抓取時間段等參數(shù),如果爬蟲沒有遵守這些約定,則可能導致服務器不能正常運行。數(shù)據量與數(shù)據的使用數(shù)據使用邊界是指抓取的數(shù)據是否用于商業(yè)用途、是否涉及版權限定。是否對個人隱私數(shù)據進行了存儲,并基于累積數(shù)據進行挖掘?;ヂ?lián)網公開資源爬取并不違法,網絡爬蟲作為互聯(lián)網大數(shù)據采集的技術手段,本身具有中立性。而抓取沒有權限、沒有授權的數(shù)據,對服務器正常運行產生影響,以及抓取后的數(shù)據用于商業(yè)用途、未經授權公開展示,應該是突破了爬蟲大數(shù)據采集的邊界。與爬蟲大數(shù)據采集相關的規(guī)范和法律條款主要出現(xiàn)在《中華人民共和國網絡安全法》《計算機信息系統(tǒng)安全保護條例》《中華人民共和國個人信息保護法》《信息安全技術個人信息安全規(guī)范》《中華人民共和國數(shù)據安全法》和《中華人民共和國反不正當競爭法》中。提綱互聯(lián)網大數(shù)據與采集Python大數(shù)據技術的重要性爬蟲技術研究及應用現(xiàn)狀爬蟲技術的應用場景爬蟲大數(shù)據采集的技術體系采集與挖掘的合規(guī)性大數(shù)據采集技術展望HTTP協(xié)議的升級IPv6的廣泛應用HTML語言的發(fā)展新型網站架構的出現(xiàn)Web應用的推動行業(yè)規(guī)范的推動大模型對互聯(lián)網大數(shù)據技術的影響大模型更加突出了互聯(lián)網大數(shù)據的作用大模型對互聯(lián)網大數(shù)據采集的個性化提出新要求大模型對數(shù)據源的動態(tài)性管理更嚴格大模型為互聯(lián)網大數(shù)據技術提供新手段Python爬蟲大數(shù)據采集與挖掘(2)

--Web頁面及相關技術《Python爬蟲大數(shù)據采集與挖掘》第二版.微課視頻版(清華大學出版社,2025)

教材《Python爬蟲大數(shù)據采集與挖掘》及配套公眾號

(當當、京東可購書)提綱HTML語言規(guī)范編碼體系與規(guī)范在Web頁面處理中使用正則表達式爬蟲與大數(shù)據分析中相關Python基礎HTML標簽html標簽很多,從閉合的角度可以分為閉合標簽與空標簽。<body>和</body>空標簽是沒有內容的標簽,通常用來占位Html標簽還可以按照在文檔中的位置特性進行分類,主要分為塊級標簽、行內(內嵌)標簽和行內-塊級(內嵌-塊級)標簽塊級標簽是獨占一行的標簽,并且標簽間元素能隨時設置寬度、高度、頂部和底部邊距等。行內標簽的元素和其他元素在同一行上,而元素的寬度、高度、頂部和底部邊距不可設置。多個行內-塊級標簽的元素可以顯示在同一行,并且可以設置元素的寬度、高度、頂部和底部邊距可以隨時設置。除了標簽名本身外,標簽還可以帶有一些屬性。<ahref='/'target='_blank'>跳轉到baidu</a><img

src="/images/pic.gif"width="28"height="30"><divclass="containerlogo-search">HTML整體結構HTML文檔都具有一個基本的整體結構,包括頭部(Head)和主體(Body)兩大部分,其中頭部描述瀏覽器所需的信息,主體包含網頁所要展示的具體內容。

頭部頭部描述瀏覽器所需要的信息,比如頁面標題、關鍵詞、說明等內容;頭部包含的信息不作為網頁的內容來顯示,但是會影響到網頁的顯示效果。頭部信息的開始和結尾是由<head>和</head>兩個標簽標記的,<title>、<base>、<link>、<meta>、<script>以及<style>標簽可以添加到頭部信息中。標簽描述<head>定義關于文檔的信息<title>定義文檔的標題<base>定義頁面上所有鏈接的默認地址或默認目標<link>定義文檔與外部資源之間的關系<meta>定義關于HTML文檔的元數(shù)據<script>定義客戶端腳本文件<style>定義文檔的樣式文件主體

網頁需要顯示的實際內容都包含在主體之中,由<body>、</body>表示主體信息的開始和結尾。對于網絡爬蟲抓取Web頁面而言,所關注的信息內容也都是大部分封裝在<body>和</body>之間。CSS層疊樣式表單,CascadingStyleSheet定義如何顯示html元素。即使是相同的html文檔,應用的CSS不同,從瀏覽器看到的頁面外觀也會不同。內聯(lián)樣式<pstyle="color:blue">Thisisaparagraph.</p>內部樣式表在頭部通過

標簽定義內部樣式表外部引用當樣式需要被很多頁面引用時,可以使用獨立的外部CSS文件,這樣可以簡單頁面模式的設計。<head><linkrel="stylesheet"type="text/css"href="mystyle.css"></head>HTML編碼在頁面上的空白處按鼠標右鍵,查看源代碼與爬蟲程序設計相關常用標簽(1)<meta>最重要的是字符編碼,它使用<meta>的charset屬性聲明Web文檔的字符編碼。(2)<p><p>標簽定義段落。可以將要顯示的文章內容放在<p>與</p>標簽之間。該標簽會自動在段落前后添加一些空白,可以使用CSS來進行調整。通常在Web頁面中正文部分的各個段落都是通過該標簽來表示。(3)<div><div>用來定義文檔中的分區(qū)或節(jié),把文檔分割成為獨立的部分,經常用于網頁布局。該標簽通常會使用id或class屬性設計額外的樣式,其中,class用于元素組,而id用于標識單獨的唯一的元素。(4)<table><table>定義頁面的表格,在很多頁面中數(shù)據以表格形式展現(xiàn),因此也是爬蟲程序需要處理的重要標簽之一。html頁面中的簡單表格由table元素以及一個或多個tr、th、td元素組成。其中,tr元素定義表格行,td元素定義表格單元,th元素定義表格標題列;同時,th默認加粗并居中顯示。<table>的常用屬性為表格邊框屬性border,當使用border="1"設置邊框時,會在所有表格單元以及表格上嵌套邊框。(5)<a><a>標簽定義超鏈接,用于從一張頁面鏈接到另一張頁面,其最重要的屬性是href,它指示鏈接的目標。爬蟲在采集到一個Web頁面之后,就需要在頁面中尋找該標簽,并提取出超鏈接作為新的爬行任務。(6)<form><form>可以把用戶輸入的數(shù)據傳送到服務器端,這樣服務器端程序就可以處理表單傳過來的數(shù)據。(7)<base>為了簡化包含相對路徑的超鏈接的轉換過程,HTML語言提供了<base>標簽,用來指定頁面中所有超鏈接的基準路徑。例如,如果在p.html中有如下的<base>標簽,<base/>那么,<img

src="images/p2.gif">表示從http://www.a.b.c/aaa/images/p2.gif獲得圖片文件。(7)<script><script>用于在html頁面內插入腳本。其type屬性為必選的屬性,用來指示腳本的MIME類型。下面的代碼在html頁面內插入javascript腳本,在網頁中輸出“HelloWorld!”。<scripttype="text/javascript">document.write("HelloWorld!")</script>HTML語言版本進化1999年html42017年12月萬維網聯(lián)盟(W3C)發(fā)布的html5.2(1)語義化標簽(2)網頁多媒體(3)html5添加canvas元素,canvas使用JavaScript用在網頁上繪制圖形、動畫。(4)html5添加了地理位置API,可以定位當前使用者的經緯度等。(5)HTML5引入了應用程序緩存,緩存之后,可在沒有網絡連接連接時訪問網頁,同時還可以提高頁面加載速度,減少服務器負載。提綱HTML語言規(guī)范編碼體系與規(guī)范在Web頁面處理中使用正則表達式爬蟲與大數(shù)據分析中相關Python基礎網頁編碼網頁編碼是指網頁中字符的編碼方式。目前國內常見的網頁字符編碼主要有utf-8、gbk、gb2312,其中utf-8為國際化編碼,在各國各地區(qū)的網站中都很常見,可以說是最通用的字符編碼。此外,有些日本網頁會使用EUC-JP、SHIFT-JIS以及韓國網頁會使用EUC-KR等字符編碼。網頁文本編碼互聯(lián)網上各種不同語言(中文、英文、日文…)文字,在不同的用戶端怎么正常顯示?網頁編碼是指網頁中字符的編碼方式。中文常見的網頁字符編碼主要有utf-8、gbk、gb2312等日本文字:Shift_JIS等utf-8為國際化編碼,在各國各地區(qū)的網站中都很常見,可以說是最通用的字符編碼。不同的網站的編碼并不完全相同,使用爬蟲解析文本信息的時候需要考慮網頁的編碼方式,否則獲得的結果可能是亂碼。可以從網頁的charset屬性中看到其編碼自動檢測一個頁面編碼方式,可以通過chardet包來進行,需要事先安裝。http://www.stat.go.jp/ASCII標準ASCII碼使用七位二進制編碼表示美式英語中會使用到的控制字符(例如退格、空格)以及可打印字符(例如數(shù)字0-9、大小寫英文字母、標點符號、運算符號、美元符號),編碼范圍為0~127gb2312/gbk中文字符編碼。主要有gb2312、gbk以及gb18030。gb2312使用兩個字節(jié)連在一起表示一個漢字,兩個字節(jié)中前一個稱為高字節(jié)(范圍0xA1-0xF7),后一個為低字節(jié)(范圍0xA1-0xFE)。gb2312共收錄6763個漢字,每個漢字占兩個字節(jié)。gbk編碼是gb2312的擴展,gbk兼容gb2312的所有內容同時又增加了近20000個新的漢字(包括繁體字)和符號。unicodeUniversalMultiple-OctetCodedCharacterSetunicode通常使用兩個字節(jié)來編碼,稱為UCS-2(UniversalCharacterSetcodedin2octets)。為了使unicode能表示更多的文字,人們提出了UCS-4使用四個字節(jié)編碼。unicode編碼范圍為0-0x10FFFF,最大的字符需要至少三個字節(jié)來表示。為了解決編碼字符集unicode在網頁中使用的效率問題,utf-8、utf-16等編碼方式被提出。utf-8utf-8(8-bitunicodeTransformationFormat)是一種針對unicode字符集的可變長度字符編碼方式。utf-8對不同范圍的字符使用不同長度的編碼,規(guī)則如下:(1)unicode碼點在0x00-0x7F之間的字符,UTF-8編碼與ASCII編碼完全相同。(2)unicode碼點大于0x7F的字符,設需要使用n個字節(jié)來表示(n>1),第一個字節(jié)的前n位都設為1,第n+1位設為0,剩余的n-1個字節(jié)的前兩位都設為10,剩下的二進制位使用這個字符的unicode碼點來填充。Python3中的字符串默認的編碼為unicode,因此,gbk、gb2312等字符編碼與utf-8編碼之間都必須通過unicode編碼才能互相轉換。即在python中,使用encode()將unicode編碼為utf-8、gbk等,而使用decode()將utf-8、gbk等字符編碼解碼為unicode>>>n='大數(shù)據'#unicode>>>g=n.encode('gbk')#gbk>>>u=n.encode('utf-8')#utf-8>>>g2=n.encode('gb2312')#gb2312>>>g2u=g.decode("gbk").encode("utf-8")#gbk轉成utf-8Python對編碼轉換的支持網頁中的編碼和Python處理不同的網站的編碼并不完全相同,使用爬蟲解析文本信息的時候需要考慮網頁的編碼方式,否則獲得的結果可能是亂碼。可以從網頁的charset屬性中看到其編碼,例如查看網頁源代碼,檢查網頁編碼如<metacharset="utf-8">指定了網頁的編碼為utf-8。用于解析文本的Python庫主要有BeautifulSoup。BeautifulSoup使用編碼自動檢測字庫(unicodeDammit、chardet等)來識別輸入文檔的編碼,并將其轉換成unicode編碼;同時,BeautifulSoup將輸出文檔自動轉換成utf-8編碼。自動檢測一個頁面編碼方式,可以通過chardet包來進行,需要事先安裝。具體方法如下。

importchardetimportrequestsres=requests.get("")cs=chardet.detect(res.content)#通過響應信息的content屬性來判斷頁面的編碼方式chardet.detect的檢測結果是一個字典,如下所示,字典的關鍵字包含'encoding'和'confidence'等,其中前者的值就是頁面編碼,后者表示自動檢測時對結果的確信度[0,1]。{'encoding':'UTF-8-SIG','confidence':1.0,'language':''}因此,可以通過cs['encoding']來得到頁面編碼。URL中的漢字編碼/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E5%A4%A7%E6%95%B0%E6%8D%AE&fenlei=256&rsv_pq=d8be0b36000042a3&rsv_t=b509eYYh8nGUeDFm46I8gUisdHT1AVO2rSeArcfJvACEO64YYJLpzyb%2FhEI&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=11&rsv_sug1=14&rsv_sug7=101&rsv_sug2=0&rsv_btype=i&inputT=4506&rsv_sug4=4506提綱HTML語言規(guī)范編碼體系與規(guī)范在Web頁面處理中使用正則表達式爬蟲與大數(shù)據分析中相關Python基礎網絡爬蟲的一個基本功能是根據URL進行頁面采集,因此,從頁面中提取URL是爬蟲的共性技術問題。由于超鏈接的表示通常具有固定的模式,因此在具體實現(xiàn)頁面鏈接提取時,采用正則表達式匹配方法是比較簡易的方法。Python中,re模塊提供了正則表達式匹配所需要的功能。匹配和搜索分割字符串匹配和替換最常用的函數(shù)是findall,其函數(shù)原型為:findall(pattern,string[,flags])其中,string為輸入的字符串,pattern是指定的匹配模式,flags是一個可選參數(shù),用于表示匹配過程中的一些選項。函數(shù)返回結果一個列表。'.'通配符:代表任意字符,除\n以外,一個點一個字符ret=re.findall('m...e',"catandmouse")#[‘mouse’]'*'重復匹配允許*之前的一個字符重復多次ret=re.findall('ca*t',"caaaaatandmouse")#[‘caaaaat’]‘?'也是重復匹配,但是?之前的字符只能重復0次或者1次ret=re.findall('ca?t',"catandmouse")#['cat']ret=re.findall('ca?t',"caaaaatandmouse")#[],無匹配'+'也是重復匹配但是至少重復1次,不能是0次ret=re.findall('ca+t',"caaaaatandmouse")#[‘caaaaat’]'{}'也是重復匹配,但是匹配次數(shù)可以自行設置,次數(shù)可以是一個數(shù),或者范圍ret=re.findall('ca{5}t',"caaaaatandmouse")#5次,[‘caaaaat’]ret=re.findall('ca{1,5}t',"caaaatcatdmouse")#1到5次,['caaaat','cat']‘[]’定義匹配的字符范圍。比如[a-zA-Z0-9]表示相應位置的字符要匹配英文字符和數(shù)字,‘-‘表示范圍。ret=re.findall('[0-9]{1,5}',"12catsand6mice")#['12','6']'\'轉義字符,如果字符串中有特殊字符需要匹配,就需要進行轉義。這些特殊字符包括.*?+$^[]{}|\-。ret=re.findall('\^c.t',"^catmouse")#['^cat']ret=re.findall('\[...\]',"cat[and]mouse")#['[and]']從HTML文檔中提取超鏈接,例如:

s='''<li><ahref="/o/2018-11-06/a75.shtml"target="_blank">進博會</a></li><li><ahref="/o/2018-11-06/a76.shtml"target="_blank">大數(shù)據</a></li><li><ahref="/o/2018-11-06/a75.shtml"target="_blank">進博會</a></li>'''re.findall("http://[a-zA-Z0-9/\.\-]*",s)該正則表達式的含義是以http://開始,后續(xù)是“大小字母數(shù)字或.-”中的任意多個字符。對于前述字符串s,可以得到結果:['/o/2018-11-06/a75.shtml','/o/2018-11-06/a76.shtml','/o/2018-11-06/a75.shtml‘]提綱HTML語言規(guī)范編碼體系與規(guī)范在Web頁面處理中使用正則表達式爬蟲與大數(shù)據分析中相關Python基礎字符串字符串使用一對單引號、雙引號或三引號定義,它們之間可以互相包含。字符串的切片操作在編程中經常使用。,字符串作為一個對象,其常用方法如strip()、index()、join()、split()、replace(),在爬蟲和Web數(shù)據處理程序中也經常出現(xiàn)。列表列表是由一系列元素構成的有序整體,它們可以是相同的數(shù)據類型,也可以是不同的數(shù)據類型。,列表推導式也是比較常用的編程技術,可以有效地減少程序代碼,讓程序看起來更加簡潔。字典字典作為一種保存關鍵詞和值對應關系的數(shù)據類型,在Python的各類應用程序設計中發(fā)揮著重要作用。用字典記錄HTTP請求頭的屬性及其屬性值,如{"Host":"","Connection":"keep-alive","Accept-Language":"zh-CN,zh;q=0.9"}記錄訪問百度主頁的HTTP請求頭的3個屬性。集合集合是一些各不相同的元素組成的數(shù)據集,利用其元素各不同的特點,可以用它來完成如下的任務:去除重復的URL。異常處理捕捉異常的基本結構是類似try...except...except...else的分支結構,其中,每個except用來捕捉一種異常,可以根據程序的具體情況,配置任意數(shù)量的except,并在相應分支進行異常處置。自定義函數(shù)自定義函數(shù)通過def關鍵字來說明,每個函數(shù)可以有返回值,也可以沒有返回值。對于自定義函數(shù),重要的是函數(shù)參數(shù)。Python中的自定義函數(shù)參數(shù)規(guī)定與內置函數(shù)一致。面向對象編程面向對象編程通過代碼的封裝、抽象等基本策略,提高了復雜程序的邏輯性和可讀性。其基本特征是使用class定義類,在類中可以定義屬性和方法,在其他程序中調用該類。Python爬蟲大數(shù)據采集與挖掘(3)

--Web應用架構與協(xié)議《Python爬蟲大數(shù)據采集與挖掘》第二版.微課視頻版(清華大學出版社,2025)教材《Python爬蟲大數(shù)據采集與挖掘》及配套公眾號

(當當、京東可購書)提綱常用的Web服務器軟件Web服務器的應用架構Robots協(xié)議HTTP協(xié)議狀態(tài)保持技術常見的Web服務器軟件有Apache、IIS(InternetInformationServer)、Nginx、Lighttpd、Zeus、Resin、tomcat等。Python自帶Web啟動、運行/zh-cn/3/library/http.server.html提綱常用的Web服務器軟件Web服務器的應用架構Robots協(xié)議HTTP協(xié)議狀態(tài)保持技術基于Web的互聯(lián)網應用都離不開Web服務器,在門戶網站、網絡論壇、電子商務網站等典型應用中,核心部件都是Web服務器。Web應用架構支持不同規(guī)模、不同訪問能力的部署四種典型的應用架構Client/ServerClient/Server/DatabaseWeb服務器集群虛擬主機架構Client/Server架構客戶端可以是各種瀏覽器,也可以是爬蟲程序。Client/Server/Database在網絡爬蟲技術中,這種架構支持了動態(tài)網頁的實現(xiàn)。Web服務器集群針對大量用戶并發(fā)訪問的應用虛擬主機架構虛擬主機是另一種常見的Web應用架構,它是指在一臺服務器里配置多個網站,使得每個網站看起來具有獨立的物理計算機。虛擬主機的實現(xiàn)方法有三種:(1)基于IP地址的方法:在服務器里綁定多個IP,配置WEB服務器,把網站綁定在不同的IP上。當客戶端或爬蟲訪問不同的IP地址時,就得到不同的網站的響應。(2)基于端口的方法:不同網站共享一個IP地址,但是通過不同的端口實現(xiàn)對不同網站的訪問。這時,客戶端訪問的URL的形式是http://hostname:port/,需要指定端口。(3)基于主機名的方法:設置DNS將多個域名解析到同一個IP地址上,IP地址對應的服務器上配置WEB服務端,添加多個網站,為每個網站設定一個主機名。Web頁面類型根據Web頁面組成結構中的信息內容的生成方式不同,可以將Web頁面分為靜態(tài)頁面、動態(tài)頁面、以及偽靜態(tài)頁面三大類。動態(tài)型頁面一般需要數(shù)據庫等其他計算、存儲服務的支持靜態(tài)頁面以html文件的形式存在于Web服務器的硬盤上偽靜態(tài)頁面是以靜態(tài)頁面展現(xiàn)出來,但實際上是用動態(tài)腳本來處理的。頁面文件的組織方式大量的Web頁面文件在Web服務器中的組織管理方式對于提升頁面的可維護性是非常重要的。/2025/0226/c31a144286/page.htm虛擬根目錄子目錄文件名Html中的超鏈接(1)<p><imgSRC="images/p1.gif"><ahref="a2.html">a2</a></p>采用相對鏈接,訪問a2.html。(2)<p><imgSRC="images/p2.gif"><ahref="..\bbb\b1.html">b1</a></p>采用相對鏈接,訪問b1.html,..表示上級目錄,此處即為虛擬根目錄。(3)<p><imgSRC="images/p3.gif"><ahref=":8080\bbb\b1.html">b1</a></p>采用http開始的完整URL絕對鏈接,訪問b1.html。對于爬蟲來說,在獲取a1.html頁面之后,要尋找其中的href超鏈接。對于絕對鏈接,只需要把href=后面的字符串提取出來即可。而對于相對超鏈接,沒有完整的http,單純從這個href所指定的鏈接是無法知道其真正的結果,需要進行超鏈接的轉換。提綱常用的Web服務器軟件Web服務器的應用架構Robots協(xié)議HTTP協(xié)議狀態(tài)保持技術為了給Web網站提供靈活的控制方式來決定頁面是否能夠被爬蟲采集,1994年搜索行業(yè)正式發(fā)布了一份行業(yè)規(guī)范,即Robots協(xié)議。Robots協(xié)議又稱為爬蟲協(xié)議、機器人協(xié)議等,其全稱是RobotsExclusionProtocol,即“網絡爬蟲排除協(xié)議”。Robots協(xié)議的規(guī)范在瀏覽器中打開網站后,在網站首頁的地址后面添加“/robots.txt”,如果網站設置了訪問許可,按回車就可以看到網站的robots協(xié)議,即robots.txt文件內容。Robots.txt文件的具體約定如下:(1)文件中包含一個或多個記錄,每個記錄由一行或多行空白行隔開。User-agent的使用方式是User-agent[agent_name],其中agent_name典型的有兩種,即*和具體的爬蟲標識。Disallow和Allow的使用決定了不同的訪問許可。一個目錄如果沒有顯式聲明為Disallow時,它是允許訪問的。zhihu網站的robots/robots.txt對baidu爬蟲的約定:定義了不允許的URL模式對sougou爬蟲的約定:定義了不允許的URL模式和允許的URL模式對其他任何爬蟲的約定:不允許爬取zhihu在編寫爬蟲程序時,了解robots的拓展功能,對于設計更加友好的爬蟲是非常有益的。這些拓展功能主要有:通配符的使用、抓取延時、訪問時段、抓取頻率和Robots版本號。具體見教材。提綱常用的Web服務器軟件Web服務器的應用架構Robots協(xié)議HTTP協(xié)議狀態(tài)保持技術HTTP版本的技術特性HTTP/1.1是目前使用最廣泛的HTTP協(xié)議版本,于1997年發(fā)布。HTTP/1.1與之前的版本相比,改進主要集中在提高性能、安全性以及數(shù)據類型處理等方面。(1)與HTTP/1.0最大的區(qū)別在于,HTTP/1.1默認采用持久連接??蛻舳瞬恍枰谡埱箢^中特別聲明:Connection:keep-alive,但具體實現(xiàn)是否聲明依賴于瀏覽器和Web服務器。請求響應結束后TCP連接默認不關閉,降低了建立TCP連接所需的資源和時間消耗。(2)HTTP/1.1支持管道(pipelining)方式,可以同時發(fā)送多個請求。在發(fā)送請求的過程中,客戶端不需要等待服務器對前一個請求的響應,就可以直接發(fā)送下一個請求。管道方式增加請求的傳輸速度,提高了HTTP協(xié)議的效率。但是,服務器在響應時,必須按照接收到請求的順序發(fā)送響應,以保證客戶端收到正確的信息。(3)HTTP/1.1添加Host請求頭字段。隨著虛擬主機這種應用架構技術的發(fā)展,在一臺物理服務器上可以存在多個虛擬主機,這些虛擬主機共享一個IP地址。HTTP/1.1在請求頭中加入host請求頭字段,指出要訪問服務器上的哪個網站。HTTP報文HTTP報文中存在著多行的內容,一般是由ASCII碼串組成,各字段長度是不確定的。HTTP的報文可分為兩種:請求報文與響應報文。1.requestMessage(請求報文)客戶端

服務器端2.responseMessage(響應報文)服務器端→客戶端請求報文<method><request-URL><version><headers>

<entity-body>請求體通過“param1=value1¶m2=value2”的鍵值對形式,將要傳遞的請求參數(shù)(通常是一個頁面表單中的組件值)編碼成一個格式化串。GET/example.html?name=Jack&password=1234HTTP/1.0User-Agent:Mozilla/5.0(WindowsNT10.0;WOW64)Accept:text/html

響應報文與請求報文類似,HTTP響應報文由起始行、頭部(headers)以及實體(entity-body)構成。HTTP/1.0或HTTP/1.1規(guī)定的響應報文格式如下。

<version><status><reason-phrase><headers>

<entity-body>報文的<entity-body>部分是響應體,響應體是HTTP要傳輸?shù)膬热荨8鶕憫畔⒌牟煌?,響應體可以為多種類型的數(shù)字數(shù)據,比如圖片、視頻、CSS、JS、HTML頁面或者應用程序等。HTTP頭部Accept請求頭表示可接受的響應內容。同時,與Accept首部類似的還有Accept-Charset、Accept-Encoding、Accept-Language等首部,分別表示客戶端可接受的字符集、可接受的編碼方式和可接受的語言。User-Agent屬性表示客戶端的身份標識字符串。通過該字符串使得服務器能夠識別客戶使用的操作系統(tǒng)及版本、CPU類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等信息。Cookie是請求報文中可用的屬性,也是客戶端最重要的請求頭。Cookie存儲了客戶端的一些重要信息,例如身份標識、所在地區(qū)等,通常是一個文本文件。在向服務器發(fā)送URL請求時,可以將文件內容讀出,附加在HTTP的請求頭中,可以免去用戶輸入信息的麻煩。拓展閱讀HTTP狀態(tài)碼HTTP狀態(tài)碼(HTTPStatusCode)是用來表示網頁服務器HTTP響應狀態(tài)的3位數(shù)字代碼。通過狀態(tài)碼可以得知服務器的響應狀態(tài),以便更好地處理通信過程中遇到的問題。對于爬蟲程序,可以通過這個狀態(tài)碼來確定頁面抓取結果。HTTP狀態(tài)碼由RFC2616規(guī)范定義的,并得到RFC2518、RFC2817、RFC2295、RFC2774、RFC4918等規(guī)范擴展。狀態(tài)碼包含了五種類別,即消息、成功、重定向、請求錯誤和服務器錯誤。狀態(tài)碼類別分類描述1XX信息狀態(tài)碼表示服務器已經收到請求,需要繼續(xù)處理。在HTTP/1.0中沒有定義1XX狀態(tài)碼,因此除非在某些試驗條件下,服務器不要向此類客戶端發(fā)送1XX響應。2XX成功狀態(tài)碼表示請求被成功接收并處理。3XX重定向狀態(tài)碼表示需要采取進一步操作才能完成請求。這類狀態(tài)碼用來重定向,對于GET或HEAD請求,服務器響應時會自動將客戶端轉到新位置。4XX客戶端錯誤狀態(tài)碼表示客戶端的請求可能出錯,服務器無法處理請求。5XX服務器錯誤狀態(tài)碼表示服務器在處理請求的過程中內部發(fā)生了錯誤。HTTPS提綱常用的Web服務器軟件Web服務器的應用架構Robots協(xié)議HTTP協(xié)議狀態(tài)保持技術由于HTTP協(xié)議本身是無狀態(tài)的,客戶端向服務器發(fā)送一個請求request,然后服務器返回一個response,不同URL之間的狀態(tài)無法共享,即狀態(tài)無法保持。在一個通信系統(tǒng)中要實現(xiàn)狀態(tài)保持,就只有從客戶端和服務端兩個角度來設計了,相應的,這兩種狀態(tài)保持技術就是Cookie和Session。Cookie是由服務端生成,并在客戶端進行保存和讀取的一種信息,Cookie通常以文件形式保存在用戶端。查看Cookie的方法,隨瀏覽器不同而不同在google瀏覽器中查看cookieSession是另一種常見的在客戶端與服務器之間保持狀態(tài)的機制,在一定程度上解決或緩解了上述問題,準確理解其技術原理有利于設計更好的動態(tài)爬蟲。Session可以看作是Web服務器上的一個內存塊,可以將原本保存在Cookie中的用戶信息存儲在該內存塊中。而客戶端和服務器之間則依靠一個全局唯一標識Session_id來訪問Session中的用戶數(shù)據,這樣只需要在Cookie中保存Session_id就可以實現(xiàn)不同頁面之間的數(shù)據共享??梢姡赟ession機制下,除了Session_id外,其他用戶信息并不保存到Cookie文件中,從而解決了上述兩個問題。Python爬蟲大數(shù)據采集與挖掘(4)

--普通爬蟲體系結構《Python爬蟲大數(shù)據采集與挖掘》第二版.微課視頻版(清華大學出版社,2025)

提綱普通爬蟲體系結構Web服務器連接器超鏈接及域名提取與過濾異常處理爬行策略與實現(xiàn)爬蟲多線程技術Web服務器連接器向指定的Web服務器發(fā)起連接請求,再建立爬蟲和Web服務器之間的網絡連接。該連接就作為后續(xù)發(fā)送URL和接收服務器返回信息的通路,直到爬蟲或服務器斷開該連接。在該連接上向Web服務器發(fā)送URL頁面請求命令,并等待Web服務器的響應。對于一個新的網站,在發(fā)送URL請求之前,應當檢查其根目錄下是否有Robots.txt文件。如果有,則應當對該文件進行解析,建立服務器訪問要求和URL許可列表。同時需要處理各種可能的網絡異常、各種可能Web服務器異常,例如HTTP404錯誤等。對獲取到的HTML文件進行URL提取和過濾,由頁面解析器對HTML文本進行分析,提取其中的所包含的URL。進一步,根據Robots.txt的訪問許可列表、是否已經爬行過等基本規(guī)則對提取出來的URL進行過濾,以排除掉一些不需要獲取的頁面。根據一定的爬行策略,將每個URL放入到URL任務中的適當位置。當某個URL對應的頁面爬行完畢后,Web服務器連接器從URL爬行任務獲得新的URL,上述過程不斷地重復進行,直到爬行任務為空,或者用戶中斷為止。提綱普通爬蟲體系結構Web服務器連接器超鏈接及域名提取與過濾異常處理爬行策略與實現(xiàn)爬蟲多線程技術整體處理過程Web服務器連接器模塊主要功能的實現(xiàn),可以用如下的流程來描述。輸入:URL,形式為:http(https)://域名部分:端口號/目錄/文件名.文件后綴,或http(https)://域名部分:端口號/目錄/其中,目錄可以包含多層子目錄。處理過程:(1)從URL中提取域名和端口號,如果端口號為空,則設置為默認的端口號,即80;(2)以域名和端口號為參數(shù),創(chuàng)建Socket連接;(3)連接建立后,檢查服務器的根目錄是否存在robots.txt文件;(4)如果存在則解析robots.txt文件,生成許可列表和服務器對訪問要求的參量;(5)根據許可列表和訪問時間限定,如果允許的話,則向服務器發(fā)送URL請求;(6)等待服務器響應;(7)進行異常處理,針對各種已知的HTTP標準錯誤代碼,做好預案;(8)接收服務器返回的數(shù)據,把數(shù)據保存到文件中;(9)斷開網絡連接。輸出:頁面的HTML文件DNS緩存DNS緩存是一種被高度封裝、但又對爬蟲性能有較大影響的處理模塊。DNS緩存的實現(xiàn)可以在操作系統(tǒng)或虛擬機、解釋器,以及應用層上進行。默認情況由操作系統(tǒng)自行管理緩存。在應用層實現(xiàn)DNS緩存,可以自己用Python的類來編寫,也可以基于dnspython工具包來進行緩存管理的實現(xiàn)。importdns.resolvera=dns.resolver.resolver("")#將主機名轉換為IP地址ip=a[0].address#獲得相應的IP地址‘1'requests/response的使用方法函數(shù)名函數(shù)功能requests.request()用于構造一個請求requests.get()獲取HTML網頁的主要方法,對應HTTP的GETrequests.head()獲取HTML網頁頭部的信息方法,對應HTTP的HEADrequests.post()向HTML網頁提交POST請求方法,對應HTTP的POSTrequests.put()向HTML網頁提交PUT請求的方法,對應HTTP的PUTrequests.patch()向HTML網頁提交局部修改請求,對應于HTTP的PATCHrequests.delete()向HTML頁面提交刪除請求,對應HTTP的DELETErequests.Session()在不同次請求中,Web服務器保持某些參數(shù)requests的函數(shù)原型get(url,params=None,**kwargs)如,r=requests.get("/")然后通過r.text即可獲得指定url的頁面的HTML內容。get函數(shù)的返回結果,即這個例子中的r,是一個requests.Response對象屬性說明status_codeHTTP請求的返回狀態(tài)textHTTP響應內容的字符串形式,即頁面內容encoding從HTTPheader中猜測的響應內容編碼方式apparent_encoding從內容中分析出的響應內容編碼方式contentHTTP響應內容的二進制形式Response對象屬性函數(shù)get的參數(shù)**kwargs是用于控制請求的一些附屬特性,包括headers,cookies,params,proxies等,總共有12個控制參數(shù)

??刂茀?shù)的使用如用于配置HTTP請求頭信息http_headers={'User-Agent':'Mozilla/5.0’,#其他屬性和屬性值}r=requests.get("/",headers=http_headers)HTTP請求頭屬性及屬性值,通過瀏覽器的F12查看頁面的請求過程獲得主要的控制參數(shù)及功能介紹如下:(1)headers:是Python中的字典型變量,可以用來模擬任何瀏覽器標識來發(fā)起url訪問。(2)cookies:字典或CookieJar,指的是從http中解析cookie(3)timeout:用于設定超時時間,單位為秒,當發(fā)起一個get請求時可以設置一個timeout時間,如果在timeout時間內請求內容沒有返回,將產生一個timeout的異常。(4)proxies:字典,用來設置訪問代理服務器。(5)params:字典或字節(jié)序列,作為參數(shù)增加到url中,使用這個參數(shù)可以把一些鍵值對以?key1=value1&key2=value2的模式增加到url中例如:kv={‘key1:’values,‘key2’:values}r=requests.request(‘GET’,‘http:www.python123.io/ws’,params=kw)(6)data:字典,字節(jié)序或文件對象,重點作為向服務器提供或提交資源是提交,作為request的內容(7)json:json格式的數(shù)據,json合適在相關的html,http相關的web開發(fā)中非常常見,也是http最經常使用的數(shù)據格式,作為內容部分可以向服務器提交。為了正確地從get的返回結果中獲得頁面內容,一個很重要的步驟是需要檢查頁面的編碼方式,然后設置requests.Response對象的encoding屬性。r=requests.get("/",headers={'User-Agent':'Mozilla/5.0'},timeout=10)#同時指定了headers和timeoutr.encoding=’utf-8’#設定為頁面的編碼,即頁面源碼中charset的值r.text#此為頁面的HTML文本信息提綱普通爬蟲體系結構Web服務器連接器超鏈接及域名提取與過濾異常處理爬行策略與實現(xiàn)爬蟲多線程技術Web頁面中超鏈接有以下若干種分類方法。按照鏈接的形式不同,可以分為絕對鏈接、相對鏈接和書簽。按照鏈接的路徑指向不同,可以分為三種類型:內部鏈接,錨點鏈接和外部鏈接。按照超鏈接指向的資源不同,可以分為Web頁面超鏈接、圖片超鏈接、視頻超鏈接、等等。按照鏈接的存在方式不同,可以分為動態(tài)超鏈接和靜態(tài)超鏈接。提取方法與Web頁面中正文等其他信息提取不同,超鏈接具有顯著的特征模式,一般有:(1)Tag標簽為a,屬性為href(2)Tag標簽為資源名稱,例如img、audio,屬性為scr由于具備一定模式,在程序設計中使用正則表達式就會更加容易。正則表達式是用一種用來標識具有一定信息分布規(guī)律的字符串,常用來進行字符串匹配。在頁面內容中提取超鏈接的一種正則表達式是:"http://[a-zA-Z0-9/\.-]*",用于re.findall函數(shù)中,但這個表達式只能提取http://開始的超鏈接。對于圖像等其他類型的資源超鏈接,需要根據相應的特征模式進行修改。對于相對鏈接需要轉換成為絕對鏈接,轉換的方法是根據當前頁面的URL所對應的虛擬目錄名稱提取基準目錄。此外,有的頁面中會指出基準目錄,可以直接提取。Robots協(xié)議robots.txt是網絡爬蟲采集某個網站Web內容之前應當讀取并解析的文件。網絡爬蟲與Web服務器建立網絡連接之后,應當按照以下流程建立訪問許可。(1)檢查虛擬根目錄下是否存在robots.txt文件(2)如果服務器返回404錯誤,表明文件不存在,則轉步驟(6)(3)如果存在,則將robots.txt文件讀回到本地(4)解析robots.txt文件中的每個記錄,如果爬蟲的User-agent在這些記錄中,則讀取記錄中的Disallow或Allow部分。如果是一個未知的User-agent,則定位到以“User-agent:*”為開始的記錄,讀取該記錄的Disallow或Allow部分。(5)根據提取到的Disallow或Allow部分,構建許可列表。(6)結束可以使用python中的RobotFileParser類對robots.txt文件進行解析,并獲得訪問許可的判斷,以下是對該類的說明。該類的主要方法有:set_url(url),設置指向robots.txt的URL。read(),讀取robots.txt。can_fetch(useragent,url),指定useragent及url,判斷useragent的爬蟲是否可以訪問url,返回值為True表示可以訪問,F(xiàn)alse表示不允許訪問。crawl_delay(useragent),返回指定useragent的爬蟲,其抓取延時的值。如果robots.txt中沒有為useragent指定相應的抓取延時,則返回None。request_rate(useragent),返回指定useragent的爬蟲,其抓取頻率的值。如果robots.txt中沒有為useragent指定相應的抓取頻率,則返回None。是否可以將自己的爬蟲的User-agent設置為知名爬蟲呢?從代碼的角度看,沒有人會限制你使用什么樣的User-agent,就是上面的例子。實際上,不斷變換User-agent的值也是很多不友好爬蟲為了躲避服務器的檢測的常用做法。但是這種做法是非常不可取的,它擾亂了Web服務器的正常判斷,就可能使得某種知名爬蟲被檢測出來不遵守Robots協(xié)議而產生糾紛。訪問網站的合規(guī)性使用RobotFileParser類對robots.txt文件進行解析can_fetch(useragent,url)檢查指定的useragent是否可以訪問urlcrawl_delay(useragent)獲得爬蟲所需要的抓取延時request_rate(useragent)獲得爬蟲的抓取頻率要求提綱普通爬蟲體系結構Web服務器連接器超鏈接及域名提取與過濾異常處理爬行策略與實現(xiàn)爬蟲多線程技術錯誤和異常的處理在HTTP協(xié)議中規(guī)定了HTTP請求中的各種狀態(tài)碼,表示服務器處理的結果。正常的情況下服務端給出一個值為200的狀態(tài)碼,而錯誤和異常的情景很多種,是通過不同的HTTP狀態(tài)碼來標識。一些比較常見的、需要爬蟲處理的錯誤狀態(tài)碼有:(1)404代表“NOTFOUND”,認為網頁已經失效,因此,爬蟲應當刪除它,同時如果爬蟲再次發(fā)現(xiàn)這條url也不要再抓取;(2)503代表“ServiceUnavailable”,認為網頁臨時不可訪問,通常是網站臨時關閉,帶寬有限等會產生這種情況。短期內反復訪問幾次,如果網頁已恢復,則正常抓??;如果繼續(xù)返回503,那么這條url仍會被認為是失效鏈接,從爬行任務中刪除。(3)403代表“Forbidden”,認為網頁目前禁止訪問,這條url也應當從爬行任務中刪除。(4)301代表是“MovedPermanently”,認為網頁重定向至新url。當遇到站點遷移、域名更換、站點改版的情況時,使用301返回碼。另一種異常是超時,在爬蟲獲取Web頁面時可能由于服務器負荷過大,導致響應延緩,因此,需要適當考慮超時處理,否則就容易使得爬蟲一直處于等待狀態(tài)。這也是爬蟲程序需要處理的場景異常之一。try:req=requests.get('/',timeout=1)print(req.status_code)exceptReadTimeout:#超時異常print('Timeout')exceptConnectionError:#連接異常print('Connectionerror')exceptRequestException:#請求異常print('Error')else:ifreq.status_code==200:print('訪問正常!')#將爬取的網頁保存在本地fb=open("t.html","wb")fb.write(req.content)fb.close()ifreq.status_code==404:print('頁面不存在!')ifreq.status_code==403:print('頁面禁止訪問!')#...提綱普通爬蟲體系結構Web服務器連接器超鏈接及域名提取與過濾異常處理爬行策略與實現(xiàn)爬蟲多線程技術爬行策略,是指對爬行過程中從每個頁面解析得到的超鏈接進行安排的方法,即按照什么樣的順序對這些超鏈接進行爬行。合規(guī)性及高效性爬行策略的設計需要考慮以下限制:(1)不要對Web服務器產生太大的壓力這些壓力主要體現(xiàn)在:a,與Web服務器的連接需要占用其網絡帶寬b,每一次頁面請求,需要從硬盤讀取文件c,對于動態(tài)頁面,還需要腳本的執(zhí)行。如果啟用Session的話,對于大數(shù)據量訪問需要更多的內存消耗(2)不要占用太多的客戶端資源爬蟲程序建立與Web服務器的網絡連接時,同樣也要消耗本地的網絡資源和計算資源。如果太多的線程同時運行,特別是一些長時間的連接存在,或者網絡連接的超時參數(shù)設置不合適,很可能導致客戶端有限的網絡資源消耗。互聯(lián)網上的WEB頁面可以抽象化為一張有向圖。圖的遍歷就是用來解決節(jié)點的訪問順序問題。圖的遍歷算法有兩種,即深度優(yōu)先算法DFS和寬度優(yōu)先算法BFS。假如從節(jié)點A開始,則按照這兩種遍歷方法,頁面的訪問順序分別是:深度優(yōu)先:A–B–F–I–C–D–G–H–J–E寬度優(yōu)先:A–B–C–D–E–F–G–H–I–J按照寬度優(yōu)先的策略,可以使用隊列作為存儲結構。按照深度優(yōu)先的策略,就不能使用隊列了,需要采用堆棧。Python實現(xiàn)DFS和BFS具有高度的對稱性,因此在Python實現(xiàn)時,并不需要將兩種數(shù)據結構分開,只需要構建一個數(shù)據結構在UrlSequenceUrl中設置的未訪問序列self.unvisited可以完成出隊列和棧的操作,前者通過pop(0)來實現(xiàn),后者通過pop()實現(xiàn)。UrlSequenceUrl類存放了所有和URL序列有關的函數(shù),維護了兩個序列visited和unvisited,并實現(xiàn)了對URL的元素增加、刪除、計數(shù)等操作,可以為爬蟲的其他模塊提供完整的封裝,具體實現(xiàn)時選擇一種遍歷方式即可。PageRank重要性排序每個網站都有一個首頁,從鏈接的角度來看,首頁的最主要特征就是鏈接數(shù)量大。在大規(guī)模分布式的情況下。分布式系統(tǒng)中每個機器的性能好壞不一,設計者總是希望把重要頁面的爬行分配給性能好的機器,以提高爬蟲的整體性能,因此,就需要有一種方法來量化頁面的重要性。PageRank算法是一個經典算法,出身于google搜索引擎,是一種根據網頁之間相互的超鏈接計算頁面級別的方法。它由LarryPage和SergeyBrin在20世紀90年代后期發(fā)明。由于它解決了網絡圖中每個節(jié)點重要性的量化計算方法,因此在許多可以抽象為網絡連接圖的應用中得到廣泛采用。計算Web頁面的重要性社交網絡中的重要人物識別文本中的關鍵詞提取假如有四位小朋友分糖果,并假設糖果可以任意分,分糖果的規(guī)則如下:(1)A把自己的糖果平均分給B、C(2)B把自己的糖果全部給D(3)C把自己的糖果的一半分給D,另一半自己留著(4)D把自己的糖果平均分給A、B、C要求計算每輪結束后每個小朋友的糖果數(shù)量,并判斷按照這樣的規(guī)則不斷分下去的話,最終每個小朋友的糖果數(shù)量是否會不再變化。構圖在每輪分配結束之后,每個人擁有的蘋果數(shù)量分別是:

p(A)=1/3*p(D)(4-2)p(B)=1/2*p(A)+1/3*p(D)(4-3)p(C)=1/2*p(A)+1/2*p(C)+1/3*p(D)(4-4)p(D)=p(B)+1/2*p(C)(4-5)寫成矩陣形式這是一個典型的Markov鏈模型。根據Markov鏈的性質,在總數(shù)40變的情況下,每個人初始的糖果數(shù)即使不同,最終經過若干輪重新分配后,每個人的糖果數(shù)都會收斂到上述值。這就是這個Markov鏈的第二個特征,即收斂值與初始值無關。將這個實例的思想引入到Web頁面中,并假設某個頁面的重要性平均分配給它所指向的每個頁面。引入到Web頁面的鏈接圖分析中,需要考慮到一些具體情況:(1)用戶可能在瀏覽B頁面時,可以直接輸入C的網址,雖然B沒有指向C的超鏈接。(2)某個頁面除了可以通過指向它的超鏈接進入該頁面外,還有其他途徑可以直接訪問該頁面,例如通過瀏覽器提供的收藏夾。一個頁面被訪問的隨機性應當來自其他所有頁面理論上,PR算法的收斂性證明是基于Markov鏈,要求它的狀態(tài)轉移矩陣A需要滿足三個條件:(1)A為隨機矩陣:A矩陣所有元素都大于等于0,并且每一列的元素和都為1,滿足概率定義。(2)A是不可約的:A是不可約的當且僅當與A對應的有向圖是強聯(lián)通的。對每一對節(jié)點對u,v,存在從u到v的路徑。(3)A是非周期的。非周期性指馬爾可夫鏈的狀態(tài)的遷移不會陷入循環(huán),隨機過程不是簡單循環(huán)。其他策略在線頁面重要性指數(shù)OPIC在OPIC中,每一個頁面都有一個相等的初始權值,并把這些權值平均分給它所指向的頁面。合作抓取的策略由站點主動向爬蟲提供站點內各個頁面的重要性信息這種策略是通過Sitemaps協(xié)議來實現(xiàn)的/about-sitemaps.html頁面可能的更新頻率爬行策略設計的綜合考慮不同網站上的Web頁面鏈接圖畢竟有自己獨有的特點,因此,設計爬行策略時,需要進行一定權衡,考慮多方面的影響因素,包括爬蟲的網絡連接消耗以及對服務端所造成的影響等等,一個好的爬蟲需要不斷地結合Web頁面鏈接的一些特征來進行優(yōu)化調整。對于爬蟲來說,爬行的初始頁面一般是某個比較重要的頁面,如某個公司的首頁、新聞網站的首頁等。從爬蟲管理眾多頁面超鏈接的效率來看,基本的深度優(yōu)先策略和寬度優(yōu)先的策略都具有較高的效率。從頁面優(yōu)先級的角度看,爬蟲雖然從某個指定的頁面作為爬行的初始頁面,但是在確定下一個要爬行的頁面時,總是希望優(yōu)先級高的頁面先被爬行。由于頁面之間的鏈接結構非常復雜,可能存在雙向鏈接、環(huán)鏈接等情景爬蟲在對某個WEB服務器上頁面進行爬行時需要先建立網絡連接,占用主機和連接資源,適當對這

溫馨提示

  • 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

提交評論