随着大模型的不断涌现,优质数据是模型训练过程中必不可少的生产资料。目前网上有大量开源的数据集可供下载。对于训练基座模型,通常这些开源的数据集已经足够了。但是对于各种垂直领域的数据需求,特别是需要一些特定数据进行模型微调和优化,数据爬取成为这些特殊领域数据的主要来源和手段。本文将主要分析在数据爬取前如何进行技术评估和选型。
判断数据来源
首选需要判断数据来源,一般来说目前的数据主要来自互联网网页或者手机APP。相比网页,手机APP的数据爬取难度要大很多。无论是技术负责度、需要花费的时间、以及爬取所需的硬件资源都比纯页面高出很多。由于手机APP爬虫的特殊性和复杂性,本文暂不讨论。下面我们只侧重于Web页面数据爬取。
判断静态页面还是动态页面
Web端页面主要有两种实现方式静态HTML页面或动态页面。具体如何区分,可以参考《快速分辨静态页面和动态页面》。这一步非常重要,因为对于静态页面和动态页面,数据爬虫的技术选型完全不同。相比之下,静态页面要简单很多,数据爬取所需要的时间也会快很多。这里有一个建议,能够通过静态页面爬取的,一定要用静态页面的方法爬取。不能通过静态页面爬取的,也要想办法用静态页面的方法爬取。万不得以,才使用动态渲染的方式爬取。
静态页面技术选型
这里只讨论基本的静态页面数据爬取,不讨论框架。静态页面之所以简单,是因为只需要进行数据传输和下载、数据提取和清洗。在进行下一步之前,确认已经熟练掌握了浏览器开发者工具。需要掌握包括如何查看HTMl的DOM节点,如何查看网络数据包等。如果是动态页面,还要会在浏览器开发者工具中学会调试Javascript代码。
数据下载
数据传输和下载最常用的Python包就是requests。在配置下载器的过程中,需要确认包括HTTP方法是GET或POST(通常是这两种),HTTP的headers配置(可以通过浏览器的开发者工具观察)、Cookies配置(如果需要Cookies,一般可能涉及到动态页面)、SSL(requests.get的verify参数)、重定向(requests.get的allow_redirects参数)、和最后的响应代码(比如200或404等)。
除了requests包以外,也可以使用urllib3,aiohttp等能发起HTTP请求的包。
数据提取和清洗
Python中常用的数据提取和清洗的包莫过于BeautifulSoup,另外比较好用而且强大的包是Lxml。他们都是通过xpath定位web页面的中的HTML DOM节点来提取数据的。因此xpath和re正则表达式的基本功一定要熟练掌握。
动态页面技术选型
动态页面相较于静态页面最大的区别就是动态渲染。使用JS动态渲染主要有动态生成cookie或者动态加载数据。上一节中提到,我们做技术评估过程中,如果遇到动态页面,也要想办法用静态页面的方法爬取。这里说的办法,就是通过Requests直接访问数据异步加载的URL,直接通过静态方式获取数据,而不是直接获取整个渲染后的HTML。获取数据后,根据具体数据的结构进行提取和清洗。如果实在没有办法通过静态方法爬取,那么需要通过一些动态渲染工具先渲染页面,再做进一步的数据提取和清洗。
数据下载和渲染
Python中常用的动态渲染库有Selenium,Puppeteer等。动态渲染成功后获取HTML内容。
数据提取和清洗
无论是静态页面还是动态页面,数据提取和清洗使用的工具和步骤差不多,这里就不在详述。
扫码联系船长