在Debian上做爬虫开发,Node.js是个相当顺手的工具。具体怎么搭起来?下面一步步拆解,保证清晰好上手。

如何在Debian上使用Node.js进行爬虫开发

1. 安装Node.js

先解决环境问题。Debian系统上装Node.js,推荐用NodeSource的二进制分发库,版本随你挑,这里以14.x为例。

使用NodeSource安装Node.js

  1. 添加NodeSource库:打开终端,跑下面这条命令,把14.x版本的源加进去(想换其他版本,改一下URL里的版本号就行):

    curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
  2. 安装Node.js:接着执行这条,Node.js和npm一次性搞定:

    sudo apt-get install -y nodejs
  3. 验证安装:装完检查一下,跑下面两个命令,看到版本号就说明成了:

    node -v
    npm -v

2. 创建一个新的Node.js项目

工作目录里建个新项目,名字随便起,比如叫my-crawler

mkdir my-crawler
cd my-crawler
npm init -y

npm init -y会快速生成一个默认的package.json,省得手动填一堆信息。

3. 安装爬虫相关的库

发HTTP请求用axios(或者request,不过axios更现代),解析HTML用cheerio——这两个是爬虫黄金搭档。

安装axios和cheerio

npm install axios cheerio

装完就能在项目里直接require了。

4. 编写爬虫代码

新建一个index.js,把下面这段代码贴进去。这是一个最简示例:抓取目标网页的标题并打印出来。

const axios = require('axios');
const cheerio = require('cheerio');

async function crawl(url) {
  try {
    const response = await axios.get(url);
    const html = response.data;
    const $ = cheerio.load(html);
    const title = $('title').text();
    console.log(`Title of the page: ${title}`);
  } catch (error) {
    console.error(`Error fetching the page: ${error.message}`);
  }
}

// 替换为你想要爬取的URL
crawl('https://example.com');

