Python爬蟲大數據采集與挖掘-微課視頻版-第二版 課件匯 曾劍平 6-12 Web信息提取與Python實現 -互聯網大數據獲取技術的應用_第1頁
Python爬蟲大數據采集與挖掘-微課視頻版-第二版 課件匯 曾劍平 6-12 Web信息提取與Python實現 -互聯網大數據獲取技術的應用_第2頁
Python爬蟲大數據采集與挖掘-微課視頻版-第二版 課件匯 曾劍平 6-12 Web信息提取與Python實現 -互聯網大數據獲取技術的應用_第3頁
Python爬蟲大數據采集與挖掘-微課視頻版-第二版 課件匯 曾劍平 6-12 Web信息提取與Python實現 -互聯網大數據獲取技術的應用_第4頁
Python爬蟲大數據采集與挖掘-微課視頻版-第二版 課件匯 曾劍平 6-12 Web信息提取與Python實現 -互聯網大數據獲取技術的應用_第5頁
已閱讀5頁,還剩288頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

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

--Web信息提取與Python實現《Python爬蟲大數據采集與挖掘》第二版.微課視頻版(清華大學出版社,2025)教材《Python爬蟲大數據采集與挖掘》及配套公眾號

(當當、京東可購書)提綱Web信息提取任務及要求Web頁面內容提取的思路基于HTML結構的內容提取方法基于統計的Web內容抽取方法基于JSON的web信息提取Web信息存儲Web信息提取包含Web頁面中的超鏈接提取和Web內容提取兩大部分,都是網絡爬蟲技術的重要組成部分。前者是找出頁面中的所有超鏈接或符號一定規則的超鏈接,作為爬蟲的爬行任務,在技術實現上比較簡單。后者是從Web頁面中提取信息內容,一般是指頁面中有意義的內容,相應的提取技術實現上比較復雜。WEB頁面中包含有豐富的信息內容,對于互聯網大數據分析有用的信息可能是某個新聞報道頁面中的正文部分,也可能是某網絡論壇中的帖子信息、人際關系信息等。WEB頁面版式各式各樣,但可以歸結為以下若干種。新聞報道型頁面列表型頁面評論型頁面提綱Web信息提取任務及要求Web頁面內容提取的思路基于HTML結構的內容提取方法基于統計的Web內容抽取方法基于JSON的web信息提取Web信息存儲Web頁面它具有一定的結構,即由HTML標簽構成的樹型結構。在進行內容提取時充分利用這種結構,再結合一定的搜索策略,可以快速獲得所需要的內容。考慮到Web頁面經常改版,這種基于結構和搜索策略的方法具有比較高的適應能力,使得程序容易維護。目前有多種HTML解析器的開源框架,大都集成了DOM樹的解析,并提供了靈活的方式來對樹進行遍歷和搜索。與簡單的標簽Tag匹配不同,這種方法可以實現基于標簽在樹中的特征來定位要抽取的信息內容,從而可以方便完成頁面內容的提取。DOM樹HTML文件中的標簽構成的樹是一種DOM樹,DOM是DocumentObjectModel的簡稱,即文檔對象模型,提供了一種面向對象描述文檔的方式。BeautifulSoup等各種HTML解析器對DOM標準中的屬性和方法進行了實現和封裝,為程序開發人員提供Java、Python等不同語言的接口調用,使得Web信息內容的提取變得更加方便。但是,如果自己要從底層編寫Web信息提取程序,就需要根據HTMLDOM定義的這些標準來實現。提取方法在進行WEB頁面信息提取時,一般有兩種場景。一種是,針對特定的網站,可以假定頁面的標簽結構特征是已知的。這種場景一般是,爬蟲抓取的頁面數量不是很多,而且頁面不常改版。另一種是,不針對特定網站,頁面的標簽結構是無法實現確定的。對于網絡爬蟲應用來說,這種場景一般有兩種情況。一是,爬蟲抓取大量不同Web頁面而無法逐個分析其標簽結構;二是,Web頁面經常改版,以至于標簽結構需要經常修改。Web信息提取的三種基本思路是:1.基于字符串匹配的Web信息提取方法2.基于HTML結構的Web信息提取方法3.基于統計的Web信息提取方法基于結構的方法其基本思路描述如下:(1)通過HTML解析器將Web文檔解析成DOM樹;(2)確定要提取的正文在DOM樹中的哪個節點下,并且節點名稱和屬性具有惟一性;(3)通過各種方法定位到該節點,將節點中所包含的內容提取出來。其中,第二個步驟是通過人工方式分析頁面結構,例如上節的HTML例子中,標題字符串是在title節點下,而title在整個HTML文檔中具有惟一性,因此可以作為提取的依據。在第三個步驟中,如果無法找到具有惟一性的節點,則需要采用各種復雜的搜索策略。提綱Web信息提取任務及要求Web頁面內容提取的思路基于HTML結構的內容提取方法基于統計的Web內容抽取方法基于JSON的web信息提取Web信息存儲在Python中已經有很多種開源庫可以用于實現基于HTML結構的信息提取。這些開源庫完成了DOM樹的構建,并給開發人員提供了豐富的搜索策略,可以靈活方便地實現Web信息提取。這些開源庫主要有html.parser、lxml、html5lib、BeautifulSoup以及PyQuery等。開源庫優點缺點html.parserPython自帶的解釋器,執行速度適中、文檔容錯能力強對于某些python版本的兼容性不好lxml文檔容錯能力較好,唯一支持HTML和XML的解析器。大部分源碼基于C語言的實現,因此速度快。需要安裝C語言庫html5lib兼容性好、容錯性好、以瀏覽器的方式解析文檔、生成HTML5格式的文檔、不依賴外部擴展速度慢、需要額外的python支持BeautifulSoup可以選擇最合適的解析器來解析HTML文檔,使用方便速度偏慢PyQuery比較簡單,而且其支持的css選擇器的功能比較強大。pyQuery和jQuery的語法很像,易上手

不同解釋器的聯系html.parser是Python中的自帶的標準類,可以用來對HTML/XHTML編碼的文本文件進行解析。該類的定義如下:classhtml.parser.HTMLParser(*,convert_charrefs=True)其中,參數convert_charrefs表示是否將所有的字符(除了script/style元素之外)引用自動轉化為Unicode形式,Python3.5以后的默認值是True。HTMLParser提供給開發人員的是一種事件驅動的模式,對于給定的HTML文本輸入,HTMLParser提供了一系列的事件作為編程接口,這些事件就是前面定義的各種方法(method)。事件發生的順序按如下次序進行:

handle_starttag->handle_data->handle_comment->handle_endtag

實例見教材lxmllxml包(Package)為開發人員提供了很強的功能來處理HTML和XML文檔,也是Python語言中最容易使用的庫之一。lxml是libxml2和libxslt兩個C語言庫的Python化綁定,它的獨特之處在于兼顧了這些庫的速度和功能完整性,同時還具有PythonAPI的調用。lxml中包含了以下一些重要的模塊(modules):lxml.etree:該模塊實現了文檔的擴展ElementTreeAPI。lxml.html:處理HTML的工具集。lxml.builder:生成XML文檔的方法。lxml.cssselect:基于XPath的CSS選擇器。在使用lxml進行Web信息提取時,最主要的問題是如何進行節點的定位。lxml提供了兩種方式,一是xpath,二是樹的遍歷函數。在程序設計時可以根據實際情況單獨使用或兩者一起使用。lxml庫中包含的主要模塊有:etree、html、cssselect等,在程序設計上主要的是三個步驟。表達式描述nodename表示某個具體的節點/根節點。//所有節點,而不考慮它們的位置。.當前節點..當前節點的父節點xpathHtml5libhtml5lib是一個Ruby和Python用來解析HTML文檔的類庫,支持HTML5以及最大程度兼容桌面瀏覽器。html5lib包中包含了constants、html5parser、serializer三個模塊以及filters、treebuilders、treewalkers和treeadapters四個子包(Subpackages)。html5parser中定義的HTMLParser類對于解析HTML而言是比較重要的,它的聲明如下是:html5lib.html5parser.HTMLParser(tree=None,strict=False,namespaceHTMLElements=True,debug=False)程序設計方法(1)直接通過html5lib執行parse方法,該方法返回一顆解析好的etree,然后就可以etree的xpath方法來指定要提取的內容的路徑,從而獲取信息。(2)如果要處理的頁面比較多,使用第一種方法需要重復些parse方法的一些同樣參數,為此,可以先使用html5lib.HTMLParser構造一個解析器,然后執行該解析器的parse方法去處理不同頁面。(3)有時候,要提取的信息難于用xpath的路徑來表達,例如要提取Web頁面中所有超鏈接時,針對每個超鏈接寫一個路徑固然可以,但是編程效率太低。這種情況下可以利用etree的模式匹配能力,運用findall等方法從HTML文檔中找出所有符合條件的標簽。(4)對于html5lib來說,其最大的優勢在于具備處理不完整、不規范、有錯誤標簽的HTML文檔,能夠進行自動修復,因此在一些場合下使用html5lib進行Web頁面信息提取具有一定優勢。BeautifulSoupBeautifulSoup是一個可以從HTML或XML文件中提取數據的Python庫,目前最新版本為BeautifulSoup4.7.1,簡稱為bs4,即BeautifulSoup4。bs4是一個包(package),其中包含了BeautifulSoup、EntitySubstitution、builder、AnnouncingParser等類。這些類中,BeautifulSoup使用得最多,因此很多人就認為BeautifulSoup和bs4是一樣,但其實不然。BeautifulSoup將HTML文檔轉換成一個樹形結構,盡管結構上可能比較復雜,但是從程序設計角度看,只要處理四種類型的Python對象:Tag、NavigableString、BeautifulSoup和Comment。建議重點掌握CSS選擇器這種方式使用select方法,允許通過標簽名、類名、id名、以及組合查找、子標簽查找。在查找時,最重要的模式是由標簽名、類名、id和子標簽組成。標簽名不加修飾,類名前加點,id名前加#,子標簽通過>或空格定義。相比于xpath,CSS也提供了很簡潔的選擇方式,在Web信息提取中廣泛應用。一些例子如下:soup.select('title')#通過標簽名soup.select('.sister')#通過類名查找soup.select('#link1')#通過id名查找soup.select('p#link1')#組合查找soup.select("head>title")#直接子標簽查找(>前后加空格)soup.select('.list>#link1')#class名稱為list的標簽節點下id名稱為link1的子節點select方法返回的結果是list類型,可以通過下標和text屬性來得到內容,例如:soup.select('title')[0].text這個語句獲得頁面的title內容。特別地,如果類名本身帶有空格,則應該用點代替其中的空格,例如:對于<divclass="zwliclearfix">的選擇,應該使用soup.select('div.zwli.clearfix')PyQueryPyQuery是一個主要的python庫,它具有類似于JavaScript框架jQuery的功能。PyQuery使用lxml解析器在xml和html文檔上進行操作,并提供了和jQuery類似的語法來解析HTML文檔,支持CSS選擇器,使用也非常方便。官方文檔在/pyquery/可查閱。實例見教材提綱Web信息提取任務及要求Web頁面內容提取的思路基于HTML結構的內容提取方法基于統計的Web內容抽取方法基于JSON的web信息提取Web信息存儲網站也會經常升級改版,由此導致寫好的程度針對新版失效了。提取程序就需要有一定的智能性,能夠自動識別某個WEB頁面上的正文位置,其前提是在沒有人工參與的情況下。其基本步驟如下:構建HTML文檔對應的DOM樹;基于某種特征來構建基于DOM樹的信息提取規則;按照規則,從HTML中提取信息。規則的制定或生成方法有以下兩種。第一種,是通過啟發式方法。一般通過人工對HTML頁面進行觀察和總結,以DOM樹所確定的基本組成單位為規則中的特征,人工估計其對應的特征值,從而形成啟發式規則。第二種,機器學習方法。這種方法通過人工選擇大量的HTML頁面,并對頁面中的正文區域進行標注,再由程序計算正文節點中各種特征對應的特征值,以及其他類型節點對應的特征值。從而將正文節點的判斷轉換成為一個分類問題,即根據某些特征及特征值,判斷節點是否為正文。這樣的問題顯然合適于機器學習方法來解決。提綱Web信息提取任務及要求Web頁面內容提取的思路基于HTML結構的內容提取方法基于統計的Web內容抽取方法基于JSON的web信息提取Web信息存儲許多商品評論是以JSON形式從服務器返回給客戶端的,例如,京東的商品評論是JSON格式的字符串,如下:這種情況下,就不是解析HTML了,而是解析JSON以獲得結構化數據。JSON的全稱是JavaScriptObjectNotation,它是一種輕量級的數據交換格式。教材6.5提供了一個JSON格式的例子常用的函數:json.loads()加載JSON格式的字符串,獲得一個字典對象.在信息抽取中,使用這個方法。json.dumps則用于將字典類型變量轉換為字符串提綱Web信息提取任務及要求Web頁面內容提取的思路基于HTML結構的內容提取方法基于統計的Web內容抽取方法基于JSON的web信息提取Web信息存儲根據采集的數據不同,可以選擇進行數據存儲文本文件CSV文件數據庫對于文本文件,為了方便后續的Web信息挖掘,一般在創建文件時指定編碼方式,通常統一為utf-8。如:open(“news.txt”,”w”,encoding=“utf-8”)CSV通常用于存儲結構化數據,如股票交易數據、評論記錄等等。通過pandas的to_csv方法進行存儲。需要注意的是,csv以單引號或雙引號作為分隔符,如果數據本身包含這些符號,則需要進行轉義,具體見教材。數據庫,以SQLite為例包括創建數據庫、數據表,存儲或更新數據。先創建數據庫連接,獲得游標,通過游標執行SQL語句,如果是create,delete,update,則需要commit,以便將內容存儲到數據庫文件。最后關閉游標。importsqlite3sqlite3.connectcursor.executecursor.closemitPython爬蟲大數據采集與挖掘(7)

