在过去的实践中,我们通常通过爬取HTML网页来解析并提取所需数据,然而这只是一种方法。另一种更为直接的方式是通过发送HTTP请求来获取数据。考虑到大多数常见服务商的数据都是通过HTTP接口封装的,因此我们今天的讨论主题是如何通过调用接口来获取所需数据。
目前来看,大多数的http接口数据都采用restful风格,通常使用JSON格式来发送和接收数据。对于那些对此不太了解的零基础学者,建议先学习相关知识点。在本章学习过程中,我们将主要以腾讯云开发者社区作为主要平台,练习爬取接口数据。
接口爬取并不复杂,首先需要在浏览器中打开腾讯云社区的网页,然后按下F12打开控制台,接着浏览控制台中的请求数据接口,有些接口可能一眼难以识别,但通常可以跳过细致查看,因为在开发过程中,最关键的是能从名称中直观理解其作用,大型公司通常设计得相当清晰。我们首先尝试爬取主页的活动数据。
image
我们可以选择使用XHR来单独查看请求,这样就能排除掉页面、js、css等无关的请求,逐个检查接口,找到我们需要的内容。这个特定接口就是我们必须记住的,其他的都是多余的。
在这里,我们想向大家介绍一个非常实用的开发爬虫工具,它就是Convert curl commands to code
我是通过偶然的机会发现了这个工具的,它的确大大提升了我的爬虫效率。通常情况下,当我们找到了需要爬取的接口时,我们需要编写Python代码来发起请求,可能还要处理各种请求头和cookie,这一过程会消耗大量时间。而这个工具则帮助我们省去了这些繁琐的步骤,使得整个过程变得更加高效。
首先,我们在后台查找到目标请求,然后通过右键点击复制该请求。以Edge浏览器为例,具体操作如下所示:
image
在将内容复制后,我们可以直接前往这个在线工具网站,将其粘贴进去,从而生成相应的Python代码。这里以使用requests库为例进行演示。当你浏览该网站时,你可以选择你喜欢的任何编程语言进行相应代码的生成。
我们只需简单地将其复制粘贴到IDE中,然后便可直接运行代码。
一旦我们掌握了这种方法,基本上就可以获取想要爬取的所有数据,只要避免频繁请求而被识别为机器人爬虫。让我们首先尝试爬取社区首页的文章,以了解今年哪些类别的文章备受关注。以下是示例代码:
代码首先通过API获取文章列表数据,然后遍历每篇文章的标签信息,统计每个标签出现的次数,最后输出每个标签和其对应的数据量。这样可以帮助用户了解哪些标签在文章中出现频率较高。除了这些,我还额外处理轮播活动的数据,获取更全面的活动信息。
如果我们希望对我们自己的文章进行分析和处理,首先需要进行登录。原本我打算尝试通过编写代码实现免登录,但是仔细研究后台 JavaScript 和登录验证后发现实现起来涉及的内容过多,对我们这样以学习为主的学者来说并不适合。
确保我已经登录的标识是通过 cookie 实现的。Cookie 在这里的作用是保持用户登录状态,使用户在不同页面之间保持登录状态。由于 HTTP 是无状态的,需要一种方法来保持会话连接,而这种方法就是使用 Cookie。对于请求来说,Cookie 就是一串字符串,服务器会自动解析它,无需我们手动管理。因此,我只需在网页登录后使用工具复制粘贴 Cookie 即可。尽管我花费了一整天,但仍未成功编写代码实现登录并获取 Cookie。因此,我们最好选择最简单的方法。
示例代码如下:
在这个函数中,参数page_num代表着要获取的文章列表页数。请务必留意,请求头中的headers需要包含用户自行提供的Cookie信息,这样才能确保程序正常运行。您可以在这里获取到Cookie信息,只需将其复制粘贴即可。详见下图: