社会化海量数据采集爬虫框架搭建

随着BIGDATA大数据概念逐渐升温,如何搭建一个能够采集海量数据的架构体系摆在大家眼前。如何能够做到所见即所得的无阻拦式采集、如何快速把不规则页面结构化并

随着big data大数据概念逐渐升温,如何搭建一个能够采集海量数据的架构体系摆在大家眼前。如何能够做到所见即所得的无阻拦式采集、如何快速把不规则页面结构化并存储、如何满足越来越多的数据采集还要在有限时间内采集。这篇文章结合我们自身项目经验谈一下。

我们来看一下作为人是怎么获取网页数据的呢?

1、打开浏览器,输入网址url访问页面内容。
2、复制页面内容的标题、作者、内容。
3、存储到文本文件或者excel。

从技术角度来说整个过程主要为 网络访问、扣取结构化数据、存储。我们看一下用java程序如何来实现这一过程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

mainargs
HttpClient

                       content

HttpException e
e

}
}
}

通过这个例子,我们看到通过httpclient获取数据,通过字符串操作扣取标题内容,然后通过system.out输出内容。大家是不是感觉做一个爬虫也还是蛮简单呢。这是一个基本的入门例子,我们再详细介绍怎么一步一步构建一个分布式的适用于海量数据采集的爬虫框架。

整个框架应该包含以下部分,资源管理、反监控管理、抓取管理、监控管理。看一下整个框架的架构图:

社会化海量数据抓取组件图

资源管理指网站分类体系、网站、网站访问url等基本资源的管理维护;

反监控管理指被访问网站(特别是社会化媒体)会禁止爬虫访问,怎么让他们不能监控到我们的访问时爬虫软件,美国服务器,这就是反监控机制了;

集简云 集简云

软件集成平台,快速建立企业自动化与智能化

集简云 22 查看详情 集简云

一个好的采集框架,不管我们的目标数据在哪儿,只要用户能够看到都应该能采集到。所见即所得的无阻拦式采集,无论是否需要登录的数据都能够顺利采集。现在大部分社交网站都需要登录,为了应对登录的网站要有模拟用户登录的爬虫系统,才能正常获取数据。不过社会化网站都希望自己形成一个闭环,不愿意把数据放到站外,这种系统也不会像新闻等内容那么开放的让人获取。这些社会化网站大部分会采取一些限制防止机器人爬虫系统爬取数据,一般一个账号爬取不了多久就会被检测出来被禁止访问了。那是不是我们就不能爬取这些网站的数据呢?肯定不是这样的,只要社会化网站不关闭网页访问,正常人能够访问的数据,我们也能访问。说到底就是模拟人的正常行为操作,专业一点叫“反监控”。

那一般网站会有什么限制呢?

一定时间内单IP访问次数,没有哪个人会在一段持续时间内过快访问,除非是随意的点着玩,持续时间也不会太长。可以采用大量不规则代理IP来模拟。

一定时间内单账号访问次数,这个同上,正常人不会这么操作。可以采用大量行为正常的账号,行为正常就是普通人怎么在社交网站上操作,如果一个人一天24小时都在访问一个数据接口那就有可能是机器人了。

如果能把账号和IP的访问策略控制好了,基本可以解决这个问题了。当然对方网站也会有运维会调整策略,说到底这是一个战争,躲在电脑屏幕后的敌我双方,爬虫必须要能感知到对方的反监控策略进行了调整,通知管理员及时处理。未来比较理想应该是通过机器学习算法自动完成策略调整,保证抓取不间断。

抓取管理指通过url,结合资源、反监控抓取数据并存储;我们现在大部分爬虫系统,很多都需要自己设定正则表达式,或者使用htmlparser、jsoup等软件来硬编码解决结构化抓取的问题。不过大家在做爬虫也会发现,如果爬取一个网站就去开发一个类,在规模小的时候还可以接受,如果需要抓取的网站成千上万,那我们不是要开发成百上千的类。为此我们开发了一个通用的抓取类,可以通过参数驱动内部逻辑调度。比如我们在参数里指定抓取新浪微博,抓取机器就会调度新浪微博网页扣取规则抓取节点数据,调用存储规则存储数据,不管什么类型最后都调用同一个类来处理。对于我们用户只需要设置抓取规则,相应的后续处理就交给抓取平台了。

