jquery抓取网页内容(爬虫)
优采云 发布时间: 2022-03-31 09:10jquery抓取网页内容(爬虫)
其实一开始我是拒绝写这篇博客的,因为爬虫爬取了cnblog博客园。也许编辑看到我的帐户后会屏蔽我的帐户:)。
言归正传,前端同学可能一直对爬虫比较陌生,觉得爬虫需要用到后端语言,比如php、python等。当然这是在nodejs之前,nodejs的出现让Javascript也可以用来编写爬虫。由于nodejs强大的异步特性,我们可以轻松爬取异步高并发的网站。当然,这里的easy是指cpu开销。
要阅读这篇文章,您只需要拥有
这篇文章很长,图很多,但是如果你能耐心看完这篇文章,你会发现实现一个简单的爬虫并不难,可以从中学到很多。
本文中完整的爬虫代码可以在我的github上下载。主要的逻辑代码在 server.js 中,建议一边对比代码一边往下看。
在详细说爬虫之前,我们先简单看一下最终要达到的目标。入口是,博客园文章列表页有20篇文章文章,最多可以翻到200页。我的爬虫需要做的是异步并发爬取这4000篇文章文章的具体内容,得到一些我们想要的关键数据。
爬虫进程
看到了最终的结果,接下来我们来看看如何通过一个简单的nodejs爬虫,一步步得到我们想要的数据。首先简单介绍一下爬虫流程。完成一个爬虫,主要步骤如下:
抓住
Crawler 爬虫,最重要的一步就是如何爬回想要的页面。并且可以兼顾时间效率,可以同时爬取多个页面。
同时,要获取目标内容,还需要对页面结构进行分析。由于 ajax 的盛行,许多页面内容无法通过单个 url 请求。通常,一个页面的内容是在多次请求后异步生成的。所以这就要求我们能够使用抓包工具来分析页面结构。
再深入一点,你会发现你要面对不同的网页需求,比如认证、不同的文件格式、编码处理、各种奇怪的URL合规处理、重复爬取问题、cookie跟随问题、多线程和多线程进程爬取、多节点爬取、爬取调度、资源压缩等一系列问题。
所以第一步就是把网页拉回来,慢慢的你会发现各种问题供你优化。
贮存
检索页面内容时,一般不直接分析,而是采用一定的策略保存。个人认为更好的架构应该是分析和捕获分离,这样比较松散。如果每个环节都有问题,可以隔离另一个。链接中可能出现的问题可以查看或更新发布。
那么如何保存文件系统、SQL或NOSQL数据库、内存数据库,以及如何保存是本环节的重点。
分析
对网页进行文本分析,是提取链接还是提取文本,总之看你的需求,但必须要做的是分析链接。通常分析和存储是交替进行的。你可以使用你认为最快、最优化的方式,比如正则表达式。然后将分析结果应用于其他链接。
展示
如果你做了一堆事情,根本不显示任何输出,你如何显示价值?
所以找到好的展示元件,展示肌肉也是关键。
如果你想写爬虫为了做一个站,或者你想分析某个东西的数据,不要忘记这个链接,这样可以更好的把结果展示给别人。
编写爬虫代码 Step.1 页面分析
现在我们一步一步完成我们的爬虫,目标是爬取博客园第1页到第200页的4000篇文章文章,获取作者信息,并保存分析。
一共有4000篇文章文章,所以我们首先要获取这4000篇文章文章的入口,然后异步并发请求4000篇文章文章的内容。但是这 4000 篇文章的入口 URL 文章 分布在 200 个页面中。所以我们要做的第一步是从这 200 个页面中提取 4000 个 URL。并且以异步并发的方式,当采集到 4000 个 URL 时,进行下一步。所以现在我们的目标很明确:
Step2.获取4000文章Entry URLs
要得到这么多的URL,还是得先分析单页,F12打开devtools。不难发现文章入口链接存储在titlelnk类的标签中,所以4000个URL需要我们轮询200个列表页面,每个页面保存20个链接。那么如何从 200 个页面中异步并发采集这 4000 个 URL 呢?继续查找规则,查看每个页面的列表页面的URL结构:
然后,页面 1 到 200 的列表页面 URL 应如下所示:
<p>for(var i=1 ; i