火车头如何才能设置发布的时候,如果是有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.mzph.cn/news/392878.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10上面安装win7的虚拟机怎么相互ping通

最近干了一些很蛋疼的事,这些都是自己踩过的坑,记录下来方便自己以后查阅 首先我的目的就是为了在自己的PC机上面部署一个SVN服务器,然后安装一个客户端,自己写的软件就可以定期入库,做好自己的版本控制,但…

win10用计算机名访问文件夹,win10系统提示你当前无权访问该文件夹的解决方法【图文教程】...

Win10系统下,我们在访问或更改某些系统文件夹时,有时会遇到系统提示“你当前无权访问该文件夹”的情况。那么,遇到这种情况的话,我们该怎么办呢?接下来,小编就向大家分享win10系统提示“你当前无权访问该文…

.Net Micro Framework研究—实现SideShow窗体界面

基于MF系统的Windows SideShow界面是非常炫的(如下图)。既然微软能用.Net Micro Framework实现这么棒的界面效果,我想我们也能做到。 (SideShow模拟器界面和游戏程序中的右键菜单—注意菜单弹出后,其它的界面变暗了&am…

2017年读书计划(一)

前言 这篇博文就暂时不记录技术了,记录下生活。对自己今年2017年做个读书计划安排。 最近在看一部网络剧 - 《花间提壶方大厨》,也许你们会感觉我很无聊,我也是被头条带坏了,每天上班一个小时的地下交通-地铁,就借助上…

音标

音标 oror ds念子音,ts念s音

数据结构与算法---查找算法(Search Algorithm)

查找算法介绍 在java中,我们常用的查找有四种: 顺序(线性)查找 二分查找/折半查找 插值查找斐波那契查找1)线性查找算法 示例: 有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称【顺序查找】 要求: 如果找到了&a…

Exchange Server 2007邮箱存储服务器的集群和高可用性技术(上)

高可用性矩阵-->见下图:邮箱服务器高可用性目标: 数据可用性-->保护邮箱数据免于失败和损坏服务可用性-->提高群集实效转移操作 简化群集管理 支持地理分散的群集 支持低成本大邮箱(GB)使用户可以基于业务需要更好的选择容错方案提高解决方案的可用性使用解决方案可…

html设置按钮样式变为椭圆,css border-radius圆形变为椭圆形,位置:绝对

我正在围绕字体真棒图标创建一个圆圈。我的问题是,当我添加position: absolute圆成为一个椭圆。css border-radius圆形变为椭圆形,位置:绝对同样的情况,如果我是设置display: block这里是什么,我想实现的图像 -CONRADU…

《火球——UML大战需求分析》(第1章 大话UML)——1.5 小结和练习

说明: 《火球——UML大战需求分析》是我撰写的一本关于需求分析及UML方面的书,我将会在CSDN上为大家分享前面几章的内容,总字数在几万以上,图片有数十张。欢迎你按文章的序号顺序阅读,谢谢!本书已经在各大网…

金陵科技学院计算机开设课程,金陵科技学院各专业介绍

各专业介绍会计学专业(四年制本科) 金融学专业(四年制本科)财务管理专业(四年制本科) 国际经济与贸易专业(四年制本科)市场营销专业(四年制本科)国际商务专业(三年制专科)物流管理专业(三年制专科) 对外汉语专业(四年制本科)古典文献(古籍修复)专业(四年制本科)行政管理(高级秘…

【jQuery Demo】图片由下至上逐渐显示

无意中看到如何实现一张图片从下往上慢慢显现出来这个问题,弄了半天还是从上往下的效果,纠结了,最后还是提问人自己搞定了!不过哈哈,又学到一点知识! 1.下面是我自己做的效果(按钮可以点哦) 图片由下至上逐…

两个数之和等于第三个数

这是一个很好的算法题,解法类似于快速排序的整理方法。同时,更为值得注意的是这道题是 人人网2014校园招聘的笔试题,下面首先对题目进行描述: 给出一个有序数组,另外给出第三个数,问是否能在数组中找到两个…

html标题前色块,CSS轻松实现色块标题标识

不少网站开始采用韩式风格来建站,这种风格的特点是色彩变化丰富、应用Flash动画合理、结构新颖,最明显的特点就是表格或标题栏常会加上一条横或竖的色带,如图1中圈起来的地方就是这样。(图一)一般人都会想到用Photoshop等软件来完成这样的效果…

101与金根回顾敏捷个人:(13)敏捷个人和敏捷开发

本文更新版本已挪至 http://www.zhoujingen.cn/blog/1726.html ------------------------- 敏捷个人源于工作 自2001初成立了敏捷联盟到现在10年的推广,敏捷开发已日渐成为当前IT行业软件开发的一种主流方法。没有银弹,任何方法都不可能解决所有问题&a…

Exchange server 2010系列教程之三 发送邮件测试

最近有些忙,好几天没有上来写教程了,接着往下写吧。就当是自己的学习笔记,呵呵,有不到之处,还请大家多多指教。 上一篇我们已经把服务器架设好了,那么我们来测试一下发送邮件。 1.首先在AD DC上面新建一个域…

华科的计算机和建筑学哪个强,华中科技大学和华南理工大学相比,谁更占优势?看了也许就知道了...

大学是学生接受教育的过程中非常重要的一个阶段,很多学生都会尽可能在高考中,考出更好的成绩,争取报考一个更好的大学。为了提升教育水平,我国到目前为止建设了超过3000所大学,其中有很多高等院校非常相似,…

uic计算机课程表,美国UIC大学研究生毕业率能达到多少?申请条件、专业课程汇总...

UIC大学也就是伊利诺伊大学芝加哥分校,这所学校始建于1982年,该校拥有东、西两个校区,皆位于美国第二大商业中心芝加哥市的心脏地带,地理位置优势显著,UIC大学有着丰富的教学资源和出色的教学水准,那么接下…

Tegra3 vSMP架构Android运行时CPU热插拔及高低功耗CPU切换

Tegra3采用vSMP(VariableSymmetric Multiprocessing)架构,共5个cortex-a9处理器,其中4个为高性能设计,1个为低功耗设计: 在系统运行过程中,会根据CPU负载切换低功耗处理器和高功耗处理器&#x…

近5年133个Java面试问题列表

2019独角兽企业重金招聘Python工程师标准>>> Java 面试随着时间的改变而改变。在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入。 在我初…

PowerShell与活动目录

自从发布以来,Windows PowerShell已经成为Windows自动化平台的选择。它的强大和灵活已经在许多环境中被许多Windows技术所证明。不幸的是,在活动目录支持方面,PowerShell 1并没有什么可以炫耀。从基础角度,微软提供了ADSI“类型加…