--主題爬蟲頁面采集技術與Python實現《Python爬蟲大數據采集與挖掘》第二版.微課視頻版(清華大學出版社,2025)提綱主題爬蟲的使用場景主題爬蟲技術框架主題及其表示相關度計算例子主題爬蟲也稱為聚焦爬蟲,與普通爬蟲不同,它主要采集與某些預先設定好的主題相關的Web頁面。主題爬蟲的應用場景主要有以下三大類。1.垂直搜索引擎如汽車行業、醫療行業等中的專業搜索引擎。2.網絡輿情監測網絡輿情關注于某個特定的主題,需要爬蟲對該主題的相關頁面進行抓取,其他無關的則不需要3.商業情報搜索提綱主題爬蟲的使用場景主題爬蟲技術框架主題及其表示相關度計算例子主題爬蟲在普通爬蟲的基礎上增加了主題定義、鏈接相關度估算和內容相關度計算三大技術實現。相比于普通爬蟲,主要增加的部分主題信息是主題爬蟲中最為重要的部件,它為兩個相關度計算提供衡量標準。因此,要求主題信息必須容易被用于相關度計算。在兩個相關度計算過程中,實際上隱含了某種過濾過程,也就是把不符合相關度要求的頁面過濾掉,這種決策通常是由用戶來執行,具體可體現為用戶設定相關度閾值。在主題爬蟲中,主題是核心部分,在具體實現時主題的生成和相關度的計算都需要涉及對文本內容的處理主要技術包括文本預處理、主題及實現技術、主題相關度計算等。本章后續圍繞主題模型構建及相關度計算中的主要技術進行敘述,文本預處理、高級主題建模等技術是各類爬蟲采集應用的共性技術問題,將在第十一章(主題)進行介紹。提綱主題爬蟲的使用場景主題爬蟲技術框架主題及其表示相關度計算例子一是,采用關鍵詞集來描述一個主題。如果我們想抓取與“大數據”有關的頁面,最簡單的方式就是用“大數據”這個詞匯作為主題的定義,但是不含有大數據的頁面也可能是與“大數據”相關的,例如一些討論數據挖掘技術的頁面。因此,采用關鍵詞集合描述主題時,需要盡可能完整地考慮到所關注的主題可能涉及到關鍵詞。二是,對關鍵詞集進行某種劃分,通過對子主題的描述來實現對整個主題的定義。比如對于“大數據”這個主題,可以按照交通、金融等應用領域來劃分大數據,也可以按照采集、存儲、挖掘等技術構成來劃分,從而可以產生不同的子話題。主題的定義,最終目前是要能夠方便鏈接相關度和內容相關度的計算,因此,它必須有一種比較明確的數學表達形式。根據上述兩種方式的敘述,它們所采用的數學表示方式分別敘述如下,具體的分析說明在本書的后續章節中會展開。提綱主題爬蟲的使用場景主題爬蟲技術框架主題及其表示相關度計算例子在主題爬蟲中,相關度的計算包含了鏈接相關度和內容相關度計算兩大部分。在整個主題爬蟲的處理流程中起到的作用各不相同。但是,不管是哪一個,都可以歸結為一個文本與主題模型的相似度計算問題。內容相關度對于大數據主題,我們可以定義該集合為:A={大數據、存儲、采集、挖掘、特征、爬蟲、平臺、分布式},假設有一個頁面提取得到對應的詞匯集合B={大數據、爬蟲、采集、技術},那么這兩個頁面的相關度J(A,B)=3/(8+4-3)=0.33ai,bi分別是主題向量和正文內容向量的第i個維度的權重值,n是向量空間維數。如圖7-3是余弦相關度的含義示例,這是一個兩個詞匯組成的向量空間,a、b分別是主題向量和頁面內容向量。鏈接相關度一,超鏈接的錨文本,即一個超鏈接上顯示的文字。這種文本信息一般非常有限,但是錨文本中的關鍵詞在反映真實內容方能通常具有很強的代表性。其缺點就是,錨文本一般很短,經過詞匯提取之后,通常需要進行一定的詞匯語義擴展,找到更多可能與主題相關的詞匯,這樣可以提升與已定義好的主題的鏈接相關度計算準確性。二,超鏈接周圍的錨文本,也就是某個超鏈接前后一定范圍區域內所有錨文本所構成的文本信息。這種信息在進行相關度估算時也具有一定的參考價值,這是由于WEB頁面的設計者為了增加用戶體驗度,通常會把一些內容上相似或相關度比較高的超鏈接放在一起,我們把這種現象稱為超鏈接的主題聚集性。如圖7-4,互聯網、IT等相關的鏈接被組織在一起。可以用周圍的文字來擴展某個超鏈接的錨文本。要使用此類信息,就必須對HTML結構進行一定分析,比如都是同屬于一個表格欄的,否則就不是很容易確定超鏈接的計算范圍。三,超鏈接結構信息。對于爬蟲系統來說,頁面超鏈接是不斷累積起來的,因此在爬蟲工作過程中,對于某個頁面P,可以通過已經爬行的頁面中提取出來的指向該頁面超鏈接來進行相關度的估算。這種估算會隨著爬行的頁面越多而越準確。基于這種鏈接結構的一般假設是主題相關高的頁面通常也會比較密集地鏈接在一起,因此就需要在獲取新的頁面之后對所有頁面的主題相關度重新評估。提綱主題爬蟲的使用場景主題爬蟲技術框架主題及其表示相關度計算例子#定義主題:使用關鍵詞集合方式來定義topicwords={"醫學","衛生","醫院","中山","上海醫學院","復旦"}在新聞頁面的HTML中進行文本內容的提取,這里是使用了BeautifulSoup和xpath的信息提取方法。在提取出文本之后,進行了文本的切分,獲取每個詞匯。進行了停用詞過濾,最后以詞匯出現的次數和詞匯在每個段落出現的情況來進行特征選擇,最終選擇出10個代表該頁面內容的詞匯。將這些詞匯與事先設定的主題詞匯基于Jaccard相似系數來計算頁面內容與主題的相關度。#相關度計算:topicwords和docwords集合的相似度commwords=ersection(docwords)sim=len(commwords)/(len(topicwords)+len(docwords)-len(commwords))Python爬蟲大數據采集與挖掘(8)

--DeepWeb爬蟲與Python實現《Python爬蟲大數據采集與挖掘》第二版.微課視頻版(清華大學出版社,2025)提綱相關概念DeepWeb特征和采集要求技術架構圖書信息采集例子DeepWeb最初由Dr.JillEllsworth于1994年提出。是Web中那些未被搜索引擎收錄的頁面或站點也可稱為invisibleweb、hiddenweb。與其相對的是SurfaceWeb,指的是靜態頁面。DeepWeb的一些概念數據通常保存于數據庫服務器(或專門的文件系統)中,是一種重要的大數據源。數據質量高數據庫中的數據由于由于用戶、需求相對明確,由專人生產和維護信息,并且難以被復制采集DeepWeb的頁面與特定的業務過程有關DeepWeb的數據采集要考慮到數據產生的過程、業務流程限制以及數據語義。提綱相關概念DeepWeb特征和采集要求技術架構圖書信息采集例子DeepWeb網頁應當滿足兩個條件一是頁面上的數據是存儲于數據庫、數據文件等地方,而非直接記錄在HTML頁面文件中;二是,為用戶提供一定的查詢接口,返回符合條件的記錄,并生成HTML頁面。對于DeepWeb數據采集來說,通常需要考慮以下因素:(1)對于每個記錄的屬性和屬性值,屬性名稱一般是不變的,而屬性值隨查詢結果不同而不同。(2)某個屬性在查詢結果的頁面中顯示在哪個位置可能是不固定的,甚至會經常調整。(3)各個查詢條件的輸入值是需要事先確定的。提綱相關概念DeepWeb特征和采集要求技術架構圖書信息采集例子DeepWeb的采集技術是基于動態網頁采集方法。通常由用戶設定查詢條件,程序自動將其作為請求的參數,發送給服務器。一般情況下,可以按照動態網頁的方式編寫DeepWeb采集。但考慮到DeepWeb的查詢界面、返回的數據格式經常發生變化,為了適應這種情況,通常加入一定的自適應判斷。本節所介紹的技術框架和實現,展示了這種思路。比如圖書查詢界面可能會調換查詢條件的順序,也可能會修改提示文本,例如將”ISBN”改為”ISBN號”、”作者”改為”編者”等。查詢結果也存在類似情況。這些都可能導致爬蟲程序失效,因此,本章考慮爬蟲的健壯性。三個功能步驟:表單搜尋、表單處理(包括分析、填寫與提交)與表單結果處理。所需的具體模塊主要包括待采集領域的本體知識庫模塊、表單爬取模塊、表單處理模塊以及結果分析模塊。這些模塊之間以待采集領域的本體知識作為采集的知識基礎,通過表單交互的方式深入挖掘領域的數據,并更新知識、存儲數據到領域本體知識庫。領域本體知識庫領域本體主要包括5個基本的建模元語(ModelingPrimitives):類、關系、函數、公理和實例。類也可以理解為概念的集合關系則是領域之中各概念之間的關聯關系,基本的關系有kind-of、part-of、instance-of和attribute-of四種函數可以視為關系之中的特殊一種,函數也可以看做流程的一種固化表達公理是領域中公認的真理實例則是對象。以圖書領域為例存在圖書分類、作者、編者、圖書名稱、ISBN、出版社、出版時間、版次、頁數、開本、印次、包裝、紙質、叢書、摘要、內容簡介、目錄等基本概念概念之間的關系概念的表示國際標準書號號碼由13位數字組成…在采集之前對領域及其中的本體需要有基本的概念,并且根據本體的建模結果進行知識庫構建。尋找表單尋找進行DeepWeb數據交互的表單可以使用啟發式規則去除不符合要求的表單,一些可用的規則如下:給定一個閾值區間,如果需要填寫的字段個數超出這個區間范圍的表單就忽略或剪除對于給定的表單,如果其中含有特定類型的元素,例如密碼框則忽略該表單。將表單輸入項中的每個標簽與本體知識庫進行比較,如果不匹配的比例較大,一般也不是該領域的表單頁面。表單處理表單處理模塊的技術要點一個是能夠識別表單字段內容另一個是能夠匹配的填寫表單的字段,也即是能夠與領域本體知識庫中對象屬性之間的映射關系產生匹配。識別過程爬蟲對表單項的標簽、HTML編碼中的id、name進行模式識別,一旦發現與庫中的概念相同或者接近的,則可以先與概念關聯起來。可以使用啟發式規則,規則依賴于當前中英文的WEB表單。按照從上往下,從左往右的閱讀習慣,可以在表單字段域的左邊或者上面獲得提示信息和字段標簽填寫表單按照字段與領域本體知識庫中概念相似程度進行匹配,將本體知識庫中的屬性值作為表項值。由于表單項一般會不只一個,因此在填寫表單時應當考慮到,優先選擇哪個表單項進行填寫。主要的目的是要確保提交的表單查詢次數盡量少,并且查詢到數據記錄之間避免重復。結果處理HTTP的返回內容則需要進行格式、結構、關鍵字校驗對返回的結果進行自動提取時,需要將每個記錄的內容與字段對應起來。(1)記錄集的樣式判斷,記錄集可以按照橫向、縱向來組織,需要分析字段名稱是顯示在第一行或第一列。(2)結果集中的字段名稱與表單項可能不完全一致,也可能出現新的字段名稱,需要對字段標簽進行再分析。提綱相關概念DeepWeb特征和采集要求技術架構圖書信息采集例子/advsearch確認沒有被disallow圖書查詢目標使用“出版社”進行查詢自動尋找“出版社”所在的位置(因今后版面可能調整)自動填寫出版社名稱自動提交命令自動解析結果#定位input標簽:尋找“出版社”對應的參數名稱

input_tag_name=''

conditions=soup.select('.box2>.detail_condition>label')

print('共找到%d項基本條件,正在尋找input標簽'%len(conditions))

foriteminconditions:

text=item.select('span')[0].string

iftext=='出版社':

input_tag_name=item.select('input')[0].get('name')

print('已經找到input標簽,name:',input_tag_name)

提交方式的分析查詢提交的表單的源代碼#圖書查詢表單<formid="form1"method="GET"action=""name="form1">...</form>method="GET"表明這個表單使用get方式提交。通過URL:對應get方式。get提交表單會將表單內的數據轉化為url參數進行提交。在提交表單后,可以在瀏覽器內的url顯示表單的name/value值。#填寫’新星出版社’并提交表單后/?medium=01&key3=%D0%C2%D0%C7%B3%F6%B0%E6%C9%E7&category_path=01.00.00.00.00.00黑體部分即為提交的參數值完整流程見教材8.4Python爬蟲大數據采集與挖掘(9)

--微博信息采集與Python實現《Python爬蟲大數據采集與挖掘》第二版.微課視頻版(清華大學出版社,2025)教材《Python爬蟲大數據采集與挖掘》及配套公眾號

(當當、京東可購書)提綱微博信息采集方法概述微博開放平臺授權與測試使用Python調用微博API采集數據通過爬蟲采集微博常見的SNS平臺的信息采集途徑主要可以分為如下兩種:通過平臺提供的開放API獲取數據和通過爬蟲方式采集數據。微博API是微博官方開放的一組程序調用接口,通過這些API能夠獲得微博的博文、用戶信息及用戶關系信息等數據。但是在非商業授權下有較大的使用限制,能夠獲取的數據量有限。通過爬蟲方式采集數據的方法,具體又可以分為兩種,即,通過模擬用戶行為進行頁面分析與數據采集、通過模擬移動終端客戶端進行數據采集。通過平臺開放API獲取數據的方式與爬蟲方式的主要區別在于前者需要注冊平臺開發者身份。在獲取數據前使用平臺約定的方式進行身份認證。后者本質上是模擬終端或者用戶的方式,主要思路是通過平臺公開的頁面編碼內容進行請求命令的構造,并對返回的數據進行分析和提取,具體方法與前面第五章介紹的方法類似。提綱微博信息采集方法概述微博開放平臺授權與測試使用Python調用微博API采集數據通過爬蟲采集微博在調用微博之前,需要事先獲取用戶身份認證,這是指在開放平臺上的認證,而非普通用戶登錄微博時的認證。微博開放平臺用戶身份鑒權主要采用OAuth2.0認證方式,平臺授權的最終是獲得訪問令牌(access_token)。使用該令牌和用戶身份(uid)就可以在Python程序中調用API,實現微博信息的采集。獲取access_token的流程(1)創建微博用戶,并登錄微博();(2)進入“微博接口測試工具”(/tools/console),如果還沒有創建應用,則根據頁面提示創建一個應用。如果已經有應用,則轉步驟(4)。創建應用(3)創建成功后,進入應用控制臺。在OAuth2.0授權設置中,填寫“授權回調頁”為

