npm 包 cfscrape 使用教程

阅读时长 4 分钟读完

在前端开发过程中,我们经常需要和爬虫打交道,而有些网站为了防止爬虫的攻击,会设置验证码或者需要有一些特殊的 cookie 才能够访问,这就给爬虫带来了一定的难度。

而在使用 Node.js 进行爬虫开发时,可以使用 npm 包 cfscrape 来解决这种问题。cfscrape 可以让你在模拟浏览器获取网页内容时绕过 Cloudflare 等 CDN 保护。

本文将介绍如何使用 cfscrape 进行爬虫开发,并通过一些实例来加深对 cfscrape 的理解。

安装

使用 npm 安装:

怎么用

使用 cfscrape 爬取网页的代码很简单,以下是一个简易的例子,由于技术文档库的 API 已禁止内容的爬取,此处仅作为示例:

-- -------------------- ---- -------
----- -------- - --------------------
----- ------- - ---------------------------
----- ------- - -------------------

----- -------- --------- -
  ----- ------- - ----- ------------------
  ----- ------- - -
    ---- -------------------
    -------- -
      -------------
        ------------ -------- -- ----- ------ ---- ------------------ ------- ---- ------ -------------------- ---------------
    --
    --------------- -
      ------ -------------------
    --
    ----- -----
    ---------- ------
    ------------------- -----
    ------------------------ -----
    ------ --------
  --
  ----- -------- - ----- -----------------
  ----- - - --------------

  -- ---- --- ---
-

----------

代码中,我们引入了 cfscrape、request-promise 和 cheerio 三个模块,其中 cfscrape.create() 生成一个绕过 Cloudflare 等 CDN 保护的请求头,request-promise 用于发起 HTTP 请求,cheerio 用于解析 HTML DOM。

在 getPage 函数中,首先我们使用 await 等待 scraper 的生成并将其作为 agent 传入 options 请求头中。我们同时也定义了一些请求头信息,这些信息应该清楚地传递请求的来源,避免被屏蔽。在 options 的 transform 中,使用 cheerio 转化 HTML DOM,处理的是反馈数据的内容(response.body)。根据需要,我们可以进一步使用 $ 选择器来操作页面 DOM。

Q&A

cfscrape 能绕过哪些保护?

cfscrape 主要是针对 Cloudflare 这样的 CDN 保护设计的,包括 Cloudflare's "I'm Under Attack Mode"。

有哪些可选配置?

以下是在 options 中可以配置的一些选项:

  • uri: 要请求的网址
  • headers: 请求头信息
  • transform: 用于处理响应的函数
  • gzip: 网址提供 gzip 表压缩时,是否自动解压
  • strictSSL: 是否严格检查证书
  • followAllRedirects: 是否跟踪重定向。
  • resolveWithFullResponse: 是否包含完整 HTTP 响应
  • agent: 自定义请求 agent

怎样解决读取数据出现的问题?

有时候,在 requests.get() 中设置 keep_cookies 为 True 也无法让你读取数据,这时候可以使用 tornado.httpclient.HTTPClient.context 进行尝试。

对于大量数据,怎样进行分页读取?

对于大量数据,需要进行分页读取,可以通过给链接设置参数(如 offset、page 等),从而使链接逐渐递增以读取数据。如果分页较多,可以使用 async 完成分页读取,同时也可以使用 async 控制请求的流速,防止被网站识别成机器人。

结论

通过本文的介绍和示例,我们可以看出,cfscrape 是一个非常好用的 npm 包,可以让我们方便地绕过 CDN 等保护,实现数据爬取和分析。当然,我们也应该注意使用 cfscrape 的方法和技巧,以避免被网站识别为机器人。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600671d430d0927023822a03

纠错
反馈