算法 自动采集列表(【每日一题】开心驿站为例叙述第一步)

优采云 发布时间: 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()

  报告摘要

  在这门课的过程中,我遇到了很多问题,有的已经解决了,有的还没有。优采云 是学习的课题。各种规则的编写和学习还有很长的路要走,会在以后的学习过程中逐渐积累。经验。

  去重的算法还存在不足,以后要继续研究。

  总之,我在这门课中学到了很多东西。尤其是在学习方法上,不懂的可以向别人请教,也可以通过其他渠道获取知识。学习是一项任重而道远的任务,自己的能力也遥不可及,以后的工作将更多地依靠团队合作。因此,我们必须更加重视合作的重要性。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线