逻辑很直白:axios拿到页面HTML,cheerio解析DOM,然后提取</code>标签里的文本。当然,实际爬虫要处理的东西多得多,这只是个起步。</p> <h3>5. 运行爬虫</h3> <p>终端里跑下面这条命令,就能看到效果:</p> <pre class="hljs"><code>node index.js</code></pre> <p>如果一切正常,控制台会输出那个页面的标题。</p> <h3>6. 处理更复杂的爬虫任务</h3> <p>真实场景往往没这么简单,你可能需要面对下面这些情况:</p> <ul> <li><strong>分页爬取</strong>:用循环加条件判断,一页一页翻过去,直到没有下一页为止。</li> <li><strong>异步请求</strong>:用<code>Promise.all</code>或者<code>async/await</code>并行处理多个URL,能大幅提升效率。</li> <li><strong>反爬虫机制</strong>:设置合适的请求头(比如<code>User-Agent</code>)、使用袋里IP、控制请求频率(加个延时),这些是常规操作。</li> </ul> <p>每个点展开都能写一篇长文,但核心思路就这些——遇到具体问题再针对性解决。</p> <h3>7. 部署爬虫</h3> <p>要是想把爬虫长期挂在<a href="https://www.fastadmin.net/go/aliyun" target="_blank">服务器</a>上跑,可以用PM2这个进程管理工具,它能帮你自动重启、记录日志,省心不少:</p> <pre class="hljs"><code>npm install pm2 -g pm2 start index.js --name my-crawler</code></pre> <p>跑完这条命令,爬虫就在后台默默工作了,哪怕终端关了也不影响。</p> <h3>总结</h3> <p>从装Node.js到写一个能跑起来的爬虫,再到应对复杂场景和部署,以上步骤基本覆盖了Debian上用Node.js做爬虫开发的全流程。实际项目里可以根据需求灵活扩展,比如加个数据库存数据、用Puppeteer处理动态页面,但底层逻辑还是这些。动手试试,遇到坑再回来翻翻这篇文章,应该能解决大部分问题。</p> </div> <div class="laiyuan"> 本文转载于:https://www.yisu.com/ask/59778258.html 如有侵犯,请联系zhengruancom@outlook.com删除。<br/>免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。 </div> <div class="legal_box2"> <div class="legal_title"> <h2>同类商品 <em></em></h2> <div class="clear"></div> </div> <ul class="shapo_list"> <li> <a href="https://m.zhengruan.com/news/soft69"> <div class="img_box"> <img src="https://m.zhengruan.com/uploads/20200428/cd14258f0172a172f8a80798c38c1577.jpg" alt="DAEMON Tools Lite 10"> </div> <h2> DAEMON Tools Lite 10 </h2> <p> <em>¥</em>0.00 <del>¥0.00 </del> </p> </a> </li> <li> <a href="https://m.zhengruan.com/news/soft67"> <div class="img_box"> <img src="https://m.zhengruan.com/uploads/20200428/fbf473d4d30833324962e441c0f18265.jpg" alt="DAEMON Tools Ultra 5"> </div> <h2> DAEMON Tools Ultra 5 </h2> <p> <em>¥</em>0.00 <del>¥0.00 </del> </p> </a> </li> <li> <a href="https://m.zhengruan.com/news/soft68"> <div class="img_box"> <img src="https://m.zhengruan.com/uploads/20200428/1ae250399abf4ff584d86d52c79b5bb6.jpg" alt="DAEMON Tools Pro 8"> </div> <h2> DAEMON Tools Pro 8 </h2> <p> <em>¥</em>0.00 <del>¥0.00 </del> </p> </a> </li> <li> <a href="https://m.zhengruan.com/news/soft29"> <div class="img_box"> <img src="https://m.zhengruan.com/uploads/20200428/77d3c04866e1b842d9b6ff0e9368bdf8.jpg" alt="CorelDRAW X8 简体中文"> </div> <h2> CorelDRAW X8 简体中文 </h2> <p> <em>¥</em>0.00 <del>¥0.00 </del> </p> </a> </li> <div class="clear"></div> </ul> </div> <div class="legal_box2"> <div class="legal_title"> <h2>相关文章 <em></em></h2> <a href="https://m.zhengruan.com/newslist/313_1"> 更多 <em class="icon"></em></a> <div class="clear"></div> </div> <ul class="gal_article_list"> <li> <a href="https://m.zhengruan.com/news/425221"> <em class="icon"></em> <p> ~a在C语言中是按位取反操作符,用于对变量a的每一位进行取反操作。具体来说,如果某一位是0,则变为1;如果是1,则变为0。需要注意的是,C语言中并没有“~”这个 </p> </a> </li> <li> <a href="https://m.zhengruan.com/news/736200"> <em class="icon"></em> <p> using namespace 使用中遇到的问题怎么解决 </p> </a> </li> <li> <a href="https://m.zhengruan.com/news/736199"> <em class="icon"></em> <p> c语言函数递归 实操经验总结:这些技巧很实用 </p> </a> </li> <li> <a href="https://m.zhengruan.com/news/736198"> <em class="icon"></em> <p> c语言函数递归 怎么选?常见方案对比分析 </p> </a> </li> <li> <a href="https://m.zhengruan.com/news/736197"> <em class="icon"></em> <p> Objective-C 内存管理入门:从 alloc 到 dealloc 的生命周期详解 </p> </a> </li> </ul> </div> </main> <footer> <div class="main_foot"> <a href="https://m.zhengruan.com" class="foot_logo"><img src="https://m.zhengruan.com/statics/mob/zrimages/logo_b.png" alt="正软"></a> <p>联系方式: bd@zhengruan.com<br>网站备案号:苏ICP备2026018738号-1</p> <ul> <li class="one"><a href="https://m.zhengruan.com" class="cBlack"><b class="i_index"></b>首页</a></li> <li><a href="http://www.zhengruan.com" class="cBlack"><b class="i_pc"></b>电脑端</a></li> <li><span class="return_top"><b class="i_top"></b>顶部</span></li> </ul> </div> </footer> <script> var _hmt = _hmt || []; (function () { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?3835539565b311d85319cd21da8fd0d9"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <!-- Matomo --> <script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function () { var u = "https://tongji.php.cn/"; _paq.push(['setTrackerUrl', u + 'matomo.php']); _paq.push(['setSiteId', '36']); var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0]; g.async = true; g.src = u + 'matomo.js'; s.parentNode.insertBefore(g, s); })(); </script> <!-- End Matomo Code --> </body> <script> function countView(){ $.ajax({ type: "post", url: "/countView?&time="+new Date().getTime(), data:{'type':'news','id':"719755"}, async:false, dataType: "json", success: function(result){ console.log(result) }, error:function(){ } }); } $(function(){ countView(); }) </script> </html>