“嘿 ChatGPT,给我写一个关于网络抓取的双关语。”
“为什么网络爬虫被踢出学校?它一直在逃课!明白了吗?就像一个 HTML 类。
不错,ChatGPT。从公共互联网上抓取了大约 570 GB 的数据,经过多年的开发,才想出了这个数据。
ChatGPT 是为其提供动力的大型语言模型和类似的 AI 系统,通过合成大规模网络抓取期间收集的数据进行训练。这导致许多人(包括作者和社交媒体平台)重新审视数据权利和所有权,因为人工智能模型使用他们免费提供的数据。
尽管人工智能是它的新背景,但网络抓取实际上是一种古老的做法——与网络本身一样古老。就像网络一样,抓取在规模和复杂程度上都显着增长。网络抓取是自搜索引擎成立以来一直为搜索引擎提供动力的技术。
在谷歌出现之前,互联网档案馆就抓取了网络来存档它,并继续这样做。截至 2023 年,互联网档案馆的网络记录 Wayback Machine 已存档超过 8330 亿个网页。在可预见的未来,抓取一直是、现在和将来都是互联网的基石。
什么是网页抓取?
网页抓取也称为网页收集和网络数据收集。它是指以编程方式读取和分析互联网上内容的过程。网页抓取有三个主要步骤:
- 挖掘数据。挖掘数据涉及查找源并将数据从该源提取到用户可以操作的环境中,例如独立开发环境 (IDE)。
- 解析数据。解析数据涉及读取和过滤数据以查找值位。想想通过筛子寻找黄金。
- 输出数据。输出数据涉及将收集的数据从 IDE 中取出,并将其应用于用户想要的任何内容。
网页抓取通常是指从 HTML 代码中提取、解析和输出数据。网页通常由 HTML、CSS 和 JavaScript 代码组成。浏览器使这些元素具有人类可读性。通过右键单击并检查页面,用户可以查看浏览器中的哪些页面元素对应于哪些 HTML 代码行。这有助于知道要抓取什么。
尽管 HTML 是在网络抓取中排序的代码,但可以收集任何类型的数据。
网页抓取使用案例
跨行业的网页抓取有许多常见用例,包括:
- 价格监控和比较。零售商和电子商务企业抓取竞争对手的网站来监控和比较价格。
- 股票市场分析。金融分析师抓取股票市场网站,收集有关股票价格、公司新闻和财务报表的数据,以进行分析和预测。
- 房地产列表。房地产公司抓取房地产网站以收集有关房地产列表、价格和市场趋势的数据。
- 工作板监控。招聘机构和人力资源部门会抓取招聘网站,以找到符合特定标准的新职位列表。
- 新闻和内容聚合。媒体公司和新闻聚合商抓取各种新闻网站,为他们的平台收集和策划内容。
- 潜在客户生成。企业抓取网站以收集潜在的潜在客户联系信息,例如电子邮件地址和电话号码。
- 研究和学术界。研究人员抓取网站以收集数据用于学术研究、市场研究和其他分析目的。
- 新闻学。记者在网上搜寻数据,以告知他们的故事并核实事实。
- 旅行和款待。旅行社和聚合商抓取航空公司、酒店和其他旅游相关网站,以收集有关航班时刻表、房间供应情况和价格的数据。
- 社交媒体营销。品牌和营销人员抓取社交媒体平台,以监控对其品牌的提及,跟踪情绪并收集有关客户偏好的见解。
- 搜索引擎优化。SEO专业人员抓取搜索引擎结果页面,以监控关键字排名并分析竞争对手的SEO策略。
- 事件监控。公司抓取活动网站,以收集有关其行业即将举行的活动、会议和研讨会的数据。
- 产品情绪。电子商务企业抓取产品评论网站以监控客户对其产品的反馈和情绪。
- 法律和合规。公司抓取网站以确保其内容不会在未经许可的情况下被使用或监控假冒产品。
- 数据集成。开发人员抓取网站以将这些网站中的数据集成到他们的应用程序中。这就是为 AI 和大型语言模型积累训练数据的方式。
- 体育统计。体育分析师和爱好者抓取网站以收集有关球员统计数据、比赛结果和球队表现的数据。
- 威胁情报。 网页抓取可以帮助收集情报,以最大限度地减少、管理和缓解网络攻击。
抓取网络是非法的吗?
在某些准则范围内,抓取网络上的公开数据是合法的。网页抓取与窃取数据不是一回事。没有针对网络抓取的联邦法律,许多合法企业依靠它来赚钱。一些平台(例如Reddit)提供对应用程序编程接口(API)的访问,使平台更容易抓取。直到最近,Reddit 还免费提供这项服务。
但是,在某些情况下,网络抓取是非法的,例如未经许可获取数据。如果网页抓取违反了网站的服务条款、《计算机欺诈和滥用法》、数据保护法(如《通用数据保护条例》)或某些版权法,则可能导致法律诉讼。
许多社交平台试图限制对其数据的访问,以阻止爬虫者。LinkedIn是一个积极劝阻它的平台。
网络抓取引起的冲突的一个例子是HiQ与LinkedIn的情况。2017年,数据分析公司HiQ Labs在收到LinkedIn的停止信函后起诉了LinkedIn,该信禁止对其公开个人资料进行网络抓取。法院授予HiQ初步禁令,允许其继续抓取,强调数据的公开性质以及LinkedIn行为的潜在反竞争影响。
LinkedIn使用深度学习来检测类似机器人的行为,并通知被标记的成员如何纠正自己的行为。
平台可以阻止或避免抓取的其他一些方法包括:
- 速率限制请求。爬虫和机器人可以自动访问网页,比任何人都快。速率限制器强制执行 IP 地址在给定时间窗口内可以发出的最大请求数。
- 定期修改 HTML。 抓取工具通常依靠一致的 HTML 结构来识别有价值数据中的模式并提取数据。更改这些模式会使抓取工具更难提取有价值的数据。
- 使用验证码。验证码迫使浏览器(人类或机器人)解决证明自己是人类的挑战。许多刮板将无法解决验证码。
许多网站都有一个机器人.txt文件。这是一个针对网络爬虫的页面,指定了如何允许抓取该页面,以及哪些内容违反了规则。它提供允许的内容、不允许的内容、站点地图等信息,使搜索引擎更容易抓取,并提供抓取延迟,告诉机器人在连续请求之间等待多长时间。
robots.txt 文件通常位于网站的根目录下。这是彭博社的机器人.txt文件作为真实世界的例子。
抓取网站的方法
抓取网站的方法有很多种,需要不同程度的编码能力。
无代码抓取方法包括以下内容。
- 手动复制和粘贴。从网站抓取数据的最直接方法是手动从源头复制数据并对其进行分析。
- 浏览器开发人员工具。浏览器有许多内置工具来检查和提取网站元素。一个例子是 inspect 函数,它显示了网站的底层源代码。
- 浏览器扩展。 可以将浏览器扩展添加到浏览器中,以执行特定的、基于模式的 Web 抓取。
- RSS 源。一些网站以 RSS 提要的形式提供结构化数据列表。
- 网页抓取服务。Diffbot、Octoparse、Import.io 和 ParseHub 等服务是无代码抓取平台。
- 数据挖掘软件。KNIME 和 RapidMiner 等软件提供了一套全面的数据科学和分析功能,包括网络抓取。
涉及某些编码的抓取方法包括:
- 美丽的汤。Python 的 Beautiful Soup 库是介绍抓取的好资源。它需要最少的编码知识,适用于一次性 HTML 抓取项目。
- 蜜蜂属。许多网站都提供结构化 API,让用户能够抓取数据。使用 API 通常需要对 JSON 和 XML 等数据格式有基本的了解,以及对 HTTP 请求有基本的了解。
需要更多编码知识的抓取方法包括:
- 刮擦。Python 的 Scrapy 库可用于更复杂的 Web 抓取任务。Scrapy 可以做很多事情,但对于新用户来说可能很困难。
- JavaScript的。使用 Axios JavaScript 库发出 HTTP 请求,使用 Cheerio 库在 Node.js 中进行 HTML 解析。
- 无头浏览器。 Selenium 或 Puppeteer 等浏览器自动化工具可以使用脚本控制浏览器,并处理包含大量 JavaScript 内容的网站。
- 网络爬虫框架。Apache Nutch 等高级框架支持大规模的 Web 抓取。
如何在 Python 中构建网络爬虫
下面是一个简单刮板的示例。该抓取工具使用 Python 库、requests 和 Beautiful Soup 从 WhatIs.com 主页上列出的链接中提取定义文章。
步骤 1。通过代码访问 WhatIs.com
此步骤演示如何使用请求库将内容抓取到编码环境中。图 1 中的代码导入 WhatIs.com 源代码的前 1,000 个字符。它不是下一步的必要前奏,但显示了代码顶部的 Python 库如何将数据提取到 IDE 中。
图 1.第一行源代码被拉入 IDE 中。
Requests 是一个流行的开源库,用于发出 HTTP 请求。行 response.txt 从网站返回源代码。
第2步。提取 URL
HTML 链接采用以下格式表示:
<a href=“URL”>可点击的文本或内容</a>
Whatis.com 源代码中充满了它们。
图2.WhatIs.com 源代码,其中包含指向字母表中每个字母的不同词汇表页面的链接。
图 3 中的代码返回 WhatIs.com 主页上每个链接的列表。该代码通过查找字母“a”的每个实例(表示链接)然后打印该链接的 URL 来实现此目的。
图3.源代码中的每个链接都会被拉入 IDE 中。
如图所示,抓取工具从页面中提取每个超链接,包括 TechTarget 的隐私页面和联系页面。目标是仅提取定义 URL。
第 3 步。提取定义 URL
在文章的 URL 中查找抓取工具可以过滤和提取的模式。所有定义都具有相似的 URL 结构 -- 它们在 URL 中具有 /definition。以下代码可确保打印所有带有 /definition 的 URL。
图4.只有包含字符串“definition”的链接才会被拉入 IDE 中。
第 4 步。精炼产量
上一步大多奏效。但是,它仍然会打印指向 WhatIs.com 词汇表的链接列表,这些链接都包含“定义”一词。若要删除术语表条目并仅显示定义链接,请将以下行添加到 for 循环中:
如果 href 和 href 中的 “/definition” 和 href 中的 “/definitions” 不在 href 中:
图5.“定义”一词被排除在外,从输出中删除了词汇表链接。
现在显示的所有链接都将指向 TechTarget 定义,并且术语表将被排除。
要从编码环境中导出这些链接,请使用 pandas 库将输出转换为数据框,然后将其保存到编码环境中标题为“output.csv”的 CSV 文件中。代码如图 6 所示,并附加了这些代码行。
图6.使用 pandas 库导出到 CSV 文件。CSV 文件显示在屏幕外的文件目录中。
来源:https://www.techtarget.com/WhatIs/feature/How-to-scrape-data-from-a-website
文章评论