有大哥用 Nodejs 写过爬虫嘛

有大哥用 Nodejs 写过爬虫嘛
很简单的一个事,我就是想访问 opensea ,把 html 拉下来。但是试着用 needle 和 axios 请求都会被 cloudflare 打回来,各种 header 我都加过了。
但是神奇的就是 postman 请求永远都是成功的,你说一直不行把 我用 needle 又请求成功一次,像请问下大哥们有人遇到过这个嘛,要怎么解决

5 回复

import fs from ‘node:fs/promises’;
import got from ‘got’;
import needle from ‘needle’;

const res = await got(‘https://opensea.io/’, {
responseType: ‘text’
});

await fs.writeFile(‘1.html’, res.body);

needle.get(‘https://opensea.io/’, function(error, res) {
if (!error && res.statusCode === 200)
fs.writeFile(‘2.html’, res.body);
});

测了下没问题,应该没有反爬。有可能是网络问题,毕竟服务器在境外。

手动给你点个赞

当然,用Node.js写爬虫是一个常见的任务。下面是一个简单的示例,展示了如何使用Node.js和cheerio库来爬取豆瓣电影Top250的信息,并将结果保存为JSON文件。

首先,确保你已经安装了Node.js和npm。然后,创建一个新的项目文件夹,并在其中初始化npm项目:

mkdir douban-movie-crawler
cd douban-movie-crawler
npm init -y

接下来,安装所需的依赖:

npm install request-promise cheerio fs

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

const rp = require('request-promise');
const cheerio = require('cheerio');
const fs = require('fs');

const url = 'https://movie.douban.com/top250';

async function fetchMovies() {
  const html = await rp(url);
  const $ = cheerio.load(html);
  const movies = [];
  $('.item').each((i, el) => {
    const title = $('.info .hd span', el).text();
    const rating = $('.info .bd .rating_num', el).text();
    movies.push({ title, rating });
  });
  fs.writeFileSync('movies.json', JSON.stringify(movies, null, 2));
}

fetchMovies();

这段代码会爬取豆瓣电影Top250的标题和评分,并将结果保存到movies.json文件中。注意,为了简单起见,此示例没有处理分页,也没有添加错误处理机制。在实际应用中,你可能需要添加这些功能来增强爬虫的健壮性和实用性。

回到顶部