js 爬虫抓取网页数据(知乎的数据感兴趣-api,用于简化数据的应用方法)

优采云 发布时间: 2021-11-21 18:11

  js 爬虫抓取网页数据(知乎的数据感兴趣-api,用于简化数据的应用方法)

  一、简介

  刚接触爬虫的时候,发现了一个名为“豆瓣女孩”的网站,写了一个简单的程序,可以批量下载图片。后来陆续抢了豆瓣电影、Google+、facejoking等网站。毕集的选题也是抢新浪微博,然后分析博文的传播情况。最近对知乎的数据很感兴趣,所以开发了Node模块知乎-api,简化数据抓取。

  一般来说,所谓爬虫无非就是通过程序发送HTTP请求。因此,理论上所有浏览器可以访问的内容都可以通过爬虫进行爬取。

  一般来说,我们感兴趣的信息只是页面中数据的某一部分,例如:标签的文字、链接地址、图片地址等。一些网站会提供开放的API(往往有很多限制),那么你只需要直接请求API,就可以得到比较干净的数据,比如Google+。对于那些没有开放API的网站,需要发送HTTP请求获取页面数据,然后解析页面获取需要的数据。但是,网站 的部分页面内容是通过脚本动态生成的。这种情况下,需要做的事情比较多,后面会提到。

  二、发送请求

  回想一下 HTTP 请求的基本组成部分:请求行、标头和请求正文。发送请求与这三部分密切相关,需要注意的主要有:url、method、headers和body。在这里,DevTools 在查看每个请求的详细信息方面会起到非常重要的作用。

  对于标题,需要注意的主要事项是:

  三、模拟登录

  很多网站需要登录才能获取内容。登录的最简单方法是用户名和密码。在这种情况下,您可以通过程序维护一个会话,使用用户名和密码登录,然后使用会话发送请求。

  但是现在很多网站登录比较复杂,有的需要输入复杂的验证码,有的还需要手机验证。这些情况往往比较麻烦。如果还是用Session的方法,通常实现起来比较麻烦。考虑到Session只是维护一些状态如Cookies,在这种情况下,直接用Cookie来模拟登录是一种简单粗暴的方法。.

  使用cookies模拟登录是指用户首先在浏览器中登录网站,然后复制cookie信息设置请求的cookie头。

  四、页面分析

  在很多情况下,爬虫抓取的内容是一个 HTML 页面或 HTML 片段。为了提取我们需要的数据,我们需要对其进行分析。常见的解析方法有:

  对于一些比较简单的数据提取,比如提取页面中的所有图片地址,可以使用常规规则来完成。但是对于一些复杂的分析,常用的方法是通过DOM。

  五、多线程爬取

  一次发送一个请求效率太低。为了实现快速的数据捕获,经常使用多线程来捕获。

  对于Node.js来说,虽然是单线程执行,但是因为是异步IO,其实跟多线程的效果差不多。

  六、反爬虫

  许多网站已经为爬虫设置了反爬虫机制。常见的有:

  七、其他动态内容:对于很多网页的动态内容,可以通过DevTools查看。对于更复杂的动态内容,可以考虑使用 Selenium 和 Phantomjs。

  数据存储:对于多媒体文件,直接保存文件。对于JSON格式的数据,使用MongoDB非常方便。

  容错机制:请求失败可能有多种情况。如果访问频率过快,可以考虑暂停一段时间,或者更换账号或IP。如果是404,可以直接跳过fetch。但是,有些站点返回的HTTP状态码不一定符合其初衷。所以也可以考虑统一容错处理,比如重试n次,失败则丢弃。

  *敏*感*词*分布式爬取:暂时没有太多研究,以后可能会开新文章文章。

  常用工具:Python 的 requests 和 BeautifulSoup,Node 的 requests 和cheerio。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线