算法 自动采集列表(【每日一题】开心驿站为例叙述第一步)
优采云 发布时间: 2021-12-23 06:01算法 自动采集列表(【每日一题】开心驿站为例叙述第一步)
陆涛,
李红
目的:通过熟悉优采云采集器的使用,把网上的30000个笑话整理出来,熟悉一些网络文本挖掘的知识。
过程:本研究主要分为两部分。第一部分是笑话文本的采集,第二部分是笑话的重新排序。以下是具体流程:
第一部分笑话提取
优采云挑笑话的基本流程:
新组 新任务 采集URL 设置 采集内容设置 捕获数据。
一、新建组和任务
根据需要设置“课程”分组,供以后在学习过程中练习和使用,并设置“笑话提取”子组。这个采集的笑话主要是关于两个网站《中国幽默王》和《欢乐驿站》。由于不同的网站html的功能框架不同,采集的不同框架的规则也不同,所以分为建立“快乐站”和“中国幽默王”两个任务。如图1所示
图 1 分组和任务
二、采集URL 和内容规则设置
由于这次采集是作为课程练习使用的,所以不涉及发布。因此,在任务编辑中只设置了第一步“采集 URL 规则”和第二步“采集 内容规则”。",如图2所示
图 2 编辑任务
以下学习过程介绍以欢乐客栈为例进行说明
第一步:采集 URL规则
先添加起始网址,然后再添加笑话网址采集 分为两种方式。
首先是在“添加起始采集地址”表单中设置“批量/多页”项,设置“算术序列”方法,即采集的笑话出自从第一页到最后一页,这些页码是等差数列,容差为 1,如图 3 所示。
图3 批量/多页设置
在《快乐邮报》上完整设置各种笑话,效果图如图3所示。
图4 起始网址效果图
当然,如果只使用这个设置,我们只能在一页上挑一个笑话。事实上,“快乐站”首页可以显示16个笑话,所以我们还需要设置“多级网址采集规则”。可以手动分析页面的html格式,然后填写规则。这里使用最简单的可视化Xpath方法来获取地址。如图5所示
图5
Xpath获取地址的方式
我们可以看到多级URL获取方式是get,如图6所示。
图6 多级URL设置效果图
二是不设置“批量/多页”,直接设置“多级URL获取”,先获取“快乐站”上各个分类的默认打开地址。
比如“校园笑话”,我们也用最简单的可视地址Xpath的方法来获取这些URL。Xpath 获取到的 URL 可能不是我们想要的 URL。比如list10-1和list13-1分别是图片和视频,所以我们可以进行如图7所示的“结果URL过滤”。
图 7 结果 URL 过滤设置
下一步是“列表页面访问”设置。这是每个类别的默认页面的下一页 采集。根据html中的格式,我们设置如图8所示。
图8 列表页面访问设置
至于每个页面采集到16个笑话的URL,这个和第一种方法一样。此处略过。
第二步采集内容规则
首先,我们要设计我们想要的记录属性。采集 笑话,我们需要“title”、“content”和“category”三个属性,如图9为内容标签定义
图 9 内容标签定义
每个标签特有的规则定义如图 10-13 所示:
图10 截取前后提取标题
图11
可视化提取内容
需要注意的是,在内容提取过程中,可能会保留一些html标签,或者不显示双引号、感叹号、省略号等。这时候我们可以根据需要排除html标签,替换一些字符。
图12
视觉提取和分类
图 13 规则测试
三、捕获数据
通过以上“URL采集规则”和“内容采集规则”的设置,就可以启动任务了。一段时间后,数据采集完成,我们可以右击任务,选择“打开数据下的任务文件夹”,然后我们就可以看到默认为Access的数据文件了,当然也可以转换成Excel格式。由于我们重新加载时数据输入使用的是Excel格式,因此我们将其转换为Excel格式。
笑话的第二部分
算法思路:这个笑话排序主要是从内容来判断。使用MD5摘要算法,我们选取第一句前后7个字符进行MD5编码运算,即中文“.”。和英文“.” 前面的4个和后面的两个加上自己的7个字符进行MD5操作。没有中国时期。并且英语时期暂时确定不再重复。然后比较每个笑话的前七个字符的MD5代码。根据“选择
*,count(distinct Md5)from mo1 group by Md5" 将排除与现有笑话重复的笑话。
算法描述:MD5以512位为单位对输入进行变换,最终以32位为单位输出4个压缩信息组。根据运算结果的唯一性,我们可以对每个笑话的第一个时期的前7个字符进行相同的MD5运算,比较后检查它们是否相同。
MD5流程说明如图14所示
图14 MD5流程
算法实现:
1、输入
导入 MySQL 数据库
导入 xlrd
conn = MySQLdb.connect(host='localhost', user='root'
,passwd='root' ,db='joke' ,use_unicode=True
,charset='utf8')
游标 = conn.cursor()
data = xlrd.open_workbook('E:\joke1.xls')
table = data.sheets()[0]
cursor.execute("select *,count(distinct Md5)from mo1 group by
Md5;")
行 = cursor.fetchall()
对于行中的行:
k = 行[0]
一 =
int(table.cell(k,0).value)
乙 =
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
克 =
table.cell(k,6).value
sql = "插入 jo1
值(%s,%s,%s,%s,%s,%s,%s)"
cursor.execute(sql,(a,b,c,d,e,f,g))
游标.close()
mit()
2、MD5算法代码实现
# -*- 编码:UTF-8 -*-
导入 xlrd
*敏*感*词*重新
导入哈希库
导入 MySQL 数据库
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')
游标 = conn.cursor()
对于范围内的 n(1,table.nrows):
一 =
table.cell(n,4).value
打印 n
医学博士
=''
因为我在
范围(len(a)):
s =''
如果 a[i] == u'.':
打印
[i]
如果我==
len(a)-1:
j = len(a)
elif 我 ==
len(a)-2:
j = len(a)
别的:
j = i+3
对于 k
范围(j-7,j):
s = s+a[k]
米 =
hashlib.md5(s.encode("utf8"))
米 =
m.hexdigest()
休息
elif a[i] == u'。':
打印
[i]
如果我==
len(a)-1:
j = len(a)
elif 我 ==
len(a)-2:
j = len(a)
别的:
j = i+3
对于 k
范围(j-7,j):
s = s+a[k]
米 =
hashlib.md5(s.encode("utf8"))
米 =
m.hexdigest()
休息
如果 md =='':
md = str(n)
sql = "插入到 mo1
值(%s,%s)"
cursor.execute(sql,(n,md))
游标.close()
mit()
报告摘要
在这门课的过程中,我遇到了很多问题,有的已经解决了,有的还没有。优采云 是学习的课题。各种规则的编写和学习还有很长的路要走,会在以后的学习过程中逐渐积累。经验。
去重的算法还存在不足,以后要继续研究。
总之,我在这门课中学到了很多东西。尤其是在学习方法上,不懂的可以向别人请教,也可以通过其他渠道获取知识。学习是一项任重而道远的任务,自己的能力也遥不可及,以后的工作将更多地依靠团队合作。因此,我们必须更加重视合作的重要性。