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

下載本文檔

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

文檔簡介

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

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

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

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

handle_starttag->handle_data->handle_comment->handle_endtag

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

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

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

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('已經(jīng)找到input標簽,name:',input_tag_name)

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

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

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

/oauth2/default.html

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

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

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

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

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

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

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

正常用戶瀏覽行為爬蟲行為客戶端IP地址同一個用戶的IP一般不會變化,同一時間段內(nèi)不同用戶之間的IP區(qū)別比較大,IP地理分布和請求量分布也比較隨機??赡芡ㄟ^單一IP或者代理IP訪問,簡單的爬蟲往往是通過單一IP進行訪問,但也可能不斷切換使用不同的IP地址。HTTP請求Headers數(shù)據(jù)的完整性使用流行的瀏覽器或者站點的客戶端,Headers數(shù)據(jù)由瀏覽器自動生成并填充,主要包括User-Agent、允許的字符集以及本地文件的過期時間等??赡軙褂脽oHeader瀏覽器,或者模擬瀏覽器進行訪問,訪問請求存在無Headers數(shù)據(jù)和數(shù)據(jù)內(nèi)容不完整的情況。由機器生成的Header往往內(nèi)容相對固定,或只是簡單替換部分參數(shù)。Headers.referer數(shù)據(jù)合法性HTTP請求的Headers.referer是本站點內(nèi)的頁面或者友好網(wǎng)站,例如:搜索引擎。HTTP請求的Headers.referer可能不存在或隨意填寫的,不在合法范圍內(nèi)。請求中特定的Cookies數(shù)據(jù)的合法性每次訪問使用相同的瀏覽器,也自然會調(diào)用相同的Cookies。不一定會使用Cookies。請求時間間隔規(guī)律性人需要花費一定時間瀏覽頁面內(nèi)容,之后后跳轉(zhuǎn)至下一頁面,或者同時打開少量的頁面進行預緩存。采集頁面后提取其中的超連接,即進行下一步采集,每次訪問間隔相對固定(也有爬蟲采用增加隨機延時的方式模擬自然人訪問)。能否通過驗證碼能夠在頁面出現(xiàn)異常顯示時及時進行干預,例如輸入驗證碼或者點擊指定的按鈕等。難于處理復雜的驗證碼或驗證操作。頁面資源加載特征加載頁面時會加載相關(guān)的所有JS/CSS等腳本文件和圖片等靜態(tài)資源,這個過程是瀏覽器自動完成的。大部分會只獲取HTML文件,不一定進行頁面中的圖片等資源的二次請求,但使用模擬瀏覽器的爬蟲會加載JS/CSS。頁面JS執(zhí)行特征會訪問頁面的所有資源,即使是頁面上對自然人是不可見的。一般只會執(zhí)行頁面可見的JS,訪問頁面上可見的內(nèi)容。爬蟲檢測技術(shù)通過IP與訪問間隔等請求模式的識別通過Header內(nèi)容識別通過cookies信息識別通過驗證碼識別通過對客戶端是否支持js的分析來識別通過是否遵循Robot協(xié)議來識別是否友好爬蟲頁面資源是否加載高級爬蟲檢測技術(shù)使用分類器等高級技術(shù),將這些特征綜合起來,同時使用多種特征來刻畫一個HTTP請求人工標注樣本使用SVM、KNN以及深度學習來訓練分類器。爬蟲阻斷技術(shù)1. 通過非200/304的ResponseStatus禁止訪問2. 封禁IP(或IP段)的訪問權(quán)限3. 使用驗證碼或關(guān)鍵信息圖片化增加采集難度4. 使用頁面異步加載增加采集難度5. 動態(tài)調(diào)整頁面結(jié)構(gòu)6. 設置蜜罐干擾爬蟲行為提綱概述反爬蟲技術(shù)爬蟲對抗技術(shù)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的內(nèi)容驗證使用Selenium或其他內(nèi)嵌瀏覽器進行瀏覽器的訪問和模擬,同時構(gòu)造合理的Headers信息,主要包括User-Agent和Hosts信息。使用Selenium則會調(diào)用瀏覽器。也可以根據(jù)規(guī)則自行組裝Headers信息,在爬蟲實現(xiàn)中盡可能完整地填寫Headers的各個屬性值。3. 針對Cookies驗證使用不同的線程來記錄訪問的信息,如Python中的requests.session,為每個線程保存Cookies,每次請求的Header均附上正確的Cookies,或者按照站點要求正確使用Cookies內(nèi)的數(shù)據(jù)(例如使用cookies內(nèi)的指定密鑰進行加密校驗)。4. 針對驗證碼驗證碼形式當前,Web網(wǎng)站推送的驗證碼大多分為四類:計算驗證碼、滑塊驗證碼、識圖驗證碼、語音驗證碼。目前主流的驗證碼破解主要有兩種:機器圖像識別與人工打碼,此外還可以使用瀏覽器插件繞過驗證碼的類似技術(shù)。5. 針對頁面異步加載與客戶端JS支持判斷可以使用Selenium或PhantomJS進行JS解析,并執(zhí)行頁面內(nèi)容獲取所需要的正確的JS方法/請求。當然也可以使用真實的瀏覽器作為采集工具的基礎,例如自定義封裝一個自定義的firefox瀏覽器,以插件的形式實現(xiàn)采集工具。6. 針對動態(tài)調(diào)整頁面結(jié)構(gòu)對于這種方式的反爬蟲技術(shù),最好的辦法是首先采集頁面,而后根據(jù)采集到的頁面再進行分類處理,在爬蟲程序中異常的捕獲更是不能少。如果一個頁面的html毫無規(guī)則,那么其的顯示也將是一個問題,因此對于動態(tài)調(diào)整結(jié)構(gòu)的頁面可以采用Selenium加載瀏覽器,按照信息的區(qū)域進行采集的方式進行嘗試采集;此外還可以嘗試使用正則表達式,將結(jié)構(gòu)中隨機因子摒除。7. 針對蜜罐方式的攔截設置蜜罐是為了讓爬蟲采集不到真正的信息這種情況下,只有一個策略,爬蟲在解析出一個超鏈接后,不要著急進入超鏈接。首先分析蜜罐的結(jié)構(gòu),判斷是使用表單隱藏字段、使用隱藏的頁面、或者是使用其他方法的蜜罐,分析到異常之后,在提交表單和采集頁面時繞過蜜罐。Python爬蟲大數(shù)據(jù)采集與挖掘(11-1)

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

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

