有大哥用 Nodejs 写过爬虫嘛
有大哥用 Nodejs 写过爬虫嘛
很简单的一个事,我就是想访问 opensea ,把 html 拉下来。但是试着用 needle 和 axios 请求都会被 cloudflare 打回来,各种 header 我都加过了。
但是神奇的就是 postman 请求永远都是成功的,你说一直不行把 我用 needle 又请求成功一次,像请问下大哥们有人遇到过这个嘛,要怎么解决
puppeteer
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
文件中。注意,为了简单起见,此示例没有处理分页,也没有添加错误处理机制。在实际应用中,你可能需要添加这些功能来增强爬虫的健壮性和实用性。