Nodejs下douban的www域名request抓不到吗?

Nodejs下douban的www域名request抓不到吗?

看了很多例子都是拿douban做爬虫的例子…

然后我也试试.

发现 request(‘http://movie.douban.com/’) 有用

request(‘http://www.douban.com/’) 没用

是什么原因呢?

8 回复

在Node.js中使用request库请求豆瓣的www域名时遇到问题是很常见的。这通常是由于以下几个原因造成的:

  1. 反爬虫机制:豆瓣网站可能对非浏览器用户代理进行限制。
  2. 重定向问题:有些网站会将HTTP请求重定向到HTTPS,而request库默认不处理重定向。
  3. Cookies和其他头部信息:某些站点需要特定的cookies或头部信息才能正常访问。

下面是一个简单的示例代码,展示如何解决上述问题:

const request = require('request');
const url = 'https://www.douban.com/';

// 使用一个有效的User-Agent,并设置请求跟随重定向
const options = {
    url: url,
    headers: {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
    },
    followRedirect: true
};

request(options, (error, response, body) => {
    if (!error && response.statusCode == 200) {
        console.log(body); // 输出响应体
    } else {
        console.error(error || `Failed to fetch ${url}`);
    }
});

解释:

  1. User-Agent:我们设置了User-Agent为一个模拟浏览器的值,以避免被服务器识别为爬虫并拒绝请求。
  2. followRedirect:我们将followRedirect设置为true,以便自动处理重定向。
  3. 错误处理:我们检查是否有错误发生,并且响应状态码是否为200(成功)。

通过这种方式,你可以尝试访问www.douban.com并获取页面内容。如果仍然无法获取内容,你可能需要进一步分析响应头信息,或者使用更高级的工具如axiospuppeteer来处理更复杂的场景。


我也测试了一下 好像真的没用

douban主站禁了空的user-agent

####亲测:

body: '<html>\r\n<head><title>403 Forbidden</title></head>\r\n<body bgcolor="white">\r\n<center><h1>403 Forbidden</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n'

你们这些淫啊,把user agent 设置为 GFW ,douban 速度就尿了。。。

233333

在 Node.js 中使用 request 库抓取豆瓣网站(特别是 www.douban.com)时遇到问题,可能是由于多种原因导致的。一种常见的情况是目标网站可能使用了反爬虫技术,比如检查请求头中的 User-Agent 字段或 IP 地址。

示例代码

这里有一个简单的示例代码来测试对 www.douban.com 的请求,并设置一些常见的请求头:

const request = require('request');

// 设置请求头
const options = {
    url: 'https://www.douban.com/',
    headers: {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
    }
};

function callback(error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body); // 打印网页内容
    } else {
        console.error(`请求失败: ${error}`);
    }
}

request(options, callback);

解释

  1. User-Agent: 许多网站会根据 User-Agent 来判断是否接受你的请求。如果你使用的是默认的 Node.js 请求头(通常为类似 “Request” 的值),网站可能会认为这是一个爬虫并拒绝响应。

  2. HTTPS: 豆瓣现在使用 HTTPS 协议(https://www.douban.com/),因此确保你在请求中使用正确的协议。

  3. 反爬虫策略: 如果上述方法仍然无法获取页面内容,说明网站可能采取了更复杂的反爬虫措施,例如 IP 黑名单、动态加载内容等。这种情况下,可能需要使用更高级的技术如使用 puppeteer 或其他自动化工具来模拟浏览器行为。

如果还是无法抓取到页面内容,建议检查网络连接、确认使用的 Node.js 版本是否支持最新协议,以及是否需要登录或使用 cookies 等其他信息。

回到顶部