整个抓取使用了 xpath、正则表达式、消息中间件、多线程调度框架(参考)。xpath 是一种结构化网页元素选择器,支持列表和单节点数据获取,他的好处可以支持规整网页数据抓取。我们使用的是google插件 XPath Helper,这个玩意可以支持在网页点击元素生成xpath,就省去了自己去查找xpath的功夫,也便于未来做到所点即所得的功能。正则表达式补充xpath抓取不到的数据,还可以过滤一些特殊字符。消息中间件,起到抓取任务中间转发的目的,避免抓取和各个需求方耦合。比如各个业务系统都可能抓取数据,只需要向消息中间件发送一个抓取指令,抓取平台抓完了会返回一条消息给消息中间件,业务系统在从消息中间件收到消息反馈,整个抓取完成。多线程调度框架之前提到过,我们的抓取平台不可能在同一时刻只抓一个消息的任务;也不可能无限制抓取,这样资源会耗尽,导致恶性循环。这就需要使用多线程调度框架来调度多线程任务并行抓取,并且任务的数量,保证资源的消耗正常。

不管怎么模拟总还是会有异常的,这就需要有个异常处理模块,有些网站访问一段时间需要输入验证码,如果不处理后续永远返回不了正确数据。我们需要有机制能够处理像验证码这类异常,简单就是有验证码了人为去输入,高级一些可以破解验证码识别算法实现自动输入验证码的目的。

扩展一下 :所见即所得我们是不是真的做到?规则配置也是个重复的大任务?重复网页如何不抓取?

1、有些网站利用js生成网页内容,直接查看源代码是一堆js。 可以使用mozilla、webkit等可以解析浏览器的工具包解析js、ajax,不过速度会有点慢。
2、网页里有一些css隐藏的文字。使用工具包把css隐藏文字去掉。
3、图片flash信息。 如果是图片中文字识别,这个比较好处理,能够使用ocr识别文字就行,如果是flash目前只能存储整个url。
4、一个网页有多个网页结构。如果只有一套抓取规则肯定不行的,需要多个规则配合抓取。
5、html不完整,网站空间,不完整就不能按照正常模式去扣取。这个时候用xpath肯定解析不了,我们可以先用htmlcleaner清洗网页后再解析。
6、 如果网站多起来,规则配置这个工作量也会非常大。如何帮助系统快速生成规则呢?首先可以配置规则可以通过可视化配置,比如用户在看到的网页想对它抓取数据,只需要拉开插件点击需要的地方,规则就自动生成好了。另在量比较大的时候可视化还是不够的,可以先将类型相同的网站归类,再通过抓取的一些内容聚类,可以统计学、可视化抓取把内容扣取出几个版本给用户去纠正,最后确认的规则就是新网站的规则。这些算法后续再讲。
7、对付重复的网页,如果重复抓取会浪费资源,如果不抓需要一个海量的去重判断缓存。判断抓不抓,抓了后存不存,并且这个缓存需要快速读写。常见的做法有bloomfilter、相似度聚合、分类海明距离判断。

监控管理指不管什么系统都可能出问题,如果对方服务器宕机、网页改版、更换地址等我们需要第一时间知道,这时监控系统就起到出现了问题及时发现并通知联系人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/521979.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 06:02:10
下一篇 2025年11月9日 06:07:06

