爬虫的智能化解析之使用Diffbot自动解析页面

     什么是爬虫的智能化解析呢?顾名思义就是自动解析页面,不在慢慢一个网站一个网站的写解析规则,我们可以利用一些算法来计算出来页面上的特定元素的位置和样式。

     前面我做过一个爬取小说网站的爬虫,平常我写的爬虫的话,要根据不同的网站,编写不同的提取规则,才能提取出想要的内容。而如果使用智能化解析的话,不论是那个网站,你只需要把网页的url传递给他,就可以通过算法智能识别出标题,内容,更新时间等信息,而不需要重复编写提取规则。
     这方面的算法服务的话,diffbot应该算是目前做的最好的了,这家公司一直致力于页面解析,解析的准确度也很高。但可惜的是他们的算法并不开源,所以我们只能使用他们公司的服务。
这些理论都可以百度,我还是直接上一个示例吧。

注册账号

首先我们使用Diffbot的服务的话要先注册一个账号,它有15天的免费使用期。
Diffbot官网
在这里插入图片描述
在如图所示位置,需要填写你的邮箱,注册后它会向邮箱中发送一个token,每次调用Diffbot的服务的时候都需要这个服务凭证。点击后面的按钮后会跳到这个页面
在这里插入图片描述
在这里只需要根据要求把它带*号的内容填写完整就行了,然后点击下面蓝色的按钮,它会有一个机器人验证(貌似要搭梯子打开才会出现验证),验证通过了再点一次就注册成功了。
登录上之后先来尝试一下它的测试功能吧。

测试页面

打开测试页面:https://www.diffbot.com/dev/home/在这里插入图片描述
例如我抓取一个小说页面,得到的结果是这样:在这里插入图片描述
看到没有,小说章节的标题,和内容都解析出来了。而在这过程中,我并没有写任何的解析代码。

Diffbot API

刚刚在网页上的解析只是提供给你测试用的,那么我们在python代码中应该怎样使用呢?看下面代码:

import requests, json
# api调用地址
url = 'https://api.diffbot.com/v3/article'

# 传递的参数
params = {
    'token': '8173ecdcb07374d33e34ab803a06719d', # Developer Token,注册成功后会发送到你的邮箱
    'url': 'https://www.booktxt.com/0_24/107339.html', # 爬取的目标网页的url
    'fields': 'meta' # 可选参数,制定返回的字段
}
# 使用get方式请求,返回解析后的内容
response = requests.get(url, params=params)
# 打印解析出来的内容
print(response.json())

返回的结果:

