网页源代码抓取工具(如何通过Chrome开发者工具寻找一个网站上特定数据的抓取方式)
优采云 发布时间: 2021-10-04 05:11网页源代码抓取工具(如何通过Chrome开发者工具寻找一个网站上特定数据的抓取方式)
网上爬虫教程太多了。在知乎上搜索,我猜你能找到不少于100个。每个人都乐于从互联网上抢一个接一个网站。但是只要对方网站更新,很可能文章里面的方法就失效了。
每个网站捕获的代码不同,但背后的原理是一样的。对于大多数 网站 来说,爬行程序就是这样。今天的文章不讲什么具体的网站爬取,只讲一个共同点:
如何使用 Chrome 开发者工具找到一种方法来捕获 网站 上的特定数据。
(我这里演示的是Mac上英文版的Chrome,中文版Windows的使用方法是一样的。)
> 查看网页源代码
在网页上右击选择“查看页面源代码”,在新标签页中会显示该URL对应的HTML代码文本。
此功能不被视为“开发人员工具”的一部分,但它也非常常用。此内容与您通过代码直接向此 URL 发送 GET 请求所获得的结果相同(无论是否存在权限问题)。如果你能在这个源码页上找到你想要的内容,就可以按照它的规则,通过regular、bs4、xpath等方法提取文本中的数据。
但是,对于很多异步加载数据的网站来说,你在这个页面上找不到你想要的。或者因为权限和验证的限制,在代码中得到的结果与页面显示不一致。在这些情况下,我们需要更强大的开发人员工具来提供帮助。
> 元素
在网页上右击选择“Inspect”,进入Chrome Developer Tools的元素选择器。在工具中是元素选项卡。
元素有几个功能:
从 Elements 工具中定位数据比直接在源代码中搜索更方便,因为您可以清楚地看到它所在的元素结构。但这里特别提醒:
Elements 中看到的代码不等于请求 URL 的返回值。
是浏览器渲染的网页最终效果,包括异步请求数据,以及浏览器自身对代码的优化改动。因此,您无法根据 Elements 中显示的结构获取元素。在这种情况下,您可能无法获得正确的结果。
> 网络
在开发者工具中选择Network选项卡,进入网络监控功能,也就是常说的“抓包”。
这是爬虫最重要的功能。主要解决两个问题:
捕捉什么
抓住的是如何找到通过异步请求获取的数据的来源。
打开网络页面,打开记录,刷新页面,可以看到所有发送的请求,包括数据、JS、CSS、图片、文档等,都会显示出来。您可以从请求列表中找到您的目标。
一个一个地找到它们会很痛苦。分享几个小贴士:
找到收录数据的请求后,下一步就是使用程序获取数据。这时候就是第二个问题:怎么抓。
不是所有的URL都可以通过GET直接获取(相当于在浏览器中打开地址),通常要考虑这些:
请求方法是 GET 或 POST。请求附加的参数数据。GET 和 POST 有不同的参数传递方法。标头信息。常用的有user-agent、host、referer、cookie等,其中cookie是用来标识请求者身份的关键信息。对于需要登录的网站来说,这个值是必不可少的。网站 经常使用其他几个项目来标识请求的合法性。相同的请求在浏览器中可用,但在程序中不可用。大多数标题信息是不正确的。您可以将此信息从 Chrome 复制到程序中以绕过对方的限制。
单击列表中的特定请求,可以找到上述所有信息。
找到正确的请求,设置正确的方法,传递正确的参数和头信息,网站上的大部分信息都可以做到。
网络还有一个功能:右键单击列表,选择“另存为带有内容的HAR”,然后保存到文件中。该文件收录列表中的所有请求参数和返回值信息,以便您查找和分析。(在实际操作中发现直接搜索往往无效,只能保存到文件后才能搜索)
除了 Elements 和 Network 之外,开发者工具中还有一些功能,例如:
Sources,查看资源列表,调试JS。
控制台,显示页面的错误和输出,可以执行JS代码。很多网站都会在这里放招聘彩蛋(找更知名的网站试试)。
但这些功能与爬虫关系不大。如果开发网站,优化网站速度,还需要处理其他功能。这里不多说。
综上所述,其实你应该记住以下几点:
在“查看源代码”中可以看到的数据,可以通过程序直接请求当前的URL来获取。Elements 中的 HTML 代码不等于请求的返回值,只能作为辅助。使用网络中的内容关键字搜索,或将其保存为HAR文件后搜索以找到收录数据的实际请求。查看请求的具体信息,包括方法、头部和参数,并复制到程序中使用。
了解了这些步骤后,网上的资料大部分都可以得到了,说“解决了一半”不是头条党。
当然,说起来容易些。如果你想精通,还有很多细节需要考虑,你需要不断练习。但是拿这些点来看看各种爬虫案例,思路会更清晰。
如果你想要更详细的爬虫讲解和指导,可以看看我们的《爬虫实战》课程,也有零基础入门课程。
对课程详情公众号回复码的操作(Crossin的编程课堂)
====
其他 文章 和回答:
欢迎搜索关注:Crossin的编程课堂