Nodejs博客爬虫技术分享(9.26日更新书籍爬取实例)

Nodejs博客爬虫技术分享(9.26日更新书籍爬取实例)

其实很多人 node 入门也都是爬虫,对有收集癖的人来说挺好的。

9 回复

Node.js 博客爬虫技术分享 (9.26 日更新书籍爬取实例)

引言

Node.js 是一个基于 Chrome V8 JavaScript 运行时的服务器端 JavaScript 环境。它非常适合用来编写网络爬虫,因为它可以异步处理请求,并且拥有大量的库来简化 HTTP 请求、HTML 解析等操作。对于那些喜欢收集信息的人来说,编写一个简单的爬虫是一个很好的入门项目。

基础环境搭建

首先,确保你已经安装了 Node.js 和 npm(Node 包管理器)。你可以通过以下命令来检查是否已安装:

node -v
npm -v

如果未安装,可以从 Node.js 官网 下载并安装最新版本。

使用 axioscheerio 进行网页抓取

为了进行网页抓取,我们需要两个主要的库:axios 用于发送 HTTP 请求,cheerio 用于解析 HTML 文档。

  1. 安装依赖

    首先,创建一个新的 Node.js 项目目录并初始化:

    mkdir blog-crawler
    cd blog-crawler
    npm init -y
    

    接着,安装 axioscheerio

    npm install axios cheerio
    
  2. 编写爬虫脚本

    创建一个名为 crawler.js 的文件,并添加以下代码:

    const axios = require('axios');
    const cheerio = require('cheerio');
    
    async function fetchBlogPosts() {
      try {
        const response = await axios.get('https://example.com/blog');
        const $ = cheerio.load(response.data);
    
        // 选择需要提取的数据
        const posts = [];
        $('.post').each((index, element) => {
          const title = $(element).find('.title').text();
          const link = $(element).find('.link').attr('href');
          posts.push({ title, link });
        });
    
        console.log(posts);
      } catch (error) {
        console.error('Error fetching blog posts:', error);
      }
    }
    
    fetchBlogPosts();
    

    在上面的代码中,我们首先使用 axios 发送 GET 请求到目标网站,然后使用 cheerio 加载返回的 HTML 文档。接着,我们遍历所有 .post 类型的元素,提取每个帖子的标题和链接,并将它们存储在一个数组中。

  3. 运行爬虫脚本

    通过以下命令运行脚本:

    node crawler.js
    

    如果一切正常,你应该能看到从目标网站抓取到的博客文章列表。

更新:书籍爬取实例

在 9 月 26 日的更新中,我们将爬虫功能扩展到了书籍信息的抓取。假设我们要抓取某个书籍网站上的书籍信息,可以参考以下代码:

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

async function fetchBooks() {
  try {
    const response = await axios.get('https://example.com/books');
    const $ = cheerio.load(response.data);

    const books = [];
    $('.book').each((index, element) => {
      const title = $(element).find('.title').text();
      const author = $(element).find('.author').text();
      const price = $(element).find('.price').text();
      books.push({ title, author, price });
    });

    console.log(books);
  } catch (error) {
    console.error('Error fetching books:', error);
  }
}

fetchBooks();

这段代码与之前的博客爬虫类似,只是我们修改了选择器以匹配书籍页面的结构。你可以根据实际页面结构调整选择器。

结语

通过上述示例,你可以看到使用 Node.js 编写爬虫是多么简单。希望这篇文章能帮助你入门并激发你进一步探索更多高级的爬虫技术。


比如说这里就是汉纸们的福利。

看到精华有些受宠若惊,感谢大家支持~

前阵才写了一个下小说的(本人不看小说),那个站居然还不防爬虫,太爽了。

哪个站防爬虫,我想挑战一下,还没遇见过爬不到的。

更新了书籍爬虫部分

mark

9.26更新~~

Node.js 博客爬虫技术分享 (9.26日更新书籍爬取实例)

爬虫基础知识

爬虫是一种自动化工具,用于从互联网上抓取数据。在 Node.js 中,我们可以使用 axioscheerio 这两个库来实现网页的请求和解析。

  • axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js。
  • cheerio 提供了类似 jQuery 的 API 来解析 HTML 文档。

示例代码

博客文章爬取

假设我们要爬取一个博客网站(例如 Medium),获取每篇文章的标题和链接。

  1. 安装必要的依赖:
npm install axios cheerio
  1. 编写爬虫代码:
const axios = require('axios');
const cheerio = require('cheerio');

async function fetchBlogPosts(url) {
    try {
        const response = await axios.get(url);
        const $ = cheerio.load(response.data);

        // 选择器根据实际网站结构调整
        const posts = [];
        $('.post-item').each((index, element) => {
            const title = $(element).find('.post-title').text().trim();
            const link = $(element).find('.post-title a').attr('href');
            posts.push({ title, link });
        });

        return posts;
    } catch (error) {
        console.error(error);
    }
}

// 使用示例
fetchBlogPosts('https://example.com/blog')
    .then(posts => console.log(posts))
    .catch(console.error);
书籍信息爬取

假设我们要爬取一个图书网站(例如豆瓣),获取每本书的书名和评分。

  1. 安装必要的依赖:
npm install axios cheerio
  1. 编写爬虫代码:
const axios = require('axios');
const cheerio = require('cheerio');

async function fetchBooks(url) {
    try {
        const response = await axios.get(url);
        const $ = cheerio.load(response.data);

        // 选择器根据实际网站结构调整
        const books = [];
        $('.book-list-item').each((index, element) => {
            const title = $(element).find('.title').text().trim();
            const rating = $(element).find('.rating').text().trim();
            books.push({ title, rating });
        });

        return books;
    } catch (error) {
        console.error(error);
    }
}

// 使用示例
fetchBooks('https://book.douban.com')
    .then(books => console.log(books))
    .catch(console.error);

注意事项

  1. 遵守robots.txt文件:确保你的爬虫不会违反目标网站的爬虫政策。
  2. 反爬机制:一些网站可能会采取反爬措施,如验证码、IP封禁等,需要处理这些情况。
  3. 频率控制:不要频繁请求目标网站,以免给服务器带来过大负担。

希望这些示例能帮助你更好地理解和使用 Node.js 进行爬虫开发!

回到顶部