/oauth2/default.html

。(4)填寫完成后,再次進入“微博接口測試工具”,可以看到API測試工具頁面。點擊“獲取AccessToken”可以獲得該應用的令牌在微博接口測試工具中測試API的調用上圖中展示了獲取微博用戶信息的API,其對應的API是“users/show”,相應的API參數要查閱微博API文檔。這里使用用戶的昵稱來獲取用戶信息,點擊“調用接口”后可以看到右邊的請求URL、參數以及返回的JSON數據。提綱微博信息采集方法概述微博開放平臺授權與測試使用Python調用微博API采集數據通過爬蟲采集微博流程介紹微博API及使用方法微博API微博官方提供給開發人員的一組函數調用接口,這是一種在線調用方式,不同于普通語言所提供的函數。根據輸入的參數返回相應的數據,其范圍涵蓋用戶個人信息、用戶的粉絲和關注、用戶發布的博文、博文的評論等等。向接口發送HTTP請求,接口就會返回所對應的JSON格式數據。新浪微博提供的API有九大類,即:粉絲服務接口、微博接口、評論接口、用戶接口、關系接口、搜索接口、短鏈接口、公共服務接口和OAuth2.0授權接口。最新的接口及功能可以到官方網站查閱:/wiki/%E5%BE%AE%E5%8D%9AAPI。用戶類API名稱及功能讀取接口users/show獲取用戶信息users/domain_show通過個性域名獲取用戶信息users/counts批量獲取用戶的粉絲數、關注數、微博數評論類API名稱及功能讀取接口comments/show獲取某條微博的評論列表comments/by_me我發出的評論列表comments/to_me我收到的評論列表comments/timeline獲取用戶發送及收到的評論列表comments/mentions獲取@到我的評論comments/show_batch批量獲取評論內容寫入接口comments/create評論一條微博comments/destroy刪除一條我的評論comments/destroy_batch批量刪除我的評論comments/reply回復一條我收到的評論使用方法對于每個API,新浪微博規定了其請求參數、返回字段說明、是否需要登錄、HTTP請求方式、訪問授權限制(包括訪問級別、是否頻次限制)等關鍵信息。其中,請求參數是API的輸入,而返回字段是API調用的輸出結果,一般是以JSON的形式進行封裝。HTTP請求方式支持GET和POST兩種,訪問授權限制則規定了客戶端調用API的一些約束條件。

必選類型及范圍說明access_tokentruestring采用OAuth授權方式為必填參數,OAuth授權后獲得。idtrueint64需要獲取的微博ID。返回值字段字段類型字段說明created_atString微博創建時間Idint64微博IDreposts_countInt轉發數comments_countInt評論數TextString微博信息內容#接口對應的URL,每個API對應一個URL,可以在在線開發文檔頁面查看url='/2/statuses/show.json'

#請求參數:access_token和微博的idurl_dict={'access_token':access_token,'id':wid}url_param=parse.urlencode(url_dict)

#發起請求res=requests.get(url='%s%s%s'%(url,'?',url_param),headers=header_dict)

#解析返回的jsondecode_data=json.loads(res.text)

#提取text字段的內容text=decode_data['text']錯誤處理錯誤代碼錯誤信息詳細描述10002Serviceunavailable服務暫停10004IPlimitIP限制不能請求該資源10012Illegalrequest非法請求10013Invalidweibouser不合法的微博用戶10022IPrequestsoutofratelimitIP請求頻次超過上限10023Userrequestsoutofratelimit用戶請求頻次超過上限例1:采集微博用戶個人信息微博用戶的個人信息包括用戶昵稱、簡介、粉絲數、關注數、微博數等,通過調用微博開發接口API可以得到這些個人信息數據。該接口為users/show,請求參數如表9-6所示,其中參數uid與screen_name二者必選其一,且只能選其一個。代碼及解釋見教材例2:采集微博博文使用微博API獲取博文主要涉及到兩個接口,即statuses/user_timeline/ids和statuses/show。前者用于獲取用戶發布的微博的ID列表,后者是根據微博ID獲得單條微博信息內容,包括文本內容、圖片以及評論轉發情況等。具體代碼及解釋見教材微博API的限制微博開放接口限制每段時間只能請求一定的次數。超過頻次限制的過度調用、或者是非用戶主動行為頻繁調用(即使未超過頻次限制)微博開放接口,會造成該應用、IP的接口訪問權限被封禁,造成所有開放接口的請求都會被限制。微博開放平臺禁止第三方服務器端存儲用戶數據,所以采用此方法只能緩存在客戶端,不能上傳到外部服務器。提綱微博信息采集方法概述微博開放平臺授權與測試使用Python調用微博API采集數據通過爬蟲采集微博通過微博API雖然可以很方便地采集到所需要的信息,而不需要像爬蟲那樣進行大量的頁面信息分析和提取。但是,微博API在調用頻次、返回數據記錄數等方面有一定限制,因此,如果需要大量地采集微博信息的話,微博API就難于滿足需求。先手工登錄微博,通過瀏覽器F12頁面跟蹤得到cookie,作為后續自動登錄的依據。1.利用微博PC版進行命令發送與結果的采集一種途徑是找到AJAX動態加載的請求地址直接獲取AJAX內容,但是當遇到加密的JS時,要分析并找到請求地址就會非常困難。另一種途徑是使用無界面瀏覽器,基于模擬瀏覽器方式執行js代碼以獲取完整html內容。其缺點是,執行速度慢。2.通過微博的移動端網頁來采集內容目前國內外主流的微博都提供了移動端接入方式,移動端網頁和PC端網頁的入口不同,頁面結構存在一定差異。一般情況下,移動端頁面并不采用AJAX技術,而是可以直接提取。但是與PC版網頁相比可能缺失部分內容。微博博文回帖采集教材里展示了一個微博熱搜的采集方法,與此類似,這里采集某個博文的回帖。通過跟蹤得到響應的URL查看相應的JSONu="/ajax/statuses/buildComments?is_reload=1&id=5139011190918405&is_show_bulletin=2&is_mix=0&count=20&type=feed&uid=1989660417&fetch_level=0&locale=zh-CN"records=[]#該函數與教材一致,只是user-agent和cookie替換成為前面跟蹤獲得相應信息data=getURLconent(u)qiuzhus=json.loads(data)plist=qiuzhus['data']forpinplist:rec=[]try:rec.append(p[‘created_at’])#回帖時間rec.append(p[‘text‘])#回帖內容records.append(rec)exceptKeyError:continueprint(records)#顯示采集到的回帖部分內容如下,可見獲得了正確的內容。登陸成功后,采集微博信息本質上就是獲取到微博平臺返回的HTML編碼內容后,對頁面HTML結構進行分析,將其中的信息規格化。采用采用正則表達式、樹形結構特征匹配等方法提取頁面中所需要的數據,在具體實現上,則可以采用lxml、betaifulsoup等html解析工具解析獲取指定位置的數據。值得一提的是,很多微博使用Robots協議限制爬蟲方式抓取頁面內容,因此,可以根據具體微博的情況來選擇使用爬蟲技術。通常,應當減少爬蟲對微博網站的影響以及避免被反爬蟲機制檢測到,例如,可以設置一定的隨機延時,模仿正常用戶的操作行為。Python爬蟲大數據采集與挖掘(10)

