火車頭如何才能設置發布的時候,如果是有html代碼就直接的轉換掉,互聯網上笑話抽取及排重---火車頭采集器的使用和MD5算法的應用...

10011311341 呂濤、10011311356

李紅

目的:通過熟悉使用火車頭采集器,在網絡上采取3萬條笑話并進行排重,以此來熟悉web文本挖掘的一些知識。

過程:本次學習,主要分成兩個部分。第一部分是笑話文本的采集,第二部分是笑話排重。以下是具體過程:

第一部分 笑話抽取

火車頭采笑話基本流程:

新建分組?新建任務?采集網址設置?采集內容設置?抓數據。

一、新建分組及任務

根據需要設立“課程”分組,以便于以后學習過程中練習使用,又建立了子分組“笑話抽取”。本次采集笑話主要是兩個網站“中文幽默王”及“開心驛站”,由于不同的網站html各種功能框架不同,而不同框架結構的采集規則又不同,所以將其分成了兩個任務建立“開心驛站”和“中文幽默王”。如圖1所示

a4c26d1e5885305701be709a3d33442f.png

圖1 分組及任務

二、采集網址及內容規則設置

由于本次采集作為課程練習使用,所以不牽扯到發布,因此,任務編輯上面僅設置第一步“采集網址規則”和第二步“采集內容規則”,如圖2所示

a4c26d1e5885305701be709a3d33442f.png

圖2 編輯任務

下面學習過程介紹均以開心驛站為例敘述

第一步:采集網址規則

首先要先添加起始網址http://www.kxx.cc/ 接下來的笑話網址采集就分為兩種方式。

第一種就是在“添加開始采集地址”窗體中設置“批量/多頁”項,設置“等差數列”方式,即采集的笑話從第一頁到最后一頁,這些頁數是成公差為1的等差數列,如圖3所示

a4c26d1e5885305701be709a3d33442f.png

圖3 批量/多頁設置

將“開心驛站”上面各類笑話設置完全,效果圖如圖3所示

a4c26d1e5885305701be709a3d33442f.png

圖4 起始網址效果圖

當然,如果僅此設置的話,我們一頁只能采到一條笑話,實際上,“開心驛站”上面的一頁可以顯示16條笑話,這樣我們還要設置一下“多級網址采集規則”。可以手動分析頁面html格式,然后填寫規則,這里采用最簡單的可視化Xpath方式獲取地址。如圖5所示

a4c26d1e5885305701be709a3d33442f.png

圖5

Xpath方式獲取地址

我們可以看出多級網址獲取方式為get如圖6所示

a4c26d1e5885305701be709a3d33442f.png

圖6 多級網址設置效果圖

第二種就是不在設置“批量/多頁”,而是直接設置“多級網址獲取”,首先獲得“開心驛站”上面各個分類的默認打開地址。

例如“校園笑話”http://www.kxx.cc/xiaohua/list4-1.html,這些網址的獲取,我們同樣采用的是最簡單的可視化地址Xpath方式獲得。Xpath獲得的網址里面有可能不是我們想要的網址,比如list10-1和list13-1分別為圖片和視頻,所以我們可以進行“結果網址過濾”如圖7所示

a4c26d1e5885305701be709a3d33442f.png

圖7 結果網址過濾設置

接下來就是“列表分頁獲取”設置,這個就是對每個分類的默認頁進行下一頁的采集,根據html里面的格式,我們如圖8所示設置

a4c26d1e5885305701be709a3d33442f.png

圖8 列表分頁獲取設置

至于每一頁要采集到16條笑話的網址,這個就和第一種方式是一樣的。就此略過。

第二步 采集內容規則

首先我們要設計自己想要的記錄屬性,采集笑話,需要“標題”“內容”“分類”三個屬性,如圖9所示內容標簽定義

a4c26d1e5885305701be709a3d33442f.png

圖9 內容標簽定義

具體到各個標簽的規則定義如下圖10-13:

