2

我正在尝试使用 Request 和 Cheerio 从https://www.freelance.nl/opdrachten/zoeken获取数据,但我在发布搜索词时遇到了问题。

在使用网站时,我看不到搜索字符串和所选类别在帖子中的发送位置,以及如何在请求中使用它们来自动从我的节点应用程序进行搜索。

基本上我希望能够使用 Request 发送不同的搜索词,然后我可以抓取返回的 html 以获得我需要的数据。

到目前为止,我有这个:

request.post('https://www.freelance.nl/opdrachten/zoeken', { form: { key: 'value' } },
    function (error, response, body) {
        if (!error && response.statusCode == 200) {
            console.log(body)

        }
    }
);

但是由于我看不到表单数据在开发工具中的存储位置,因此我无法在“表单”对象中发送正确的值。我很确定它在请求有效负载中,但是我如何从我的节点应用程序中获得它?

有没有更简单的方法来做到这一点?我完全是在浪费时间吗?

开发工具截图

4

2 回答 2

0

我稍微修改了您的代码:

payload = {'projectFilterForm[keywords]':'javascript','projectFilterForm[category][]': '1'}
request.post('https://www.freelance.nl/opdrachten/zoeken', { data:payload },
function (error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body)
    }
}

);

于 2015-07-08T13:25:53.193 回答
0

睁开你的眼睛;)在图像的底部,查看请求有效负载

projectFilterForm[keywords]
projectFilterForm[category][]
projectFilterForm[province][]

更新

var request = require('request');
var querystring = require('querystring');

require('request').debug = true;

var data = querystring.stringify({
    'projectFilterForm[keywords]': 'java'
});

var options = {
    followAllRedirects: true,
    uri: 'https://www.freelance.nl/opdrachten/zoeken',
    method: 'POST',
    headers: {
        'Content-Length': Buffer.byteLength(data),
        'cache-control': 'no-cache',
        'Content-Type': 'multipart/form-data',
        'origin': 'https://www.freelance.nl',
        'referer': 'https://www.freelance.nl/opdrachten/zoeken',
        'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36'
    }
};

var req = request(options, function (error, response, body) {
    console.log(body);
});

req.write(data);
req.end();

我尝试了一切 =)) 没有...重定向后,我们得到默认页面。也许他们使用了一些会话基础保护?

这不是节点的问题。即使在 chrome 的邮递员扩展中,我也尝试过这样做,但没有运气。

于 2015-07-08T12:12:30.017 回答