这是「进击的Coder」的第 832 篇技术分享
作者:kingname
来源:未闻 Code
“
阅读本文大概需要 8 分钟。
”
ChatGPT 一炮而红,让国内很多公司开始做大语言模型。然后他们很快就遇到了第一个问题,训练数据怎么来。有些公司去买数据,有些公司招聘爬虫工程师。但如果现在才开发爬虫,那恐怕已经来不及了。
即使爬虫工程师非常厉害,可以破解任意反爬虫机制,可以让爬虫跑满网络带宽,可是要训练出 GPT-3 这种规模的大语言模型,这个数据并不是一天两天就能爬完的。并且,有很多老网站的数据,早就被删除了,爬虫想爬也爬不到。
如果你看了今天这篇文章,那么恭喜你,你即将知道如何快速获取 600 亿网站的数据。从 2008 年开始爬取,这些网站数据横跨 40 多种语言。截止我写这篇文章的时候,最新的数据积累到了 2023 年 2 月。只要是 Google 现在或者曾经搜索得到的网站,你在这里都能找到。唯一制约你的,就是你的硬盘大小——仅仅 2023 年 1 月和 2 月的网页加到一起,就有 400TB。而且所有这些数据,完全免费!不需要注册登录!不需要梯子!不需要下载任何额外软件!只需要浏览器或者 Linux 中的 wget 命令就能直接下载。
这个项目叫做 Common Crawl[1],官网长这样:
获取数据的方法,网站已经写到了 Get Started[2] 中。我们来看看这个页面的第一段话:
The Common Crawl corpus contains petabytes of data collected since 2008. It contains raw web page data, extracted metadata and text extractions.
Common Crawl语料库包含了上PB的数据。这些数据从2008年开始收集。他包含了网页的原始页面HTML、提取出来的元信息和纯文本。
Common Crawl 的数据保存在亚马逊 S3 上面,我们可以直接通过 HTTP 来下载。当然如果你硬盘够大,你可以写代码来批量下载全部数据,这个时候可以使用 Python 的 boto3 模块访问 S3.
我用 HTTP 下载的方式,来给大家演示一下这个数据怎么下载和使用。我们在上面提到的 Get Started 页面,找到你想下载数据的时间点。例如我想下载 2023 年 1 月和 2 月的网站数据,如下图所示:
点击红框中的链接,进入一个新的页面。如下图所示:
从这个页面上,我们可以看到这个数据集的简介。2023 年 1 月到 2 月的数据,从 1 月 26 号开始抓取,到 2 月 9 号截止。包含 315 亿个页面。原始数据不压缩的情况下有 400TB。这些网站来自 3300 万个域名,130 亿个之前没有抓过的 URL。
在这个页面,我们可以看到一个表格,这里面显示了不同的数据类型:
其中WARC files
文件,记录的是网页的原始 HTML 代码。WET files
文件,记录的是简单处理后,提取出来的网页所有纯文本。
大家不要被最后一列的数据大小吓到了。你不需要一次性下载这么大的数据。
以 WARC 文件为例,点击File List
中的链接,会自动下载一个很小的压缩文件warc.paths.gz
。这个文件需要使用 gunzip 命令来解压缩。这个命令理论上在 macOS 和 Linux 中都是自带的。使用如下命令解压缩:
gunzip warc.paths.gz
解压完成以后,会生成一个warc.paths
的文件。这个文件有 9.2MB,也非常的小。我们可以使用 vim 或者 less 命令查看里面的内容,如下图所示:
这里面列出来的是不同时间段的文件。我们可以依次下载每个文件,分别解压缩。这样分文件,是 Common Crawl 为了方便大家下载而做的。否则一次性下载几十 TB,谁受得了。
我们随便找一个地址,例如crawl-data/CC-MAIN-2023-06/segments/1674764494826.88/warc/CC-MAIN-20230126210844-20230127000844-00001.warc.gz
。把这个地址前面拼接上域名https://data.commoncrawl.org/
,因此完整的 URL 应该是:https://data.commoncrawl.org/crawl-data/CC-MAIN-2023-06/segments/1674764494826.88/warc/CC-MAIN-20230126210844-20230127000844-00001.warc.gz
。这就是能够下载这个时间段数据的 URL 了。这个压缩文件有好几个 G,因此不建议直接在浏览器上面打开这个 URL。我们可以使用 wget 命令来下载。当然你也可以用迅雷来下。
下载完成以后,会得到一个CC-MAIN-20230126210844-20230127000844-00001.warc.gz
文件,继续使用gunzip
命令解压缩,得到CC-MAIN-20230126210844-20230127000844-00001.warc
文件。这个文件本质上是一个文本文件,可以使用 vim 或者 less 命令查看:
这里面记录的是网站的元信息和 HTML。数据是以 WARC 格式储存的。关于这个格式,在上面提到的 Get Started 页面可以看到具体的说明:
你可以直接写一个程序来解析,或者安装一些现成的程序来解析,并转成 JSON 或者其他格式。Ubuntu 下面可以使用 apt 命令安装 warcat 来解析,这里就不多说了。如果不知道怎么解析也可以问一问 ChatGPT。
我们再来看一下WET
文件,打开以后如下图所示:
算是一个比较粗糙的正文提取方法,仅仅是把页面上的所有文本全部提取出来了而已。
如果你想让新闻类、博客类文章的提取效果更好,那么可以试一试把这个 WARC 格式里面的 HTML 提取出来,然后使用我的 GNE[3] 来提取正文,提取效果就会好非常多:
总结
众所周知,中文互联网是封闭的互联网。但不要因此就觉得现在已经没有良心网站了。Common Crawl 就属于这样的良心网站,完全免费,不需要注册登录,没有任何限制,不需要安装任何软件,直接获取 15 年来绝大部分网站的原始数据。
希望这些数据,能让我们自己的大模型更进一步。
[1]
Common Crawl: https://commoncrawl.org/
[2]
Get Started: https://commoncrawl.org/the-data/get-started/
[3]
GNE: https://github.com/GeneralNewsExtractor/GeneralNewsExtractor
End
崔庆才的新书《Python3网络爬虫开发实战(第二版)》已经正式上市了!书中详细介绍了零基础用 Python 开发爬虫的各方面知识,同时相比第一版新增了 JavaScript 逆向、Android 逆向、异步爬虫、深度学习、Kubernetes 相关内容,同时本书已经获得 Python 之父 Guido 的推荐,目前本书正在七折促销中!
内容介绍:
扫码购买
好文和朋友一起看~