{'request': {'pageUrl': 'https://www.booktxt.com/0_24/107339.html',
  'api': 'article',
  'fields': 'meta',
  'version': 3},
 'objects': [{'breadcrumb': [{'link': 'https://www.booktxt.com/',
     'name': '顶点小说'},
    {'link': 'https://www.booktxt.com/xuanhuan/', 'name': '玄幻小说'},
    {'link': 'https://www.booktxt.com/0_24/', 'name': '圣墟'}],
   'humanLanguage': 'zh',
   'meta': {'description': '顶点小说提供圣墟(辰东)第一章 沙漠中的彼岸花在线阅读,所有小说均免费阅读,努力打造最干净的阅读环境,24小时不间断更新,请大家告诉更多的小说迷。',
    'keywords': '第一章 沙漠中的彼岸花,辰东,圣墟',
    'title': '圣墟_辰东_第一章 沙漠中的彼岸花 - 顶点小说'},
   'diffbotUri': 'article|3|-982846652',
   'siteName': 'booktxt.com',
   'pageUrl': 'https://www.booktxt.com/0_24/107339.html',
   'html': '<p>大漠孤烟直,长河落日圆。</p>\n<p>一望无垠的大漠,空旷而高远,壮阔而雄浑,当红日西坠,地平线尽头一片殷红,磅礴中亦有种苍凉感。</p>\n<p>上古的烽烟早已在岁月中逝去,黄河古道虽然几经变迁,但依旧在。</p>\n<p>楚风一个人在旅行,很疲惫,他躺在黄沙上,看着血色的夕阳,不知道还要多久才能离开这片大漠。</p>\n<p>数日前他毕业了,同时也跟校园中的女神说再见,或许见不到了吧,毕竟他曾被委婉的告知,从此天各一方,该分手了。</p>\n<p>离开学院后,他便出来旅行。</p>\n<p>落日很红,挂在大漠的尽头,在空旷中有一种宁静的美。</p>\n<p>楚风坐起来喝了一些水,感觉精力恢复了不少,他的身体属于修长强健那一类型,体质非常好,疲惫渐消退。</p>\n<p>站起来眺望,他觉得快要离开大漠了,再走一段路程或许就会见到牧民的帐篷,他决定继续前行。</p>\n<p>一路西进,他在大漠中留下一串很长、很远的脚印。</p>\n<p>无声无息,竟起雾了,这在沙漠中非常罕见。</p>\n<p>楚风惊讶,而这雾竟然是蓝色的,在这深秋季节给人一种凉意。</p>\n<p>不知不觉间,雾霭渐重,蓝色缭绕,朦朦胧胧,笼罩了这片沙漠。</p>\n<p>大漠尽头,落日都显得有些诡异了,渐渐化成一轮蓝日,有种魔性的美,而火云也被染成了蓝色。</p>\n<p>楚风皱眉,虽然他知道,沙漠的天气最是多变,但眼前实在不太正常。</p>\n<p>一片寂静,他停下脚步。</p>\n<p>在进大漠前,他曾听当地的老牧民讲过,一个人走在沙漠中,有时会听到一些古怪的声音,会见到一些奇异的东西,要格外谨慎。</p>\n<p>当时他并未在意。</p>\n<p>依旧宁静,沙漠中除却多了一层朦胧的蓝雾,并没有其他变故发生,楚风加快脚步,他想尽快离开这里。</p>\n<p>大漠的尽头,落日蓝的妖异,染蓝了西部的天空,不过它终究快要消失在地平线上了。</p>\n<p>楚风的速度越来越快,开始奔跑,他不想呆在这种诡异、充满不确定性的地方。</p>\n<p>在沙漠中,海市蜃楼那样的奇景多发生在烈日当空下,眼下不相符,这不像是什么蜃景。</p>\n<p>突然,前面传来轻响,像是有什么东西破沙而出,而且声音很密集,此起彼伏。</p>\n<p>楚风倏地停下脚步,盯着沙漠,前方地面蓝光星星点点,像是散落一地蓝钻,晶莹透亮,在落日的余晖中闪耀着。</p>\n<p>那是一棵又一棵嫩苗,不足一寸高,自沙漠中破土而出,带着美丽的光泽,剔透而妖异,遍地皆是。</p>\n<p>短暂的停滞,随后沙沙声成片,蓝色灿灿,所有嫩苗都快速拔高,一瞬间生长起来。</p>\n<p>天边,蓝日下沉,即将消失,雾气弥漫,浩瀚的大漠如同披上了一层诡异的蓝色薄纱。</p>\n<p>&ldquo;啵!&rdquo;</p>\n<p>花朵绽放的声音传出,沙漠中一片湛蓝,在夕阳即将消失的刹那,这些植物开始绽放出成片的花朵。</p>\n<p>大量的蓝花,晶莹点点,犹若梦幻,有些醉人,遍开在沙漠中,非常不真实。</p>\n<p>这种植物一尺多高,通体如蓝珊瑚般透亮,花瓣一条条,妖艳而迷人,宛若盛放在另一片国度,带着魔性,吸引人的心神。</p>\n<p>楚风退后一步,然而,身后也已满是这种植物,蓝光流动,一眼望不到边。</p>\n<p>他很吃惊,仔细的看着,努力辨认,这像极了彼岸花,一条条花瓣展开,又向后弯曲,极其美丽。</p>\n<p>不过,彼岸花红的鲜艳,而它却是蓝色的,从未听闻有蓝色彼岸花。</p>\n<p>彼岸花真实存在,带着浓烈的宗教色彩,关于它有太多的传说,但楚风不信这些,只为眼前的景象而惊。</p>\n<p>沙漠干燥、缺水,只有极其稀少的耐旱植物偶尔可见,零星散落着。而彼岸花喜欢阴森、潮湿的环境,无论如何也不该在这里出现,还如此的妖艳。</p>\n<p>这里遍地都是,一眼望不到尽头。</p>\n<p>大漠浩瀚,薄雾染蓝了落日,浸透了天边,而整片空旷无垠的沙漠都生出蓝色的彼岸花,说不出的奇异、神秘!</p>\n<p>一缕淡淡的芬芳飘漾,让人沉迷。</p>\n<p>楚风用力摇头,小心的迈步,避开这些花,他发现只有一个地带没有这种植物,那就是&mdash;&mdash;&mdash;黄河古道。</p>\n<p>在岁月中多次变迁,几经改道,它贯穿这片大漠,如今已近干涸,蓝色彼岸花开遍两岸,拥簇着它。</p>\n<p>花开两岸,彼此遥见。</p>\n<p>终于,太阳沉下去了,而也正是在此时,这些植物盛放,花开到极致,化作蓝色的海洋,流光溢彩。</p>\n<p>虽然暮色降临,但这里蓝色光泽缭绕,极致炫目,艳丽的出奇。</p>\n<p>楚风站在黄河古道上,心中无法宁静,但是他却不作停留,沿河道快速前进。</p>\n<p>天色渐暗,最后的落日余晖也已不见了。</p>\n<p>蓝色的大漠光彩点点,而后突然间,砰然一声,所有蓝色彼岸花怒放后,竟然在一瞬间同时凋零。</p>\n<p>妖艳的花瓣枯萎,接着整株的植物开始干枯,它们失去色彩,耗尽生机,迅速发黄,而后碎裂,像是在一瞬间失去了数十年。</p>\n<p>&ldquo;砰!&rdquo;</p>\n<p>最后的刹那,遍地干枯的蓝色彼岸花寸寸断裂,化成了粉末。</p>\n<p>这诡异的景象,很难解释。</p>\n<p>它们如同烟花般,短暂的绚烂,美丽到极致,而后便凋零,成为灰烬。</p>\n<p>枯黄的粉末落在沙地间,在暮色中很难辨出,而此时蓝雾也早已消失,大漠恢复了原样,像是什么都不曾发生过,再次宁静。</p>\n<p>楚风没有驻足,大步前行,在暮色中,他翻过许多座沙丘,终于见到了地平线上的山影,要离开大漠了。</p>\n<p>天色渐黑,他终于走出来了,清晰的看到了山地,也隐约间看到了山脚下牧民的帐篷。</p>\n<p>再回头时,身后大漠浩瀚,很寂静,跟平日没什么两样。</p>\n<p>山地前方,灯火摇曳,离山脚下还较远时就听到了一些嘈杂声,那里不平静,像是有什么事情正在发生。</p>\n<p>此外,还有牛羊等牲畜惶恐的叫声,以及藏獒沉闷的低吼声。</p>\n<p>有异常之事吗?楚风加快脚步,赶到山脚下,临近牧民的栖居地。</p>',
   'text': '大漠孤烟直,长河落日圆。\n一望无垠的大漠,空旷而高远,壮阔而雄浑,当红日西坠,地平线尽头一片殷红,磅礴中亦有种苍凉感。\n上古的烽烟早已在岁月中逝去,黄河古道虽然几经变迁,但依旧在。\n楚风一个人在旅行,很疲惫,他躺在黄沙上,看着血色的夕阳,不知道还要多久才能离开这片大漠。\n数日前他毕业了,同时也跟校园中的女神说再见,或许见不到了吧,毕竟他曾被委婉的告知,从此天各一方,该分手了。\n离开学院后,他便出来旅行。\n落日很红,挂在大漠的尽头,在空旷中有一种宁静的美。\n楚风坐起来喝了一些水,感觉精力恢复了不少,他的身体属于修长强健那一类型,体质非常好,疲惫渐消退。\n站起来眺望,他觉得快要离开大漠了,再走一段路程或许就会见到牧民的帐篷,他决定继续前行。\n一路西进,他在大漠中留下一串很长、很远的脚印。\n无声无息,竟起雾了,这在沙漠中非常罕见。\n楚风惊讶,而这雾竟然是蓝色的,在这深秋季节给人一种凉意。\n不知不觉间,雾霭渐重,蓝色缭绕,朦朦胧胧,笼罩了这片沙漠。\n大漠尽头,落日都显得有些诡异了,渐渐化成一轮蓝日,有种魔性的美,而火云也被染成了蓝色。\n楚风皱眉,虽然他知道,沙漠的天气最是多变,但眼前实在不太正常。\n一片寂静,他停下脚步。\n在进大漠前,他曾听当地的老牧民讲过,一个人走在沙漠中,有时会听到一些古怪的声音,会见到一些奇异的东西,要格外谨慎。\n当时他并未在意。\n依旧宁静,沙漠中除却多了一层朦胧的蓝雾,并没有其他变故发生,楚风加快脚步,他想尽快离开这里。\n大漠的尽头,落日蓝的妖异,染蓝了西部的天空,不过它终究快要消失在地平线上了。\n楚风的速度越来越快,开始奔跑,他不想呆在这种诡异、充满不确定性的地方。\n在沙漠中,海市蜃楼那样的奇景多发生在烈日当空下,眼下不相符,这不像是什么蜃景。\n突然,前面传来轻响,像是有什么东西破沙而出,而且声音很密集,此起彼伏。\n楚风倏地停下脚步,盯着沙漠,前方地面蓝光星星点点,像是散落一地蓝钻,晶莹透亮,在落日的余晖中闪耀着。\n那是一棵又一棵嫩苗,不足一寸高,自沙漠中破土而出,带着美丽的光泽,剔透而妖异,遍地皆是。\n短暂的停滞,随后沙沙声成片,蓝色灿灿,所有嫩苗都快速拔高,一瞬间生长起来。\n天边,蓝日下沉,即将消失,雾气弥漫,浩瀚的大漠如同披上了一层诡异的蓝色薄纱。\n“啵!”\n花朵绽放的声音传出,沙漠中一片湛蓝,在夕阳即将消失的刹那,这些植物开始绽放出成片的花朵。\n大量的蓝花,晶莹点点,犹若梦幻,有些醉人,遍开在沙漠中,非常不真实。\n这种植物一尺多高,通体如蓝珊瑚般透亮,花瓣一条条,妖艳而迷人,宛若盛放在另一片国度,带着魔性,吸引人的心神。\n楚风退后一步,然而,身后也已满是这种植物,蓝光流动,一眼望不到边。\n他很吃惊,仔细的看着,努力辨认,这像极了彼岸花,一条条花瓣展开,又向后弯曲,极其美丽。\n不过,彼岸花红的鲜艳,而它却是蓝色的,从未听闻有蓝色彼岸花。\n彼岸花真实存在,带着浓烈的宗教色彩,关于它有太多的传说,但楚风不信这些,只为眼前的景象而惊。\n沙漠干燥、缺水,只有极其稀少的耐旱植物偶尔可见,零星散落着。而彼岸花喜欢阴森、潮湿的环境,无论如何也不该在这里出现,还如此的妖艳。\n这里遍地都是,一眼望不到尽头。\n大漠浩瀚,薄雾染蓝了落日,浸透了天边,而整片空旷无垠的沙漠都生出蓝色的彼岸花,说不出的奇异、神秘!\n一缕淡淡的芬芳飘漾,让人沉迷。\n楚风用力摇头,小心的迈步,避开这些花,他发现只有一个地带没有这种植物,那就是———黄河古道。\n在岁月中多次变迁,几经改道,它贯穿这片大漠,如今已近干涸,蓝色彼岸花开遍两岸,拥簇着它。\n花开两岸,彼此遥见。\n终于,太阳沉下去了,而也正是在此时,这些植物盛放,花开到极致,化作蓝色的海洋,流光溢彩。\n虽然暮色降临,但这里蓝色光泽缭绕,极致炫目,艳丽的出奇。\n楚风站在黄河古道上,心中无法宁静,但是他却不作停留,沿河道快速前进。\n天色渐暗,最后的落日余晖也已不见了。\n蓝色的大漠光彩点点,而后突然间,砰然一声,所有蓝色彼岸花怒放后,竟然在一瞬间同时凋零。\n妖艳的花瓣枯萎,接着整株的植物开始干枯,它们失去色彩,耗尽生机,迅速发黄,而后碎裂,像是在一瞬间失去了数十年。\n“砰!”\n最后的刹那,遍地干枯的蓝色彼岸花寸寸断裂,化成了粉末。\n这诡异的景象,很难解释。\n它们如同烟花般,短暂的绚烂,美丽到极致,而后便凋零,成为灰烬。\n枯黄的粉末落在沙地间,在暮色中很难辨出,而此时蓝雾也早已消失,大漠恢复了原样,像是什么都不曾发生过,再次宁静。\n楚风没有驻足,大步前行,在暮色中,他翻过许多座沙丘,终于见到了地平线上的山影,要离开大漠了。\n天色渐黑,他终于走出来了,清晰的看到了山地,也隐约间看到了山脚下牧民的帐篷。\n再回头时,身后大漠浩瀚,很寂静,跟平日没什么两样。\n山地前方,灯火摇曳,离山脚下还较远时就听到了一些嘈杂声,那里不平静,像是有什么事情正在发生。\n此外,还有牛羊等牲畜惶恐的叫声,以及藏獒沉闷的低吼声。\n有异常之事吗?楚风加快脚步,赶到山脚下,临近牧民的栖居地。',
   'type': 'article',
   'title': '第一章 沙漠中的彼岸花'}]}