相关推荐

  • 无XHR请求时提取JavaScript动态生成内容的教程

    本教程探讨了在爬取网页时,当目标内容由javascript动态生成且无明显xhr请求时的数据提取策略。我们将揭示数据可能已内嵌于初始html或js代码中,并演示如何通过检查页面源代码、识别关键标识符来定位并提取这些隐藏的json格式数据,从而实现高效的网页内容抓取。 挑战:JavaScript动态内…

    2025年12月6日 web前端
    000
  • 拼多多全自动采集软件是真的吗?采集软件哪个好? 解析功能可能、法律风险与技术限制,揭秘如何筛选合法、稳定、好用的采集工具!

    一、拼多多全自动采集软件真的存在吗? 1. 技术上的可行性分析 所谓拼多多全自动采集软件,通常指的是能够自动从拼多多平台抓取商品数据的程序工具。从技术角度来看,这类软件在一定程度上是可行的。它们一般通过模拟用户浏览行为或发送HTTP请求的方式,提取页面中的公开信息,如商品名称、价格、销量、评价等。部…

    2025年12月4日
    000
  • GolangHTTP请求限流与并发控制方法

    答案:Golang中通过golang.org/x/time/rate实现令牌桶限流,结合缓冲channel作为信号量控制并发数,利用sync.WaitGroup管理任务生命周期,并辅以context超时机制,共同保障服务稳定性。 在Golang中,HTTP请求的限流和并发控制是构建健壮、高可用服务的…

    2025年12月3日 后端开发
    000
  • Golang net/url解析与构建URL实践

    使用net/url包可安全解析和构建URL。1. 用url.Parse()提取Scheme、Host、Path等字段;2. 通过Query()获取参数并用Get/Set/Add操作值,Encode()自动编码;3. 手动构建URL需设置Scheme、Host、Path及RawQuery;4. Res…

    2025年12月2日 后端开发
    000
  • 如何使用Golang开发简单的爬虫项目

    答案:Golang爬虫需发送请求、解析HTML、设置请求头防封、保存数据。使用net/http发起GET请求,goquery解析页面内容,自定义User-Agent和延时控制频率,数据可存为JSON或数据库,适合高并发扩展。 用Golang开发简单的爬虫项目并不复杂,主要依赖标准库和一些第三方包来完…

    2025年12月2日 后端开发
    000
  • Golang并发任务执行与性能优化实践

    使用工作池模式控制并发数,通过固定worker协程消费带缓冲channel中的任务,避免无限制创建goroutine导致资源耗尽,提升系统稳定性与性能。 在高并发场景下,Golang凭借其轻量级的goroutine和高效的调度机制,成为构建高性能服务的首选语言之一。但在实际开发中,若不加控制地使用并…

    2025年12月2日 后端开发
    000
  • 如何使用Golang处理网络超时

    使用context和net.Dialer设置超时是Go网络编程核心,通过context.WithTimeout控制请求总时长,结合http.Client的Transport字段精细管理各阶段超时,如连接、TLS握手等,确保应用在异常网络中稳定运行。 处理网络超时是Golang中构建健壮网络应用的关键…

    2025年12月2日 后端开发
    000
  • Go语言中处理无协议(Scheme-less)URL的实践指南

    本文探讨了在Go语言中处理无协议(如//example.com)URL的有效方法。当进行网络请求时,这类URL会引发错误。教程详细介绍了如何利用net/url包解析并智能地为这些URL补充默认协议(如HTTP或HTTPS),从而确保net/http客户端能够成功发起请求,特别适用于构建代理或爬虫应用…

    2025年12月2日 后端开发
    000
  • Go语言中处理缺失协议(Scheme)的URL:实践与解析

    在Go语言进行网络编程时,经常会遇到缺少协议(如http:或https:)的URL,例如//www.example.com。本文将深入探讨这类“协议相对URL”的解析机制,并提供一种在Go中通过net/url包检测并动态补充默认协议(如http或https)的有效方法,确保HTTP请求能够正确执行,…

    2025年12月2日 后端开发
    000
  • Go语言中处理协议相对URL的实践

    本文探讨在Go语言中处理缺乏协议(如http:或https:)的URL(即协议相对URL)的方法。在代理或爬虫开发中,这类URL常导致http.Client请求失败。核心解决方案是利用net/url包解析URL,并在检测到缺失协议时,为其指定一个合理的默认协议(如http或https),从而确保能够…

    2025年12月2日 后端开发
    000
  • 《鸣潮》1.2版本全新新增角色一览

    《鸣潮》1.2版本强势来袭,全新角色震撼登场!本次更新为玩家带来两位个性鲜明的新角色,丰富游戏体验。让我们一睹为快! 折枝:才华横溢的画师 这位四星潜力角色,以画入道,将笔下的景象化为现实,其独特的战斗能力兼具策略性和观赏性。 折枝性格温婉,不善言辞,却对绘画充满热情与执着,这独特的个性在《鸣潮》的…

    2025年12月2日 行业动态
    000
  • Golang简单爬虫程序开发项目

    答案是使用Golang编写简单爬虫可通过net/http发起请求,结合golang.org/x/net/html解析HTML,提取标题和链接。程序首先发送HTTP请求获取网页内容,检查响应状态码后解析HTML文档,递归遍历节点获取title标签内容及所有a标签的href属性值并打印。基础版本为单页同…

    2025年12月2日 后端开发
    000
  • 如何使用 Go 的 http 包获取最终重定向 URL

    本文介绍了如何利用 Go 语言的 net/http 包来获取 HTTP 请求经过重定向后最终到达的 URL。通过检查 http.Response 结构体中的 Request.URL 字段,我们可以有效地获取到重定向后的最终 URL,从而简化了处理重定向的复杂性。 在进行网络请求时,服务器经常会进行重…

    2025年12月2日 后端开发
    000
  • Golang HTTP请求限流与并发控制项目

    使用令牌桶和信号量机制控制限流与并发,保障Golang HTTP服务稳定性。首先通过golang.org/x/time/rate实现每秒10个请求、突发50的令牌桶限流;接着用带缓冲channel(容量5)限制最大并发数,防止资源耗尽;最后结合IP级限流管理器,按IP维度分配独立令牌桶,并定期清理长…

    2025年12月2日 后端开发
    000
  • 微服务接口限流策略实践

    限流是微服务稳定性保障的核心手段,通过控制单位时间内的请求数量,防止突发流量、资源滥用和雪崩效应。常用算法包括计数器、滑动窗口、漏桶和令牌桶,其中令牌桶因支持突发流量且平滑控制,被广泛应用于Spring Cloud Gateway和Sentinel等主流框架。实际应用中需按API维度、用户级别进行差…

    2025年12月2日 后端开发
    000
  • Go语言中获取HTTP重定向后的最终目标URL

    go语言的`net/http`客户端会自动处理http重定向。要获取一系列重定向后的最终url,无需自定义`checkredirect`函数,只需访问`http.response`对象的`request.url`字段。这个字段存储了客户端最终成功访问的请求url,提供了一种简洁高效的方式来确定重定向…

    2025年12月2日 后端开发
    000
  • Golang 文件上传下载并发控制示例

    使用带缓冲channel控制并发,通过信号量限制最大goroutine数,避免资源耗尽。示例中以5个并发为限,封装ConcurrencyLimiter实现上传下载任务的可控执行,确保高并发下系统稳定。 在使用 Golang 实现文件上传和下载服务时,面对高并发场景,如果不加以控制,可能会导致内存暴涨…

    2025年12月2日 后端开发
    000
  • Go语言HTTP请求超时设置指南

    在go语言中,为`http.get`请求设置超时是提升应用响应性和稳定性的关键。本文将详细介绍如何通过配置`http.client`的`timeout`字段,为http请求设置自定义超时时间,从而避免因默认超时过长导致的性能问题,并提供实际代码示例,帮助开发者有效管理网络请求。 Go语言HTTP请求…

    2025年12月2日 后端开发
    000
  • Yandex搜索引擎官方直达链接_Yandex.ru一键快速访问入口

    Yandex搜索引擎官方直达链接是https://yandex.ru,该网站提供多语言搜索支持、集成地图邮箱云盘等服务,并拥有高效的网页信息抓取机制。 Yandex搜索引擎官方直达链接在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来Yandex.ru一键快速访问入口,感兴趣的网友一起随小编…

    2025年12月2日 电脑教程
    000
  • 360搜索引擎官方登录入口 360引擎2025无需登录链接

    360搜索引擎无需登录即可使用,用户可通过www.so.com或m.haosou.com访问并直接搜索;登录账号主要用于同步书签、密码及使用云盘等增值服务;2025年其特点包括AI智能搜索、安全防护、纯净体验和隐私保护。 360搜索引擎官方登录与使用方式 360搜索的核心功能是一个公开的网络爬虫和索…

    2025年12月2日 电脑教程
    000

发表回复

登录后才能评论
关注微信