① 一分鍾了解互聯網數據挖掘流程
一分鍾了解互聯網數據挖掘流程
1、爬蟲抓取網路數據
真實的數據挖掘項目,一定是從獲取數據開始的,除了通過一些渠道購買或者下載專業數據外,常常需要大家自己動手爬互聯網數據,這個時候,爬蟲就顯得格外重要了。
Nutch爬蟲的主要作用是從網路上抓取網頁數據並建立索引。我們只需指定網站的頂級網址,如taobao.com,爬蟲可以自動探測出頁面內容里新的網址,從而進一步抓取鏈接網頁數據。nutch支持把抓取的數據轉化成文本,如(PDF、word、EXCEL、HTML、XML等形式)轉換成純文字字元。
Nutch與Hadoop集成,可以將下載的數據保存到hdfs,用於後續離線分析。使用步驟為:
向hdfs中存入待抓取的網站url
$ hadoop fs -put urldir urldir
註:
第一個urldir為本地文件夾,存放了url數據文件,每行一個url地址
第二個urldir為hdfs的存儲路徑。
啟動nutch,在NUTCH_HONE目錄下執行以下命令
$ bin/nutch crawlurldir –dir crawl -depth 3 –topN 10
命令成功執行後,會在hdfs中生成crawl目錄。
2、MapRece預處理數據
對於下載的原始文本文檔,無法直接進行處理,需要對文本內容進行預處理,包括文檔切分、文本分詞、去停用詞(包括標點、數字、單字和其它一些無意義的詞)、文本特徵提取、詞頻統計、文本向量化等操作。
常用的文本預處理演算法是TF-IDF,其主要思想是,如果某個詞或短語在一篇文章中出現的頻率高,並且在其他文章中很少出現,則認為此詞或者短語具有很好的類別區分能力,適合用來做分類。
輸入原始文本內容:
Againit seems that cocoa delivered……
執行TF-IDF預處理:
hadoop jar $JAR ……
輸出文本向量:
9219:0.246 453:0.098 10322:0.21 11947:0.272 ……
每一列是詞及其權重,使用冒號分隔,例如「9219:0.246」表示編號為9219的詞,對應原始單詞為「Again」,其權重值為0.246。
3、Mahout數據挖掘
預處理後的數據就可以用來做數據挖掘。Mahout是一個很強大的數據挖掘工具,是分布式機器學習演算法的集合,包括:協同過濾、分類、聚類等。
以LDA演算法為例,它可以將文檔集中每篇文檔的主題按照概率分布的形式給出。它是一種無監督學習演算法,在訓練時不需要手工標注主題,需要的僅僅是指定主題的數量K。此外LDA的另一個優點則是,對於每一個主題均可找出一些詞語來描述它。
輸入預處理後的數據:
9219:0.246 453:0.098 ……
執行LDA挖掘演算法:
mahout cvb –k 20……
輸出挖掘結果:
topic1 {computer,technology,system,internet,machine}
topic2 {play,film,movie,star,director,proction,stage}
我們可以獲知用戶的偏好是哪些主題,這些主題是由一些關鍵片語成。
4、Sqoop導出到關系資料庫
在某些場景下,需要把數據挖掘的結果導出到關系資料庫,用於及時響應外部應用查詢。
sqoop是一個用來把hadoop和關系型資料庫中的數據相互轉移的工具,可以將一個關系型資料庫(例如:MySQL ,Oracle 等)中的數據導入到hadoop的hdfs中,也可以將hdfs的數據導出到關系型資料庫中:
sqoop export –connect jdbc:mysql://localhost:3306/zxtest –username root–password root –table result_test –export-dir /user/mr/lda/out
export操作實現把hdfs目錄/user/mr/lda/out下數據導出到mysql的result_test表。
② Python編程基礎之(五)Scrapy爬蟲框架
經過前面四章的學習,我們已經可以使用Requests庫、Beautiful Soup庫和Re庫,編寫基本的Python爬蟲程序了。那麼這一章就來學習一個專業的網路爬蟲框架--Scrapy。沒錯,是框架,而不是像前面介紹的函數功能庫。
Scrapy是一個快速、功能強大的網路爬蟲框架。
可能大家還不太了解什麼是框架,爬蟲框架其實是實現爬蟲功能的一個軟體結構和功能組件的集合。
簡而言之, Scrapy就是一個爬蟲程序的半成品,可以幫助用戶實現專業的網路爬蟲。
使用Scrapy框架,不需要你編寫大量的代碼,Scrapy已經把大部分工作都做好了,允許你調用幾句代碼便自動生成爬蟲程序,可以節省大量的時間。
當然,框架所生成的代碼基本是一致的,如果遇到一些特定的爬蟲任務時,就不如自己使用Requests庫搭建來的方便了。
PyCharm安裝
測試安裝:
出現框架版本說明安裝成功。
掌握Scrapy爬蟲框架的結構是使用好Scrapy的重中之重!
先上圖:
整個結構可以簡單地概括為: 「5+2」結構和3條數據流
5個主要模塊(及功能):
(1)控制所有模塊之間的數據流。
(2)可以根據條件觸發事件。
(1)根據請求下載網頁。
(1)對所有爬取請求進行調度管理。
(1)解析DOWNLOADER返回的響應--response。
(2)產生爬取項--scraped item。
(3)產生額外的爬取請求--request。
(1)以流水線方式處理SPIDER產生的爬取項。
(2)由一組操作順序組成,類似流水線,每個操作是一個ITEM PIPELINES類型。
(3)清理、檢查和查重爬取項中的HTML數據並將數據存儲到資料庫中。
2個中間鍵:
(1)對Engine、Scheler、Downloader之間進行用戶可配置的控制。
(2)修改、丟棄、新增請求或響應。
(1)對請求和爬取項進行再處理。
(2)修改、丟棄、新增請求或爬取項。
3條數據流:
(1):圖中數字 1-2
1:Engine從Spider處獲得爬取請求--request。
2:Engine將爬取請求轉發給Scheler,用於調度。
(2):圖中數字 3-4-5-6
3:Engine從Scheler處獲得下一個要爬取的請求。
4:Engine將爬取請求通過中間件發送給Downloader。
5:爬取網頁後,Downloader形成響應--response,通過中間件發送給Engine。
6:Engine將收到的響應通過中間件發送給耐如Spider處理。
(3):圖中數字 7-8-9
7:Spider處理響應後產生爬取項--scraped item。
8:Engine將爬取項發送給Item Pipelines。
9:Engine將爬取請求發送給Scheler。
任務處理流程:從Spider的初始爬取請求開始爬取,Engine控制各模塊數據流,不間斷從Scheler處獲得爬取請求,直至請求為空,最後到Item Pipelines存儲數據結束。
作為用戶,只需配置好Scrapy框架的Spider和Item Pipelines,也就是數據流的入口與出口,便可完成一個爬蟲程序的搭建激含。Scrapy提供了簡單的爬蟲命令語句,幫助用戶一鍵配置剩餘文件,那我們便來看看有哪些好用的命令吧。
Scrapy採用命令行創建和運行爬蟲
PyCharm打開Terminal,啟動Scrapy:
Scrapy基本命令行格式:
具體常用命令如下:
下面用一個例子來學習一下命令的使用:
1.建立一個Scrapy爬蟲工程,在已啟動的Scrapy中繼續輸入:
執行該命令,系統會在PyCharm的工程文件中自動創建一個工程,命明畝笑名為pythonDemo。
2.產生一個Scrapy爬蟲,以教育部網站為例http://www.moe.gov.cn:
命令生成了一個名為demo的spider,並在Spiders目錄下生成文件demo.py。
命令僅用於生成demo.py文件,該文件也可以手動生成。
觀察一下demo.py文件:
3.配置產生的spider爬蟲,也就是demo.py文件:
4.運行爬蟲,爬取網頁:
如果爬取成功,會發現在pythonDemo下多了一個t20210816_551472.html的文件,我們所爬取的網頁內容都已經寫入該文件了。
以上就是Scrapy框架的簡單使用了。
Request對象表示一個HTTP請求,由Spider生成,由Downloader執行。
Response對象表示一個HTTP響應,由Downloader生成,有Spider處理。
Item對象表示一個從HTML頁面中提取的信息內容,由Spider生成,由Item Pipelines處理。Item類似於字典類型,可以按照字典類型來操作。
③ python爬取分析超級大樂透歷史開獎數據
在python入門爬蟲學習中,博主採用requests和beautifulsoup工具,目標是抓取超級大樂透的歷史開獎數據。
爬取的網站是datachart.500.com/dlt/h...,500彩票網的開獎數據實際存儲在頁面源代碼之外,通過查看開發者工具的network標簽可以找到包含所有歷史結果的網頁。
在編寫爬蟲的過程中,博主首先抓取了所有彩票期號及其對應的中獎數字,清晰展示每期的結果。
針對5+2的號碼組合,博主進行了深入分析,特別關注了出現頻率最高的兩個組合。通過初步計算,發現這個特定組合的中獎概率大約是平均中獎幾率的三倍。但為了清晰呈現,這個結果並未直接展示,而是以醒目的紅色標記在生成的csv文件中。