--反爬蟲技術與爬蟲對抗《Python爬蟲大數據采集與挖掘》第二版.微課視頻版(清華大學出版社,2025)提綱概述反爬蟲技術爬蟲對抗技術不友好爬蟲導致的問題Web服務器性能下降DDOS攻擊不友好爬蟲產生的原因不遵守robots協議爬行策略的問題大量線程、高并發訪問爬蟲與反爬蟲之間的斗爭爬蟲使用各種技巧逃避Web服務器的檢測Web服務器采取各種方法檢測爬蟲,并阻止爬蟲訪問相互克制、相互促進提綱概述反爬蟲技術爬蟲對抗技術反爬蟲主要的工作包括兩個方面不友好爬蟲的識別爬蟲行為的阻止識別爬蟲主要任務是區分不友好爬取行為與正常瀏覽行為的差異。阻止爬蟲則是阻止惡意的爬取,同時能夠在識別錯誤時為正常用戶提供一個放行的通道。爬蟲檢測技術友好爬蟲遵守robots爬取頻率和策略比較合理給服務器的壓力小不友好爬蟲不遵守robots大量并發訪問給服務器帶來持續壓力或瞬間壓力

正常用戶瀏覽行為爬蟲行為客戶端IP地址同一個用戶的IP一般不會變化,同一時間段內不同用戶之間的IP區別比較大,IP地理分布和請求量分布也比較隨機。可能通過單一IP或者代理IP訪問,簡單的爬蟲往往是通過單一IP進行訪問,但也可能不斷切換使用不同的IP地址。HTTP請求Headers數據的完整性使用流行的瀏覽器或者站點的客戶端,Headers數據由瀏覽器自動生成并填充,主要包括User-Agent、允許的字符集以及本地文件的過期時間等。可能會使用無Header瀏覽器,或者模擬瀏覽器進行訪問,訪問請求存在無Headers數據和數據內容不完整的情況。由機器生成的Header往往內容相對固定,或只是簡單替換部分參數。Headers.referer數據合法性HTTP請求的Headers.referer是本站點內的頁面或者友好網站,例如:搜索引擎。HTTP請求的Headers.referer可能不存在或隨意填寫的,不在合法范圍內。請求中特定的Cookies數據的合法性每次訪問使用相同的瀏覽器,也自然會調用相同的Cookies。不一定會使用Cookies。請求時間間隔規律性人需要花費一定時間瀏覽頁面內容,之后后跳轉至下一頁面,或者同時打開少量的頁面進行預緩存。采集頁面后提取其中的超連接,即進行下一步采集,每次訪問間隔相對固定(也有爬蟲采用增加隨機延時的方式模擬自然人訪問)。能否通過驗證碼能夠在頁面出現異常顯示時及時進行干預,例如輸入驗證碼或者點擊指定的按鈕等。難于處理復雜的驗證碼或驗證操作。頁面資源加載特征加載頁面時會加載相關的所有JS/CSS等腳本文件和圖片等靜態資源,這個過程是瀏覽器自動完成的。大部分會只獲取HTML文件,不一定進行頁面中的圖片等資源的二次請求,但使用模擬瀏覽器的爬蟲會加載JS/CSS。頁面JS執行特征會訪問頁面的所有資源,即使是頁面上對自然人是不可見的。一般只會執行頁面可見的JS,訪問頁面上可見的內容。爬蟲檢測技術通過IP與訪問間隔等請求模式的識別通過Header內容識別通過cookies信息識別通過驗證碼識別通過對客戶端是否支持js的分析來識別通過是否遵循Robot協議來識別是否友好爬蟲頁面資源是否加載高級爬蟲檢測技術使用分類器等高級技術,將這些特征綜合起來,同時使用多種特征來刻畫一個HTTP請求人工標注樣本使用SVM、KNN以及深度學習來訓練分類器。爬蟲阻斷技術1. 通過非200/304的ResponseStatus禁止訪問2. 封禁IP(或IP段)的訪問權限3. 使用驗證碼或關鍵信息圖片化增加采集難度4. 使用頁面異步加載增加采集難度5. 動態調整頁面結構6. 設置蜜罐干擾爬蟲行為提綱概述反爬蟲技術爬蟲對抗技術1. 針對IP與訪問間隔限制不使用真實IP,爬蟲使用代理服務器或者云主機等方式進行IP的切換在請求中使用代理:proxies={

'http':':8888',

'https':':8484',}

worker_session=requests.Session()

r=worker_session.get(url,proxies=proxies,cookies=_cookies,verify=False,stream=True,headers=headers,timeout=5000)2. 針對Header的內容驗證使用Selenium或其他內嵌瀏覽器進行瀏覽器的訪問和模擬,同時構造合理的Headers信息,主要包括User-Agent和Hosts信息。使用Selenium則會調用瀏覽器。也可以根據規則自行組裝Headers信息,在爬蟲實現中盡可能完整地填寫Headers的各個屬性值。3. 針對Cookies驗證使用不同的線程來記錄訪問的信息,如Python中的requests.session,為每個線程保存Cookies,每次請求的Header均附上正確的Cookies,或者按照站點要求正確使用Cookies內的數據(例如使用cookies內的指定密鑰進行加密校驗)。4. 針對驗證碼驗證碼形式當前,Web網站推送的驗證碼大多分為四類:計算驗證碼、滑塊驗證碼、識圖驗證碼、語音驗證碼。目前主流的驗證碼破解主要有兩種:機器圖像識別與人工打碼,此外還可以使用瀏覽器插件繞過驗證碼的類似技術。5. 針對頁面異步加載與客戶端JS支持判斷可以使用Selenium或PhantomJS進行JS解析,并執行頁面內容獲取所需要的正確的JS方法/請求。當然也可以使用真實的瀏覽器作為采集工具的基礎,例如自定義封裝一個自定義的firefox瀏覽器,以插件的形式實現采集工具。6. 針對動態調整頁面結構對于這種方式的反爬蟲技術,最好的辦法是首先采集頁面,而后根據采集到的頁面再進行分類處理,在爬蟲程序中異常的捕獲更是不能少。如果一個頁面的html毫無規則,那么其的顯示也將是一個問題,因此對于動態調整結構的頁面可以采用Selenium加載瀏覽器,按照信息的區域進行采集的方式進行嘗試采集;此外還可以嘗試使用正則表達式,將結構中隨機因子摒除。7. 針對蜜罐方式的攔截設置蜜罐是為了讓爬蟲采集不到真正的信息這種情況下,只有一個策略,爬蟲在解析出一個超鏈接后,不要著急進入超鏈接。首先分析蜜罐的結構,判斷是使用表單隱藏字段、使用隱藏的頁面、或者是使用其他方法的蜜罐,分析到異常之后,在提交表單和采集頁面時繞過蜜罐。Python爬蟲大數據采集與挖掘(11-1)

--文本信息處理與分類《Python爬蟲大數據采集與挖掘》第二版.微課視頻版(清華大學出版社,2025)教材《Python爬蟲大數據采集與挖掘》及配套公眾號

