我正在尝试使用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)
}
}
);
但由于我无法在dev工具中看到表单数据的存储位置,因此无法在“表单”对象中发送正确的值。我很确定它是在请求有效负载中,但我如何从我的节点应用程序中获得它?
有更简单的方法吗?我是在浪费时间吗?
答案 0 :(得分: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的邮递员扩展中做到这一点,但没有运气。
答案 1 :(得分: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)
}
}
);