首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >抓取使用cookies和fids的站点

抓取使用cookies和fids的站点
EN

Stack Overflow用户
提问于 2015-02-23 04:29:10
回答 1查看 240关注 0票数 0

我在试着抓取this site。如果单击county,然后单击continue (如果您喜欢,请选择一个州和/或年份),您将获得一个表。然而,该网站使用cookies和隐藏字段,如as_sfidas_fid,这使得这不是直接的。我使用的是request module,据我所知,我正在为第二个请求捕获cookie和所需的formData,但我得到的html是一个错误页面,上面写着“对象已移动”。如果查看浏览器发出的请求,您将看到发出的另一个get请求没有收到响应。我试着把它放在当前的两个请求之间,以防万一,但这并没有改变任何事情。

代码语言:javascript
运行
复制
var util        = require('util');
var debug       = require('debug')('app');
var _           = require('lodash');
var MongoClient = require('mongodb').MongoClient;
var $           = require('cheerio');
var request     = require("request");
request         = request.defaults({ jar: true });
var j           = request.jar();

var inspect = _.partialRight(util.inspect, false, null)

var url = 'mongodb://localhost:27017/mydb';

MongoClient.connect(url, function(err, db) {
    if(err) {
        debug(err);
    } else {
        var collection = db.collection('FDIC');
        var getUrl = 'https://www2.fdic.gov/sod/sodSummary.asp?barItem=3';
        request.get({ url: getUrl, jar: j }, function(err, res) {
            if(err) {
               debug('err:', err);
            } else {
                $ = $.load(res.body.toString());
                var sfid = $("input[name='as_sfid']")['0'].attribs.value;
                var fid = $("input[name='as_fid']")['0'].attribs.value;
                var formData = {
                    sInfoAsOf: "2014",
                    barItem: 3,
                    sSummaryList: 8,
                    as_sfid: sfid,
                    as_fid: fid
                };
                debug('formData:', formData)
                debug('cookies:', j.getCookies(getUrl))
                var postUrl = 'https://www2.fdic.gov/sod/SODSummary2.asp';
                //var postUrl = 'https://www2.fdic.gov/sod/SODSumReport.asp';
                request.post({ url: postUrl, formData: formData, jar: j }, function(err, res2) {
                    if(err) {
                        debug('res2:', err);
                    } else {
                        debug('--->', inspect(res2.body));
                        db.close()
                    }
                });
            }
        });
    }
});

如果你想运行这个项目,我也做了a gist,这里是the repo

编辑:我忘了提到,如果您打印cheerio找到的结果,则每个输入查询都有两个结果。这很奇怪,因为当我浏览html时,我只能找到每个as_fid中的一个(一个as_sfid和一个html)。无论如何,我决定尝试所有的组合,所有的组合都会产生相同的结果。

EN

回答 1

Stack Overflow用户

发布于 2015-03-07 03:25:09

您必须调用JS函数submitReport(),这是为每个锚标记定义的onclick操作,以模拟浏览器正在执行的操作,而不是直接执行post。此外,我建议您使用Phantom JS而不是使用普通请求,因为Phantom JS具有完整的web堆栈,这将更真实地模拟浏览器请求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28662859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档