(當當、京東可購書)提綱文本預處理文本的向量空間模型文本的分布式表示文本分類及實現技術文本情感分析詞匯切分詞匯切分的必要性爬蟲采集到文本信息之后的處理是文本處理挖掘的基礎是大數據語義分析的基礎切分的流程基于詞典的分詞方法三個基本要素分詞詞典文本掃描順序正向掃描、逆向掃描和雙向掃描匹配原則最大匹配、最小匹配、逐詞匹配和最佳匹配所謂最大匹配,就是優先匹配最長詞匯,即每一句的分詞結果中的詞匯總量要最少。正向最大匹配分詞在實現上可以采用減字法。正向減字最大匹配法,首先需要將詞典中詞匯按照其長度從大到小的順序排列,然后對于待切分的中文字符串,做如下處理:(1)將字符串和詞典中的每個詞匯逐一進行比較;(2)如果匹配到,則切分出一個詞匯,轉步驟5執行;(3)否則,從字符串的末尾減去一個字;(4)如果剩下的字符串只有一個字,則切分出該字;(5)將剩下的字符串作為新的字符串,轉步驟1執行,直到剩下的字符串長度為0。[1]s=“今天是中華人民共和國獲得奧運會舉辦權的日子”[2]s=“今天是中華人民共和國獲得奧運會舉辦權的日”[3]s=“今天是中華人民共和國獲得奧運會舉辦權的”…[20]s=“今天”[21]s=“是中華人民共和國獲得奧運會舉辦權的日子”[22]s=“是中華人民共和國獲得奧運會舉辦權的日”…[39]s=“是”[40]s=“中華人民共和國獲得奧運會舉辦權的日子”…[51]s=“中華人民共和國”[52]s=“獲得奧運會舉辦權的日子”…[61]s=“獲得”…[1]s=“今天是中華人民”…[6]s=“今天”[7]s=“是中華人民共和”[13]s=“是”[14]s=“中華人民共和國”[15]s=“獲得奧運會舉辦”[20]s=“獲得”[21]s=“奧運會舉辦權的”…按照目前基于一些語料的詞匯切分實驗結果,逆向最大匹配的切分方法得到的錯誤率是1/245,而正向最大匹配的切分方法的錯誤率是1/169。切分中的錯誤源于詞匯之間字符的重疊.“局長的房間內存儲貴重的黃金”正向最大匹配掃描得到的結果是“局長的房間內存儲貴重的黃金”逆向最大匹配掃描得到的結果是“局長的房間內存儲貴重的黃金”基于統計的分詞該方法利用詞匯使用中的統計特性進行分詞,如字串的使用頻率、每個字在詞匯中的位置特征等。通過使用機器學習的方法學習字詞特征。該方法由3個步驟組成,分別是構造語料、訓練模型和分詞。語料采用BMES標簽,構造大量語料。如上,是語料中的兩個例子。訓練模型訓練模型的目的是獲得描述語料中的字和對應標簽的統計特征,可以是標簽和字的組合概率、上下文的使用情況等。模型學習類似p(人|B)、p(人|S)、p(這|B)…每個字作為BMES的概率,以及BMES序列之間的聯系等特征。相關模型:HMM、CRF、RNN等等。分詞例如,輸入句子是“上海大學學科發展得很快”,假如模型輸出的標簽序列是BMMEBEBESBE,那么,相應的切分結果就是“上海大學/學科/發展/得/很快”。停用詞過濾停用詞過濾停用詞在不同的文本分析任務中有著不同的定義,在基于詞的檢索系統中,停用詞是指出現頻率太高、沒有太大檢索意義的詞,如“一個、一種、因此、否則、其中”等;在文本分類中,停用詞是指沒有意義的虛詞和類別色彩不強的中性詞;在自動問答系統中,停用詞因問題不同而動態變化。詞形規范化詞形規范化英文單詞一般由三部分構成:詞根、前綴和后綴,其中詞根決定單詞意思,前綴改變單詞詞義,后綴改變單詞詞性。在英文文本處理當中,在有些應用當中需要對一個詞的不同形態進行歸并,提高文本處理的效率。詞干提取是抽取詞的詞干或詞根形式,不要求一定能表達完整語義。例如,fishing抽取出fish,electricity抽取出electr。詞干提取的方法同樣分為:基于規則的方法、基于詞典的方法、基于統計的方法。Python開源庫的使用Python開源庫的使用“結巴”(jieba)(1)jieba.cut(sentence,cut_all=False,HMM=True)(2)加載自定義詞典(3)切分詞匯、同時進行詞性標注(4)命名實體識別:名詞、人名等相關例子見教材提綱文本預處理文本的向量空間模型文本的分布式表示文本分類及實現技術文本情感分析文本表示向量空間表示文本表示成為一個向量維度可以是詞匯,也可以不是詞匯概率模型表示特征選擇目前,特征選擇的主要方法有:信息增益、卡方統計量、互信息以及專門針對文本內容的TF-IDF等方法。這些特征選擇方法可分為有監督和無監督兩類,其中TF-IDF、互信息為無監督方法,卡方統計量、信息增益為有監督方法。模型表示文本的向量空間模型和線性代數中學過的向量空間模型是相同的,由基向量和坐標構成。以詞匯作為維度為例,在文本表示中,基向量就是特征詞匯,坐標就是詞匯的權重。

坐標或權重常用的計算方法有布爾權重記錄特征詞是否在文本中出現過TF特征項頻率權重(TermFrequency)TF-IDFTF-IDF(詞頻率-逆文檔頻率,TermFrequency-InverseDocumentFrequency)TF-IDF=TF*IDFIDF=log((1+N)/(1+N(ti)))+1可避免IDF=0

維度/文檔ABCw1210w2001w3010w4110w5000w6110w7101基本公式平滑公式—替換基本公式的idfLog((1+3)/(1+2))+1Log((1+3)/(1+2))+1使用Python構建向量空間表示可以使用Python開源庫sklearn和gensim中的相關類或函數來構造相應的向量空間表示。基本步驟#裝載停用詞列表#分詞、去停用詞#特征選擇#使用TfidfVectorizer計算每個文檔中每個詞匯的TF-IDF值例子見教材特別強調的是:下面語句進行特征選擇:解釋見教材dictionary=Dictionary(texts)dictionary.filter_extremes(no_below=2,no_above=1.0,keep_n=10)擴展閱讀向量的重要性提綱文本預處理文本的向量空間模型文本的分布式表示文本分類及實現技術文本情感分析VSM模型的維度是隨著文本集的不同而不同,這樣會導致大規模文本集處理的困難,因此,希望能將不同文本集的詞匯都表示為一個等長向量。分布式表示(DistributedRepresentation)將長短不一的句子表示為一個定長向量,而向量的每個維度不再是詞匯,而是代表某種語義特征。具有更加豐富的語義。文本向量表示的技術發展SVD--LDA–word2vec--Glove–FastText—Doc2vec—Elmo—GTP—BertWord2vec之后采取的是神經網絡訓練學習的方法。Fromgenism.models.doc2vecimportDoc2Vec,TaggedDocument準備訓練語料,需要分詞訓練文檔模型model.train使用模型進行文本分析提綱文本預處理文本的向量空間模型文本的分布式表示文本分類及實現技術文本情感分析分類技術概要在分類中涉及到的概念有:分類器、訓練、訓練樣本、測試樣本等。分類器是對數據挖掘中對樣本進行分類的總稱,訓練是指對模型的參數進行優化,選取最優的模型參數使得算法能夠建立具有很好泛化能力的模型。訓練樣本是由類別已知的樣本組成,用于模型的訓練。測試樣本是由類別未知的樣本組成,用于測試模型的性能。根據文本表示方法的不同,文本分類方法總體上有兩大類基于概率模型的分類使用概率文本模型,如n-gram等基于向量空間模型的分類使用文本向量表示,如VSM、Doc2vec等不管是哪類方法,基本流程大都相似。分類的流程基于概率模型的分類器樸素Bayes分類訓練:求解以下兩組參數分類:按照極大后驗例子假設有以下A類、B類共7個訓練樣本。其中斜體的詞匯為特征詞,共8個不同的特征詞,即:元旦、旅游、假期、計劃、跑步、運動、身材、方法。A類4個文本共有10個特征詞,B類3文本有7個特征詞模型訓練-采用unigram,加一平滑分類X=“元旦里,跑步、運動不可少”P(x|A)*P(A)=0.167*0.056*0.056*4/7=0.000299,P(x|B)*P(B)=0.067*0.2*0.2*3/7=0.001149,根據最大后驗概率判定準則可見,應當把該文本分為B類。基于向量空間表示的分類KNN分類KNN算法的思想比較簡單,即如果一個樣本(向量)在特征空間中的