坐標或權(quán)重常用的計算方法有布爾權(quán)重記錄特征詞是否在文本中出現(xiàn)過TF特征項頻率權(quán)重(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構(gòu)建向量空間表示可以使用Python開源庫sklearn和gensim中的相關(guān)類或函數(shù)來構(gòu)造相應的向量空間表示。基本步驟#裝載停用詞列表#分詞、去停用詞#特征選擇#使用TfidfVectorizer計算每個文檔中每個詞匯的TF-IDF值例子見教材特別強調(diào)的是:下面語句進行特征選擇:解釋見教材dictionary=Dictionary(texts)dictionary.filter_extremes(no_below=2,no_above=1.0,keep_n=10)擴展閱讀向量的重要性提綱文本預處理文本的向量空間模型文本的分布式表示文本分類及實現(xiàn)技術(shù)文本情感分析VSM模型的維度是隨著文本集的不同而不同,這樣會導致大規(guī)模文本集處理的困難,因此,希望能將不同文本集的詞匯都表示為一個等長向量。分布式表示(DistributedRepresentation)將長短不一的句子表示為一個定長向量,而向量的每個維度不再是詞匯,而是代表某種語義特征。具有更加豐富的語義。文本向量表示的技術(shù)發(fā)展SVD--LDA–word2vec--Glove–FastText—Doc2vec—Elmo—GTP—BertWord2vec之后采取的是神經(jīng)網(wǎng)絡訓練學習的方法。Fromgenism.models.doc2vecimportDoc2Vec,TaggedDocument準備訓練語料,需要分詞訓練文檔模型model.train使用模型進行文本分析提綱文本預處理文本的向量空間模型文本的分布式表示文本分類及實現(xiàn)技術(shù)文本情感分析分類技術(shù)概要在分類中涉及到的概念有:分類器、訓練、訓練樣本、測試樣本等。分類器是對數(shù)據(jù)挖掘中對樣本進行分類的總稱,訓練是指對模型的參數(shù)進行優(yōu)化,選取最優(yōu)的模型參數(shù)使得算法能夠建立具有很好泛化能力的模型。訓練樣本是由類別已知的樣本組成,用于模型的訓練。測試樣本是由類別未知的樣本組成,用于測試模型的性能。根據(jù)文本表示方法的不同,文本分類方法總體上有兩大類基于概率模型的分類使用概率文本模型,如n-gram等基于向量空間模型的分類使用文本向量表示,如VSM、Doc2vec等不管是哪類方法,基本流程大都相似。分類的流程基于概率模型的分類器樸素Bayes分類訓練:求解以下兩組參數(shù)分類:按照極大后驗例子假設有以下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,根據(jù)最大后驗概率判定準則可見,應當把該文本分為B類?;谙蛄靠臻g表示的分類KNN分類KNN算法的思想比較簡單,即如果一個樣本(向量)在特征空間中的

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

篇文本,根據(jù)這

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

類問題轉(zhuǎn)化為

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

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

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論