数据抓取
- 什么是网络爬虫
网络爬虫(web scrap)是使用软件进行自动收集网页数据的过程。 无论京东、淘宝,还是小破站、微博,每天都产生亿万个数据:商品信息、评论、视频点击播放数据甚至关注信息。这些信息能成为我们对现实世界、元宇宙世界的认知。但我们有时候并不直接拥有这些数据,我们也无法手动去复制获取如此多的数据,这就要依靠网络爬虫来实现。
- 网络爬虫能做什么
首先明确一点,我们需要在法律法规的限定下,在网站本身可以允许公开访问的情形下,以教育研究的目的进行爬虫实践;若相关对象明确不允许或涉及数据隐私,切勿以身试法。 在这个年代,很多服务都通过api进行访问授权,以获取相应的数据。比如微博、推特、同花顺等等。但有时候api授权的内容并不能完全满足需求或者没有api,而网页爬虫能够帮助克服这一问题。
我们可以在很多场景中使用爬虫: 价格监测: 电商:价格跟踪、对比 市场价格:原油、成品油、股票等等,通常二级市场的价格数据能够通过api获取 线索生成: 提取联系信息:姓名、电子邮件地址、电话或工作职位 识别新的机会,即在Yelp、YellowPages、Crunchbase等 市场研究: 房地产:供应/需求分析,市场机会,趋势性地区,价格变化。 汽车/汽车:经销商分布,最受欢迎的车型,各城市销售量。 旅游和住宿:可用的房间、最热门的地区、最佳折扣、各季节的价格。 招聘信息:最需要的工作、处于上升期的行业、最大的雇主、岗位的需求情况等等。 社会媒体:品牌存在和成长中的影响者追踪、新的收购渠道、受众定位,等等。 城市发现:跟踪新的餐馆、商业街、商店、趋势地区等 聚合信息 聚合多个来源的新闻。 比较价格,比如保险服务价格、旅游。 银行业务:将所有相关信息关联到一起。 产品跟踪 收集产品细节和规格 新产品 SEO(搜索引擎优化) 关键词的相关性和性能 竞争跟踪,品牌相关性,新入者的排名。 ML/AI - 数据科学 收集大量的数据来训练机器学习模型; 图像识别,预测建模,NLP。 批量下载 PDF或大规模的图像提取。
- 网页爬虫的流程
网页爬虫是模拟标准的HTTP客户-服务器通信过程。浏览器(客户端)连接到一个网站(服务器)并请求内容,然后服务器返回HTML (HyperText Markup Language) 内容,浏览器负责将HTML渲染成一个图形界面。 当然,现在的网站除了文本,还有更多的内容类型。
我们先了解底层通信的工作原理,这会帮助我们来完成爬虫过程的理解。
请求--由浏览器发出
请求是浏览器向网站发送的文本。它由四个元素组成。 URL:网站上的具体地址。 METHOD:有两种主要类型。GET方式用于检索数据。和POST来提交数据(通常是表格)。 HEADER:用户代理,Cookies,浏览器语言,都在这里。它是通信中最重要和最棘手的部分之一。网站强烈关注这个数据,以确定一个请求是来自人类还是机器人。 BODY:通常是用户生成的输入。在提交表格时使用。
响应 - 由服务器返回
当一个网站对浏览器作出响应时,它会返回三个项目。 HTTP Code:一个表示请求状态的数字。200表示一切正常。404表示没有找到URL。500是一个内部服务器错误。你可以了解更多关于HTTP代码的信息。 The content:HTML。负责渲染网站。辅助内容类型包括:CSS样式(外观)、图像、XML、JSON或PDF。它们可以改善用户体验。 Headers:就像请求标头一样,这些标头在通信中起着关键作用。它指示浏览器 "设置Cookie"。
以上反映了一个普通的客户端-服务器通信过程。但Web Scraping增加了一个新的概念:数据提取。
数据提取--解析
HTML只是一个长文本。一旦我们有了HTML,我们就想获得特定的数据,并对其进行结构化处理以使其可用。解析是提取选定的数据并将其组织成一个定义明确的结构的过程。 从技术上讲,HTML是一个树状结构。上面的元素(节点)是父结构,下面的是子结构层。有两种流行的技术有助于从树状结构中提取最相关的部分。
CSS选择器:广泛用于修改网站的外观。功能强大且易于使用。 XPath:它们更强大,但更难使用。它们不太适合于初学者。
提取过程从分析一个网站开始。有些元素一看就很有价值。例如,标题、价格或描述都很容易在屏幕上看到。但是,其他信息只能在HTML代码中看到。
Hidden inputs: 它通常包含内部ID等信息,相当有价值。
XHR:(XMLHttpRequest)网站在后台执行请求以提高用户体验。他们存储以JSON格式结构化的内容。
HTML中的JSON:JSON是一种常用的数据交换格式(JavaScript Object Notation, JS 对象简谱) 。很多时候,它在HTML代码中,为其他服务提供服务--如分析或营销。
HTML属性:为其他HTML元素添加语义。
一旦数据被结构化,数据库就会将其存储起来供以后使用。在这个阶段,我们可以将其导出为其他格式,如Excel、PDF,或对其进行转换,使之可用于其他系统。
- 网页爬虫的挑战
网站会主动避免被追踪/被爬取。他们通常会建立保护性的解决方案,特别是一些流量很高的网站。反爬虫措施使爬取任务更具挑战性。
以下是处理相关网站时面临的一些挑战(低流量网站通常价值较低,反爬系统较弱)。
IP速率限制 所有连接到互联网的设备都有一个识别地址,称为IP。这就像一个身份证。网站使用这个标识符来衡量一个设备的请求数量,并试图阻止它。想象一下,一个IP每分钟请求120页。每秒有两个请求。真正的用户无法以这样的速度浏览。因此,为了大规模地进行搜刮,我们需要带来一个新的概念:代理。
代理轮换 代理,或代理服务器,是互联网上的一台有IP地址的计算机。它是请求者和网站之间的中介。它允许将原始请求IP隐藏在代理IP后面,欺骗网站认为它来自另一个地方。它们通常被用作庞大的IP池,并根据各种因素在它们之间切换。熟练的爬虫系统会调整这一过程,并根据域名、地理位置等选择代理。
Header信息/Cookies验证 还记得请求/响应头吗?预期值和结果值之间的不匹配告诉网站出了问题。浏览器和服务器之间共享的头信息越多,自动化软件就越难在不被发现的情况下顺利通信。当网站返回 "Set-Cookie "头,期望浏览器在下面的请求中使用它时,它就变得越来越具有挑战性。理想的情况是,你想用尽可能少的标头来进行请求。不幸的是,有时这是不可能的,导致了另一个挑战。
逆向工程 Header/Cookies 如果头文件和Cookies没有到位,先进的网站就不会做出反应,迫使我们进行逆向工程。逆向工程是了解一个过程是如何建立的,以尝试模拟它的过程。它需要调整IP、User-Agent(浏览器识别)、Cookies等。
Javascript的执行 现在的大多数网站都严重依赖Javascript。Javascript是一种在浏览器上执行的编程语言。它为数据收集增加了额外的难度,因为很多工具都不支持Javascript。网站在Javascript中进行复杂的计算,以确保一个浏览器真的是一个浏览器。 导致我们使用
无头浏览器 无头浏览器是一种没有由软件控制的图形用户界面的网络浏览器。它需要大量的内存和CPU,使这个过程耗费更多。Selenium和Puppeteer(由谷歌创建)是该任务中最常用的两个工具。对,谷歌是世界上最大的爬虫使用者。
Captcha / reCAPTCHA (由谷歌开发) Captcha是一种挑战测试,用于确定用户是否为人类。它曾经是一种避免机器人的有效方法。一些公司如Anti-Captcha和2Captcha提供绕过验证码的解决方案。他们提供OCR(光学字符识别)服务,甚至提供人类劳动来解决难题。
模式识别 用户在浏览网页时候的模式通常是有一定规律的,一般不会直接跳到第八页而不去浏览第七页。还有就是通过鼠标悬停的动作来判断是PC还是触摸终端。
- 总结
以上是网页爬取的概述过程,这个过程会不断滴进行爬取和反爬的过程,当然也会有更多的乐趣和技术挑战。 这很难,但更有趣,对吧?
最后更新于
这有帮助吗?