個最近鄰樣本(向量)中的大多數屬于某一個類別,則該樣本(向量)也屬于這個類別。對文本分類而言,在給定新文本后,考慮在訓練文本集中與該新文本距離最近的

篇文本,根據這

篇文本所屬的類別判斷新文本所屬類別。SVM分類簡單分類器可以避免過擬合分類方法常用的核函數有線性核函數、多項式核函數、徑向基核函數、Sigmoid核函數和復合核函數。SVM在應對多類情況下,常用的方法是將

類問題轉化為

個兩類問題性能評估分類模型的性能評估真實類別為正例真實類別為負例算法判斷為正例ab算法判斷為負例cd查全率(召回率,Recall,簡記為r)和查準率(準確率,Precision,簡記為p),

Python實現:新聞分類為例具體實現方法,其中使用到的主要開源函數包或函數有:gensim.corpora、sklearn.svm、sklearn.feature_extraction.text.TfidfVectorizer、sklearn.metrics.confusion_matrix、sklearn.metrics.classification_report等,用于數據集的表示、TFIDF的計算、SVM模型以及性能分析等。訓練和分類兩個過程見教材提綱文本預處理文本的向量空間模型文本的分布式表示文本分類及實現技術文本情感分析情感分析也稱為觀點挖掘,是互聯網大數據挖掘應用中的一項重要技術。目標是從文本中識別出顯性或隱性表達的褒貶情感,在社會事件、服務評論、票房預測、金融市場等眾多領域具有廣泛的應用。情感分析分為詞匯級別、屬性級別、句子級別和篇章級別。以“手機用很久了,今天買了一個新的,屏幕大,分辨率高。如果過幾天覺得不好用,還可以退貨。”詞匯級別情感分析目標是提取文本中詞匯的情感,“很久”“新”“大”“高”“不好”都是包含情感的詞匯。屬性級別是提取文本中的描述對象及其情感,如(手機,新)(屏幕,大)(分辨率,高)(手機,不好用)句子級別是為整條評論文本輸出其情感,基于機器學習的方法SnowNLP是一個常用的中文文本處理庫,其包含了基于Bayes的情感分類器

自帶的訓練語料:使用方法見sentiment-snownlp.py特別需要注意的是,SnowNLP的訓練語料大都是商品評論,因此,模型用于商品評論領域文本的情感分析是比較合適的,其他領域的分析則會出現訓練集與測試集不同分布的問題,而影響分析結果。基于規則的方法該方法不需要進行機器學習模型的訓練,而是基于句子語法和詞典的啟發式計算方法。典型代表就是VADER(ValenceAwareDictionaryandsEntimentReasoner),它提供了基于機器學習和規則的方法,只能用于英文。Python爬蟲大數據采集與挖掘(11-2)

--文本主題、社交網絡與時間序列《Python爬蟲大數據采集與挖掘》第二版.微課視頻版(清華大學出版社,2025)教材《Python爬蟲大數據采集與挖掘》及配套公眾號

(當當、京東可購書)提綱聚類算法主題及其實現技術社交網絡分析時間序列挖掘大數據可視化技術聚類方法目的在于對數據集尋找一種合適的劃分,將數據點劃分成為若干個簇,但這些簇的具體含義并非事先預設的。通過聚類可以發現大數據中的蘊含模式,例如,聚類可以幫助市場分析人員從消費者數據庫中區分出不同的消費群體。K-Means是一種基于劃分的聚類方法,該算法由于簡單、高效、易實施等優點,在很多領域被廣泛應用。#生成數據點集X,y=make_blobs(n_samples=30,n_features=2,centers=3,cluster_std=0.6,random_state=0)#Kmeans聚類,并獲得每個數據點的簇號cluster=KMeans(n_clusters=3,random_state=1).fit(X)y_pred=cluster.labels_#查看每個簇的中心centroid=cluster.cluster_centers_三簇DBScan發現2個無法成簇的點提綱聚類算法主題及其實現技術社交網絡分析時間序列挖掘大數據可視化技術主題定義主題代表著某種敘事范圍,廣泛應用于主題爬蟲、新聞熱點挖掘等中。而首要問題是如何定義主題,如何描述一個主題。從目前所使用的方法看,主要有以下幾種方法。采用關鍵詞集來描述主題關鍵詞及權重集來描述主題。對關鍵詞集進行某種劃分,通過對子主題的描述來實現對整個主題的定義。主題關鍵詞集大數據大數據數據挖掘特征選擇數據SparkHadoop世界杯足球賽世界杯足球賽俄羅斯法國隊大力神FIFA股票市場股票市場看漲看跌股市行情發行券商主題關鍵詞集大數據大數據/0.4數據挖掘/0.2特征選擇/0.1數據/0.1Spark/0.1Hadoop/0.1世界杯足球賽世界杯/0.4足球賽/0.3俄羅斯/0.1法國隊/0.1大力神/0.05FIFA/0.05股票市場股票/0.2市場/0.2看漲/0.1看跌/0.1股市/0.2行情/0.1發行/0.05券商/0.05基于向量空間的主題構建中心向量法將每個文本按照分詞、提取特征詞、計算權重等步驟后,表示為向量,對這些向量計算其幾何中心。中心向量法將整個主題用一個向量表示聚類法當主題中包含多個不同的子主題,而且這些子主題之間的凝聚性不好的時候,就不是太合適只用一個向量來表示了。因此,聚類法就是為了將整個文檔向量按照合適的方法進行分割,將這些向量分割成為若干個密集區域,而每個區域用一個中心向量來表示。LDA主題模型不管是用一個向量還是用多個向量來表示主題,都是一種幾何的表示方法,在主題邊界的刻畫方面尚存在很大不足。將主題看

溫馨提示

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

評論

0/150

提交評論