【爬虫问题】爬取结果返回 Status code 403



  • 爬取大众点评的查询结果,第一步想要返回北京所有火锅店的名称 (在主页搜索栏输入火锅后的返回页面为爬虫url)。第一步只输出单个页面的结果,但运行以后返回 403,尝试了stackoverflow这个解答link,但仍然返回403。 代码如下:

    var request = require('request');
    var cheerio = require('cheerio');
    var fs = require('fs');
    
    var url = "http://www.dianping.com/search/keyword/2/10_%E7%81%AB%E9%94%85";
    
    
    
    request(url, function(error, response, body) {
      if(error) {
        console.log("Error: " + error);
      }
      console.log(response.statusCode);
    
      var $ = cheerio.load(body);
    
      $('div#shop-all-list > ul > li').each(function( index ) {
        var title = $(this).find('div.tit > a > h4').text().trim();
    
        console.log("Title: " + title);
    
        fs.appendFileSync('shop.txt', title + '\n' );
      });
    
    });
    

    感谢答复~



  • @Lin_Miao【爬虫问题】爬取结果返回 Status code 403 中说:

    爬取大众点评的查询结果,第一步想要返回北京所有火锅店的名称 (在主页搜索栏输入火锅后的返回页面为爬虫url)。第一步只输出单个页面的结果,但运行以后返回 403,尝试了stackoverflow这个解答link,但仍然返回403。 代码如下:

    哈罗!
    这个问题有一些法律敏感. 我就说说原理. 希望对你有帮助.
    理论上服务器是没有办法区分是browser还是crawler的, 因为只要http request一样, 服务器就没有办法区分.
    http request的组成部分大致有:

    1. a request-line: 包括method, protocol, uri… 这些都是一样的
    2. zero or more headers
    3. 空行,象征headers的结束
    4. optional request body

    我们可以看到, 1, 3, 4, 对于无论是browser还是crawler, 都是一样的.
    那么为了思考清楚为什么browser返回200, crawler返回403. 我们只要去看看两个request的不一样的地方即可. User Agent其实也只是一个header而已.

    当然, 我们不推荐这样做, 因为在一些地方, 可能有法律风险.
    希望对你有帮助 =)



  • @兰_绛

    回答得超细致,谢谢啦!


 

与 BitTiger Community 的连接断开,我们正在尝试重连,请耐心等待