以上就是我们调用API后返回的解析内容,是不是把文章标题,内容,还有跟新时间都准确的解析出来了。
关于更多操作可以查看官方的API文档(https://www.diffbot.com/dev/docs/article/)
这里列举几个常用的可选参数:

  • fields: 用来制定返回那些字段,默认已经有了一些固定字段,还可以制定额外返回那些可选字段。
  • paging:如果是多页文章,将这个参数设置为Fasle则可以禁止多页内容拼接。
  • maxTags: 可以设置返回的Tag最大数,默认是10个。
  • tagConfidence: 设置置信度的阈值,超过这个值的tag才会被返回,默认是0.5.
  • discussion: 如果将这个参数设置为False,那么就不会解析评论的内容。
  • timeout: 解析最大时间,默认是30秒。
  • callback: 为JSONP类型的请求而设计的回调。
    关于fields字段,专门列举一下里面的参数:
    首先是一些固定字段
  • type: 文本的类型,这里就是article。
  • title: 文章的标题。
  • text: 文章的纯文本内容,如果有分段内容,就会以换行符来表示。
  • html: 提取结果的html内容
  • data: 文章的发布时间,其格式为PFC1123
  • estimateDate: 如果日期时间不太明确,就会返回一个预估时间,如果文章超过两天或者没有发布如期,那么这个字段就不会返回。
  • author: 作者。
  • authorUrl: 作者链接。
  • discussion: 评论内容。
  • humanLanguage: 语言类型。
  • numPage: 如果文章是多页的,这个参数会控制最大的翻页拼接数目。
  • nextPages: 如果文章是多页的,这个参数可以指定文章的后续链接。
  • siteName: 站点名称。
  • publisherRegion: 文章的发布地区。
  • publisherCountry: 文章的发布国家。
  • pageUrl: 文章的链接。
  • resolvedPageUrl: 如果文章是从pageUrl重定向过来的,则返回此内容。
  • tags:文章的标签或者文章包含的实体,根据自然语言处理技术和DBpedia计算生成,是一个列表,里面又包含了子字段:
  • label: 标签名。
  • count:标签出现的次数。
  • score: 标签的置信度。
  • rdfTypes:如果实体可以由多个资源表示,那么则返回相关的URL。
  • type: 类型。
  • uri:Diffbot Knowledge Graph中的实体链接。
  • images: 文章中包含的图片。
  • videos: 文章中包含的视屏。
  • breadcrumb: 面包屑导航信息。
  • diffbotUrl: Diffbot内部的URL链接。
    扩展的可选字段
  • quotes: 引用信息。
  • sentiment: 文章的情感值,-1到1之间。
  • links:所有超链接的顶级链接。
  • querystring: 请求的参数列表。
    搬运过程可能出错,准确内容参照官方的api文档!

另外Diffbot还提供了几乎所有语言的SDK,其实本质上就是调用了requests库。这里就不介绍了,下面附上链接:https://github.com/diffbot/diffbot-python-client
这个库并没有发布到pypi上,需要自己下载并导入才能用,有兴趣的可以下载来看一下。

@快乐是一切

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值