a4c26d1e5885305701be709a3d33442f.png

圖10 前后截取方式抽取標題

a4c26d1e5885305701be709a3d33442f.png

圖11

可視化抽取內容

需要注意的是,在內容抽取過程中可能會遇到一些html標簽殘留,或者是雙引號,感嘆號以及省略號等等不顯示,這時候我們可以根據需要進行html標簽排除和一些字符的替換。

a4c26d1e5885305701be709a3d33442f.png

圖12

可視化提取分類

a4c26d1e5885305701be709a3d33442f.png

圖13 規則測試

三、抓數據

通過以上“網址采集規則”和“內容采集規則”的設置,就可以開始任務了。經過一段時間,數據采集完成,我們可以對任務進行右單擊選擇“打開Data下任務文件夾”,就可以看到默認為Access的數據文件,當然也可以轉換為Excel格式。由于排重的時候我們是以Excel格式進行數據輸入的,所以我們將其轉換為Excel格式。

第二部分 笑話排重

算法思想:本次笑話排重,主要是從內容上判斷。采用MD5摘要算法,我們選取第一個句話前后7個字符進行MD5碼運算,就是中文“。”和英文“.”前面4個后面兩個再加本身7個字符進行MD5運算,沒有中文句號和英文句號的暫時定為不重復。然后對比比每條笑話的前七個字符的MD5碼。根據“select

*,count(distinct Md5)from mo1 group by Md5”將和現有的笑話重復的笑話排除掉。

算法描述:MD5對以512位為單位的輸入進行變換最終以32位為單位4個的壓縮信息組輸出。根據運算結果的唯一性,我們可以每條笑話的第一個句號的前7個字符進行相同MD5運算,比對之后進行確認是否相同。

MD5過程描述如圖14

a4c26d1e5885305701be709a3d33442f.png

圖14 MD5過程

算法實現:

1、input

import MySQLdb

import xlrd

conn = MySQLdb.connect(host='localhost' , user = 'root'

,passwd='root' ,db = 'joke' ,use_unicode=True

,charset='utf8')

cursor = conn.cursor()

data = xlrd.open_workbook('E:\joke1.xls')

table = data.sheets()[0]

