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

随着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

相关推荐

  • HTML邮箱如何屏蔽垃圾邮件_邮件模板防护设置【技巧】

    HTML邮箱模板防垃圾邮件需五步:一、隐藏明文邮箱(JS拼接/CSS隐藏/图片化);二、配置SPF与DKIM发件域认证;三、禁用外部资源(内联CSS、移除JS、base64嵌入图片);四、规范Content-Type与UTF-8编码声明;五、添加X-Confirm-Reading-To和List-U…

    2025年12月23日
    000
  • HTML如何修改页面标题_元数据动态更新方法【技巧】

    可通过JavaScript动态修改页面标题和元数据:一、用document.title更新标题;二、用querySelector修改meta description;三、动态创建替换title元素;四、批量更新多类meta标签;五、结合pushState与popstate实现SPA标题同步。 如果您…

    2025年12月23日
    000
  • 如何保证html语义化_编写语义化HTML代码规范指南【规范】

    HTML语义化需遵循五项规范:一、用等替代div/span;二、严格按h1–h6层级嵌套标题;三、为多媒体添加恰当alt文本及字幕;四、列表与表格各司其职并正确标记;五、交互元素须用原生标签并正确关联状态。 如果您在编写HTML代码时发现页面结构混乱、可访问性差或搜索引擎难以理解内容,则可能是由于未…

    2025年12月23日
    000
  • 高效构建矩阵式设计:纯HTML/CSS与JavaScript优化实践

    本教程探讨如何优化纯HTML和CSS实现的矩阵式设计,以解决大量重复代码的问题。文章将详细介绍两种主要方法:一是利用JavaScript动态生成HTML元素,显著减少代码冗余;二是采用SVG技术,实现可伸缩且更简洁的图形表示。通过具体代码示例,帮助开发者构建更高效、更易维护的网页布局。 引言:矩阵布…

    2025年12月23日
    000
  • Scrapy教程:高效抓取并整合多个P标签内容至单一字段

    本教程详细讲解如何使用scrapy框架高效抓取html页面中不确定数量的` `标签内容,并将其整合为一个单一字符串字段,以便于数据存储和导出。文章通过分析常见错误,提供优化的xpath表达式和python代码实现,确保所有目标文本都能被正确提取并聚合。 1. 理解多P标签抓取的需求与挑战 在网页抓取…

    2025年12月23日
    000
  • Python网络爬虫数据清洗:解决字符串转浮点数ValueError的策略

    本教程旨在解决使用python进行网络爬虫时,将抓取到的非数字字符串(如”..”)直接转换为浮点数引发的valueerror。我们将通过beautifulsoup抓取数据,并重点介绍如何在数据转换前识别并处理这些特殊字符,确保数据类型转换的顺畅,从而有效进行后续的数据分析和计…

    2025年12月23日
    000
  • 如何使用Scrapy和XPath高效抓取div中可变数量的p标签并合并存储

    本文详细介绍了如何利用scrapy框架和xpath表达式,从网页中准确提取特定`div`元素内数量不定的` `标签内容,并将其合并为单个字符串进行存储。通过分析常见问题,提供了一种简洁高效的解决方案,确保所有段落内容都能被正确抓取并导出到csv文件,避免只存储最后一个段落的错误。 在进行网页抓取时,…

    2025年12月23日
    000
  • CSS修改包含多元素按钮文本的技巧与局限性

    本文探讨在无法直接编辑html代码的场景下,如何仅通过css修改包含多个子元素的按钮文本。核心方法是利用`font-size: 0`隐藏原有文本,并通过`:after`伪元素插入新文本。文章将详细介绍这种css技巧的实现步骤,并着重分析其在可访问性(accessibility)和搜索引擎优化(seo…

    2025年12月23日
    000
  • 使用CSS修改包含多元素按钮的文本内容

    本文探讨了在无法直接编辑HTML代码(如WordPress环境)的情况下,如何仅通过CSS修改包含多个嵌套元素的按钮文本。针对传统`content`属性无法直接修改特定文本的问题,文章提出了一种通过隐藏原始文本、保留特定子元素并利用`::after`伪元素插入新文本的CSS解决方案,同时强调了该方法…

    2025年12月23日
    000
  • BeautifulSoup中正确查找HTML元素:解决‘None’返回值问题

    本文旨在解决使用BeautifulSoup进行HTML元素查找时,因标签选择不当或查找范围错误而导致返回`None`的问题。通过分析常见误区,提供精准定位目标元素的策略,并结合示例代码,指导开发者如何高效、准确地从HTML内容中提取所需数据,避免常见的查找失败和程序异常。 引言:理解Beautifu…

    好文分享 2025年12月23日
    000
  • Python网络爬虫:BeautifulSoup函数设计与HTML元素高效提取

    本文深入探讨了使用python requests和beautifulsoup进行网络爬虫时常见的编程陷阱,特别是变量作用域、函数设计以及html元素的高效提取。通过分析一个具体的案例,文章详细介绍了如何优化函数结构、正确传递参数、精确查找并提取目标数据,从而避免常见的none返回问题,提升爬虫代码的…

    2025年12月23日
    000
  • JavaScript实现href属性到data-href属性的转换教程

    本教程详细讲解如何使用纯javascript将html “标签的`href`属性转换为`data-href`属性。通过获取原始`href`值、移除`href`属性并设置新的`data-href`属性,实现链接行为的定制化,避免默认导航,并为javascript提供数据。文章将提供单元素和…

    2025年12月23日
    000
  • 如何使用Splinter和BeautifulSoup解决复杂网站的元素选择问题

    本教程旨在解决使用beautifulsoup在复杂网站上选择html元素时遇到的“none”或空结果问题。文章深入探讨了网站重定向、cookie及会话管理等挑战,并详细阐述了如何结合splinter进行浏览器自动化以处理这些动态行为,然后从splinter获取渲染后的html,再利用beautifu…

    2025年12月23日
    000
  • HTML语义化对SEO有什么影响_HTML语义化提升搜索引擎排名的原理

    HTML语义化通过使用、、等结构化标签,帮助搜索引擎准确识别页面布局与内容层级,提升索引效率;合理运用-标题体系可强化主题权重,、等标签明确内容语义,增强关键词相关性;同时优化代码结构有利于页面加载速度与无障碍访问,改善用户体验,降低跳出率,从而提升用户行为指标,被搜索引擎视为高质量信号,最终推动S…

    2025年12月23日
    000
  • Python爬虫:循环遍历HTML并追踪指定链接

    本文详细介绍了如何使用python的`urllib`和`beautifulsoup`库实现网页链接的迭代追踪。教程将指导读者如何编写代码,从一个起始url开始,连续访问并解析网页,每次提取并跟随页面上的特定链接(例如第三个链接),从而实现多层深度的数据抓取。文章重点讲解了在循环中正确管理url变量和…

    2025年12月23日
    000
  • HTML语义化布局有什么优势_HTML语义化对代码可读性与SEO的影响

    语义化布局通过header、nav、main等标签明确页面结构,提升代码可读性与维护效率,减少无意义类名,便于团队协作;增强SEO,帮助搜索引擎识别内容层次,提升索引准确性;改善无障碍访问,使屏幕阅读器能精准导航,提升视障用户浏览体验。 HTML语义化布局通过使用具有明确含义的标签来组织网页内容,比…

    2025年12月23日
    000
  • HTML语义化布局有什么好处_HTML语义化对SEO与可访问性的影响

    语义化布局通过使用header、nav、main等有意义标签提升SEO与可访问性:搜索引擎能更好理解内容结构,提高收录与排名;屏幕阅读器可精准导航,改善视障用户浏览体验;代码结构清晰,便于团队协作与维护。 HTML语义化布局指的是使用具有明确含义的标签来构建网页结构,比如 header、nav、ma…

    2025年12月23日
    000
  • HTML语义化对SEO有什么好处_HTML语义化提升搜索引擎排名的原理

    HTML语义化通过使用具有明确含义的标签来组织网页内容,帮助搜索引擎更好地理解页面结构和信息重点。这直接影响了网页在搜索结果中的表现。提升内容可读性与结构清晰度搜索引擎爬虫依赖代码结构判断页面主题。使用、、、、等语义化标签,能让爬虫快速识别导航、主体内容、侧边栏和页脚等区域。 到 标签合理嵌套,体现…

    2025年12月23日
    000
  • 使用Python和BeautifulSoup从HTML页面提取H3标签文本

    本教程详细介绍了如何利用python的`requests`库获取网页内容,并结合`beautifulsoup`库高效解析html,精准提取所有` `标签内的文本信息。文章将提供清晰的步骤、完整的代码示例以及重要的注意事项,帮助开发者轻松实现网页数据抓取,适用于需要从复杂html结构中定位特定元素并提…

    2025年12月23日
    100
  • html联系链接怎么打_html联系链接如何打实用技巧

    使用mailto创建邮件链接,基本语法为联系我们,可添加?subject设置主题,&body预填内容,建议编码特殊字符,注意防范爬虫、提供多种联系方式并配合联系表单使用,提升用户体验。 在HTML中创建联系链接,最常用的方式是使用来设置邮件主题,用mailto:预设邮件内容,提升沟通效率。 …

    2025年12月23日
    000

发表回复

登录后才能评论
关注微信