Python爬蟲大數據采集與挖掘-微課視頻版-課件 第二版-2 Web頁面及相關技術_第1頁
Python爬蟲大數據采集與挖掘-微課視頻版-課件 第二版-2 Web頁面及相關技術_第2頁
Python爬蟲大數據采集與挖掘-微課視頻版-課件 第二版-2 Web頁面及相關技術_第3頁
Python爬蟲大數據采集與挖掘-微課視頻版-課件 第二版-2 Web頁面及相關技術_第4頁
Python爬蟲大數據采集與挖掘-微課視頻版-課件 第二版-2 Web頁面及相關技術_第5頁
已閱讀5頁,還剩53頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

Python爬蟲大數據采集與挖掘(2)

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

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

(當當、京東可購書)提綱HTML語言規范編碼體系與規范在Web頁面處理中使用正則表達式爬蟲與大數據分析中相關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文檔的元數據<script>定義客戶端腳本文件<style>定義文檔的樣式文件主體

網頁需要顯示的實際內容都包含在主體之中,由<body>、</body>表示主體信息的開始和結尾。對于網絡爬蟲抓取Web頁面而言,所關注的信息內容也都是大部分封裝在<body>和</body>之間。CSS層疊樣式表單,CascadingStyleSheet定義如何顯示html元素。即使是相同的html文檔,應用的CSS不同,從瀏覽器看到的頁面外觀也會不同。內聯樣式<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>用來定義文檔中的分區或節,把文檔分割成為獨立的部分,經常用于網頁布局。該標簽通常會使用id或class屬性設計額外的樣式,其中,class用于元素組,而id用于標識單獨的唯一的元素。(4)<table><table>定義頁面的表格,在很多頁面中數據以表格形式展現,因此也是爬蟲程序需要處理的重要標簽之一。html頁面中的簡單表格由table元素以及一個或多個tr、th、td元素組成。其中,tr元素定義表格行,td元素定義表格單元,th元素定義表格標題列;同時,th默認加粗并居中顯示。<table>的常用屬性為表格邊框屬性border,當使用border="1"設置邊框時,會在所有表格單元以及表格上嵌套邊框。(5)<a><a>標簽定義超鏈接,用于從一張頁面鏈接到另一張頁面,其最重要的屬性是href,它指示鏈接的目標。爬蟲在采集到一個Web頁面之后,就需要在頁面中尋找該標簽,并提取出超鏈接作為新的爬行任務。(6)<form><form>可以把用戶輸入的數據傳送到服務器端,這樣服務器端程序就可以處理表單傳過來的數據。(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月萬維網聯盟(W3C)發布的html5.2(1)語義化標簽(2)網頁多媒體(3)html5添加canvas元素,canvas使用JavaScript用在網頁上繪制圖形、動畫。(4)html5添加了地理位置API,可以定位當前使用者的經緯度等。(5)HTML5引入了應用程序緩存,緩存之后,可在沒有網絡連接連接時訪問網頁,同時還可以提高頁面加載速度,減少服務器負載。提綱HTML語言規范編碼體系與規范在Web頁面處理中使用正則表達式爬蟲與大數據分析中相關Python基礎網頁編碼網頁編碼是指網頁中字符的編碼方式。目前國內常見的網頁字符編碼主要有utf-8、gbk、gb2312,其中utf-8為國際化編碼,在各國各地區的網站中都很常見,可以說是最通用的字符編碼。此外,有些日本網頁會使用EUC-JP、SHIFT-JIS以及韓國網頁會使用EUC-KR等字符編碼。網頁文本編碼互聯網上各種不同語言(中文、英文、日文…)文字,在不同的用戶端怎么正常顯示?網頁編碼是指網頁中字符的編碼方式。中文常見的網頁字符編碼主要有utf-8、gbk、gb2312等日本文字:Shift_JIS等utf-8為國際化編碼,在各國各地區的網站中都很常見,可以說是最通用的字符編碼。不同的網站的編碼并不完全相同,使用爬蟲解析文本信息的時候需要考慮網頁的編碼方式,否則獲得的結果可能是亂碼。可以從網頁的charset屬性中看到其編碼自動檢測一個頁面編碼方式,可以通過chardet包來進行,需要事先安裝。http://www.stat.go.jp/ASCII標準ASCII碼使用七位二進制編碼表示美式英語中會使用到的控制字符(例如退格、空格)以及可打印字符(例如數字0-9、大小寫英文字母、標點符號、運算符號、美元符號),編碼范圍為0~127gb2312/gbk中文字符編碼。主要有gb2312、gbk以及gb18030。gb2312使用兩個字節連在一起表示一個漢字,兩個字節中前一個稱為高字節(范圍0xA1-0xF7),后一個為低字節(范圍0xA1-0xFE)。gb2312共收錄6763個漢字,每個漢字占兩個字節。gbk編碼是gb2312的擴展,gbk兼容gb2312的所有內容同時又增加了近20000個新的漢字(包括繁體字)和符號。unicodeUniversalMultiple-OctetCodedCharacterSetunicode通常使用兩個字節來編碼,稱為UCS-2(UniversalCharacterSetcodedin2octets)。為了使unicode能表示更多的文字,人們提出了UCS-4使用四個字節編碼。unicode編碼范圍為0-0x10FFFF,最大的字符需要至少三個字節來表示。為了解決編碼字符集unicode在網頁中使用的效率問題,utf-8、utf-16等編碼方式被提出。utf-8utf-8(8-bitunicodeTransformationFormat)是一種針對unicode字符集的可變長度字符編碼方式。utf-8對不同范圍的字符使用不同長度的編碼,規則如下:(1)unicode碼點在0x00-0x7F之間的字符,UTF-8編碼與ASCII編碼完全相同。(2)unicode碼點大于0x7F的字符,設需要使用n個字節來表示(n>1),第一個字節的前n位都設為1,第n+1位設為0,剩余的n-1個字節的前兩位都設為10,剩下的二進制位使用這個字符的unicode碼點來填充。Python3中的字符串默認的編碼為unicode,因此,gbk、gb2312等字符編碼與utf-8編碼之間都必須通過unicode編碼才能互相轉換。即在python中,使用encode()將unicode編碼為utf-8、gbk等,而使用decode()將utf-8、gbk等字符編碼解碼為unicode>>>n='大數據'#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語言規范編碼體系與規范在Web頁面處理中使用正則表達式爬蟲與大數據分析中相關Python基礎網絡爬蟲的一個基本功能是根據URL進行頁面采集,因此,從頁面中提取URL是爬蟲的共性技術問題。由于超鏈接的表示通常具有固定的模式,因此在具體實現頁面鏈接提取時,采用正則表達式匹配方法是比較簡易的方法。Python中,re模塊提供了正則表達式匹配所需要的功能。匹配和搜索分割字符串匹配和替換最常用的函數是findall,其函數原型為:findall(pattern,string[,flags])其中,string為輸入的字符串,pattern是指定的匹配模式,flags是一個可選參數,用于表示匹配過程中的一些選項。函數返回結果一個列表。'.'通配符:代表任意字符,除\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’]'{}'也是重復匹配,但是匹配次數可以自行設置,次數可以是一個數,或者范圍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]表示相應位置的字符要匹配英文字符和數字,‘-‘表示范圍。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">大數據</a></li><li><ahref="/o/2018-11-06/a75.shtml"target="_blank">進博會</a></li>'''re.findall("http://[a-zA-Z0-9/\.\-]*",s)該正則表達式的含義是以http://開始,后續是“大小字母數字或.-”中的任意多個字符。對于前述字符串s,可以得到結果:['/o/2018-11-06/a75.shtml','/o/2018-11-06/a76.shtml','/o/2018-11-06/a75.shtml‘]提綱HTML語言規范編碼體系與規范在Web頁面處理中使用正則表達式爬蟲與大數據分析中相關Py

溫馨提示

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

評論

0/150

提交評論