cursor.execute("select *,count(distinct Md5)from mo1 group by

Md5;")

rows = cursor.fetchall()

for row in rows:

k = row[0]

a =

int(table.cell(k,0).value)

b =

table.cell(k,1).value

c =

table.cell(k,2).value

d =

table.cell(k,3).value

e =

table.cell(k,4).value

f =

table.cell(k,5).value

g =

table.cell(k,6).value

sql = "INSERT INTO jo1

values(%s,%s,%s,%s,%s,%s,%s)"

cursor.execute(sql,(a,b,c,d,e,f,g))

cursor.close()

conn.commit()

2、MD5算法代碼實現

# -*- coding: UTF-8 -*-

import xlrd

import re

import hashlib

import MySQLdb

data = xlrd.open_workbook('E:\joke1.xls')

table = data.sheets()[0]

conn = MySQLdb.connect(host='localhost' , user = 'root'

,passwd='root' ,db = 'joke' ,use_unicode=True

,charset='utf8')

cursor = conn.cursor()

for n in range(1,table.nrows):

a =

table.cell(n,4).value

print n

md

=''

for i in

range(len(a)):

s = ''

if a[i] == u'.':

print

a[i]

if i ==

len(a)-1:

j = len(a)

elif i ==

len(a)-2:

j = len(a)

else:

j = i+3

for k in

range(j-7,j):

s = s+a[k]

m =

hashlib.md5(s.encode("utf8"))

md =

m.hexdigest()

break

elif a[i] == u'。':

print

a[i]

if i ==

len(a)-1:

j = len(a)

elif i ==

len(a)-2:

j = len(a)

else:

j = i+3

for k in

range(j-7,j):

s = s+a[k]

m =

hashlib.md5(s.encode("utf8"))

md =

m.hexdigest()

break

if md == '':

md = str(n)

sql = "INSERT INTO mo1

values(%s,%s)"

cursor.execute(sql,(n,md))

cursor.close()

conn.commit()

報告總結

本次課程作業進行過程當中,遇到了很多問題,有些解決了有些目前還沒有,火車頭是門學問,各種規則的書寫學習路還很漫長,在以后的學習過程中慢慢積累經驗。

排重的算法上也還有不足,在今后的學習當中應該再接再厲。

總之,本次課程學習,學到了很多東西。特別是在學習方法上,自己吃不透的地方可以向別人請教,可以通過別的渠道獲取知識。學習是個任道重遠的事情,自己的能力也有觸及不到的地方,日后的工作也會更多的依賴團隊的合作,所以,要更加注重合作的重要性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392878.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392878.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392878.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Tcp_wrapper

在Linux進程分為:獨立進程和非獨立進程非獨立進程:是依賴于超級守護進程的進程, 且受Xinetd 管理,并在啟動服務時 必須啟動例子:#chkconfig –level 2345 telnetd on關與chkconfig 的命令:#chkconfig –lis…

angular 動畫_如何在Angular 6中使用動畫

angular 動畫介紹 (Introduction) Animation is defined as the transition from an initial state to a final state. It is an integral part of any modern web application. Animation not only helps us create a great UI but it also makes the application interesting…

win10上面安裝win7的虛擬機怎么相互ping通

最近干了一些很蛋疼的事,這些都是自己踩過的坑,記錄下來方便自己以后查閱 首先我的目的就是為了在自己的PC機上面部署一個SVN服務器,然后安裝一個客戶端,自己寫的軟件就可以定期入庫,做好自己的版本控制,但…

新東方面試知識點記錄

3.spring mvc 怎么接受http post 方式提交過來的xml數據?servlet中怎么接受? RequestMapping(value"/jsonPrase", headers {"content-typeapplication/json","content-typeapplication/xml"}) ResponseBody …

win10用計算機名訪問文件夾,win10系統提示你當前無權訪問該文件夾的解決方法【圖文教程】...

Win10系統下,我們在訪問或更改某些系統文件夾時,有時會遇到系統提示“你當前無權訪問該文件夾”的情況。那么,遇到這種情況的話,我們該怎么辦呢?接下來,小編就向大家分享win10系統提示“你當前無權訪問該文…

.Net Micro Framework研究—實現SideShow窗體界面

基于MF系統的Windows SideShow界面是非常炫的(如下圖)。既然微軟能用.Net Micro Framework實現這么棒的界面效果,我想我們也能做到。 (SideShow模擬器界面和游戲程序中的右鍵菜單—注意菜單彈出后,其它的界面變暗了&am…

leetcode 344. 反轉字符串

編寫一個函數,其作用是將輸入的字符串反轉過來。輸入字符串以字符數組 char[] 的形式給出。 不要給另外的數組分配額外的空間,你必須原地修改輸入數組、使用 O(1) 的額外空間解決這一問題。 你可以假設數組中的所有字符都是 ASCII 碼表中的可打印字符。…

事件捕獲(capture)和冒泡事件(Bubble)

PS:這里是我從別人的博客中學習事件捕獲和冒泡是的總結,如果你也感興趣的話,建議你點擊鏈接查看原博客的內容,他們寫的都是很經典! 對“捕獲”和“冒泡”這兩個概念,我想我們對冒泡更熟悉一些&…

gulp編譯css_如何用gulp縮小CSS

gulp編譯cssby Vinicius Gularte由Vinicius Gularte 如何用gulp縮小CSS (How to minify your CSS with gulp) In this article, Im going to show a simple way to automatically minify your CSS files using gulp. ?在本文中,我將展示一種使用gulp自動縮小CSS文…

線段樹(區間更改,區間查最值)模板

線段樹(區間更改,區間查最值)模板 主要重在理解線段樹,理解了怎么改都可以,還有以后不要直接抄模板,要寫出自己想的一份代碼 &代碼&#xff1a; #include <cstdio> #include <bitset> #include <iostream> #include <set> #include <cmath>…

Unity3D項目開發一點經驗

我們主要使用3dsmax2010進行制作&#xff0c;輸出FBX的類型導入Unity3D中。默認情況下&#xff0c;3dsmax8可以和U3D軟件直接融合&#xff0c;自動轉換為FBX物體。 注意事項如下&#xff1a; 1.面數控制 在MAX軟件中制作單一GameObject物體的面數不能超過65000個三角形&#xf…

leetcode 142. 環形鏈表 II(set/快慢指針)

給定一個鏈表&#xff0c;返回鏈表開始入環的第一個節點。 如果鏈表無環&#xff0c;則返回 null。 為了表示給定鏈表中的環&#xff0c;我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置&#xff08;索引從 0 開始&#xff09;。 如果 pos 是 -1&#xff0c;則在該鏈表中沒有…

html5 支持表格嗎,html5 – 在HTML 5中使用表格很好嗎?

簡單規則 – 使用表格表格數據&#xff0c;使用其他元素進行演示(使用CSS設計布局)&#xff0c;如div&#xff0c;section&#xff0c;aside&#xff0c;nav等。這為他們所持有的內容提供了意義&#xff0c;而不是為所有內容使用表事實是&#xff0c;開發人員在90年代使用了表格…

css網格_我如何記住CSS網格屬性

css網格The syntax for CSS Grid is foreign and hard to remember. But if you can’t remember CSS Grid’s syntax, you won’t be confident when you use CSS Grid.CSS Grid的語法是外來的&#xff0c;很難記住。 但是&#xff0c;如果您不記得CSS Grid的語法&#xff0c;…

2017年讀書計劃(一)

前言 這篇博文就暫時不記錄技術了&#xff0c;記錄下生活。對自己今年2017年做個讀書計劃安排。 最近在看一部網絡劇 - 《花間提壺方大廚》&#xff0c;也許你們會感覺我很無聊&#xff0c;我也是被頭條帶壞了&#xff0c;每天上班一個小時的地下交通-地鐵&#xff0c;就借助上…

.net10個必備工具

1.NUnit 編寫單元測試的工具2.NDoc 自動生成代碼文檔的工具3.NAnt 編譯解決方案的工具4.CodeSmith 自動生成代碼的工具5.FxCop 檢查你的代碼是否按照規范編寫的工具6.Snippet Compiler 編譯少量代碼的工具7.ASP.NET Version Switcher Visual Studio .NET Project Conve…

音標

音標 oror ds念子音&#xff0c;ts念s音

leetcode 530. 二叉搜索樹的最小絕對差(中序遍歷)

給你一棵所有節點為非負值的二叉搜索樹&#xff0c;請你計算樹中任意兩節點的差的絕對值的最小值。示例&#xff1a;輸入&#xff1a;1\3/2輸出&#xff1a; 1解釋&#xff1a; 最小絕對差為 1&#xff0c;其中 2 和 1 的差的絕對值為 1&#xff08;或者 2 和 3&#xff09;。代…

計算機排線知識,一種計算機排線梳理裝置制造方法及圖紙

【技術實現步驟摘要】一種計算機排線梳理裝置本技術涉及計算機排線梳理&#xff0c;具體涉及一種計算機排線梳理裝置。技術介紹計算機俗稱電腦&#xff0c;是現代一種用于高速計算的電子計算機器&#xff0c;可以進行數值計算&#xff0c;又可以進行邏輯計算&#xff0c;還具有…

github和pypi_如何將GitHub用作PyPi服務器

github和pypiI was looking for a hosted private PyPi Python Package server, that used credentials that the team already has (such as GitHub).我正在尋找一個托管的私有PyPi Python Package服務器&#xff0c;該服務器使用了團隊已經擁有的憑據(例如GitHub)。 I didn’…