Javascript 如何查找在检查器上执行的特定事件>;网络(网络抓取)?
我一直在使用下面的内容来学习如何使用网页抓取。我已经设法完成了一些修改教程,由于具体的改变了他们的核心结构。本教程使用的代码可以在以下位置找到:。现在,我想修改此代码,使其符合我的目标: “使用其他网站的搜索引擎,尝试将该页面中的数据(即职位)返回到我的节点控制台。” 在YouTube教程中,这个名为“检索数据”的事件是由演示者指定的,但没有解释他是如何使用它的。在我试图检索信息的网站中,该页面上有390个事件。我想确定在提交时为搜索引擎调用了哪个Javascript 如何查找在检查器上执行的特定事件>;网络(网络抓取)?,javascript,jquery,node.js,web-scraping,Javascript,Jquery,Node.js,Web Scraping,我一直在使用下面的内容来学习如何使用网页抓取。我已经设法完成了一些修改教程,由于具体的改变了他们的核心结构。本教程使用的代码可以在以下位置找到:。现在,我想修改此代码,使其符合我的目标: “使用其他网站的搜索引擎,尝试将该页面中的数据(即职位)返回到我的节点控制台。” 在YouTube教程中,这个名为“检索数据”的事件是由演示者指定的,但没有解释他是如何使用它的。在我试图检索信息的网站中,该页面上有390个事件。我想确定在提交时为搜索引擎调用了哪个请求URL。屏幕截图如下所示: 我搜索了所有
请求URL
。屏幕截图如下所示:
我搜索了所有事件,并试图找到搜索引擎调用的事件。我在图中突出显示了对我更有意义的事件名称,但我不确定是否是这样
我还尝试在Stack Overflow的搜索引擎中查找调用的事件(请求URL
),但找不到从Inspector>网络调用的JS事件
我的目标是确定在任何网站中调用的特定事件。任何信息都将不胜感激,谢谢!:D
更新: 这将返回以下错误:
StatusCodeError: 500 - undefined
at new StatusCodeError (C:\Users\loizo\Desktop\eures_test\node_modules\request-promise-core\lib\errors.js:32:15)
at Request.plumbing.callback (C:\Users\loizo\Desktop\eures_test\node_modules\request-promise-core\lib\plumbing.js:104:33)
at Request.RP$callback [as _callback] (C:\Users\loizo\Desktop\eures_test\node_modules\request-promise-core\lib\plumbing.js:46:31)
at Request.self.callback (C:\Users\loizo\Desktop\eures_test\node_modules\request\request.js:185:22)
at Request.emit (events.js:315:20)
....
您就快到了,在网络工具中,您可以操纵概览来查看请求的各个部分。 打开站点的网络工具,确保首先清除所有请求。然后进行搜索 这比亲自向您展示或播放视频要容易得多。但这里有一组图片可以指导您查看在网站上执行操作时请求的特定部分 请看图片。我在下面分别解释了它们 图1:
- 在这里,我已经加载了您提供的页面,并单击了“检查和网络”选项卡
- 我正在单击您可以看到的红色按钮,以清除服务器的所有这些请求
- 这就是清除请求时的外观
- 我已经搜索了开发人员,您可以在下面看到此操作的请求
- 现在在概览中,您可以选择该操作的请求/响应的部分。在这里,我在练习动作的第一部分。你只需点击并拖动。你自己去感受一下
- 我现在可以看到下面的5个请求
- 前四个请求是GET请求,并没有告诉我们太多
- 第五个请求是POST请求这是一个发布数据的请求,图像右侧的信息将告诉您它发布到哪里以及它得到什么响应
- 这是和以前一样的图片,但是我向下滚动了一下,看到了有效载荷。这是在发布HTTP请求时需要给出的关键内容,以便在此网站上进行搜索
const cheerio = require('cheerio');
const Table = require('cli-table');
const rp = require('request-promise');
const talbe = new Table({
head: ['Job Title', 'URL']
});
const options = {
method: 'POST',
url: 'https://ec.europa.eu/eures/eures-searchengine/page/jv-search/search?lang=en&app=2.4.1-build-2',
json: true,
body: {
"keywords":[{"keyword":"developer","specificSearchCode":"EVERYWHERE"}],"positionScheduleCodes":[],"positionOfferingCodes":[],"educationLevelCodes":[],"euresFlagCodes":[],"nutsCodes":[],"notSpecifiedInNutsCodes":[],"requiredExperienceCodes":[],"solidarityContextCodes":[],"otherBenefitsCodes":[],"occupationUris":[],"includeJobsWithoutBenefits":false,"requiredLanguages":[],"includeJobsWithoutRequiredLanguages":false,"sortSearch":"BEST_MATCH","resultsPerPage":10,"page":1,"sessionId":"g07h0s8tfmmtfr5u9lible"
},
headers: {
'Connection': 'keep-alive',
'ajax-call': 'true',
'Accept': 'application/json, text/plain, */*',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36',
'Content-Type': 'application/json;charset=UTF-8',
'Origin': 'https://ec.europa.eu',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': 'https://ec.europa.eu/eures/eures-searchengine/page/main?lang=en',
'Accept-Language': 'en-US,en;q=0.9',
}
}
rp(options).then(
(data) => {
console.log("Got results =", data);
}
).catch(
(err) => {
console.log(err);
}
);
解释
关于对您自己的代码的添加,我已经指定我们正在执行POST请求
要获得成功HTTP请求所需的其他内容,可以在网络工具中右键单击请求,有很多选项,但可以将其复制到CURL(bash)。我曾经转换curl命令。您可以选择node.js
我复制了那个网站上的标题
body{}
应该包含我们的有效负载,在本例中,我复制了curl.trillworks上的数据字符串
我得到了期望的输出
补充资料
在我了解请求库时很有用,在我使您的代码正常工作后发现了这一点。谢谢您的回复。一旦我回到家,我会立即投入其中,让你知道这是否有效!:看起来我可以通过大致浏览提供的图片来访问搜索引擎。再次感谢@AaronSI在Inspector>网络中找到了我正在寻找的信息。但来自该请求的URL似乎不像其他示例那样加载到节点上。代码在更新中提供。还有关于如何学习所有这些的官方文档吗?您是否尝试过输入您可以从网络工具获得的标题?有时,仅仅发出一个没有头/useragent的HTTP请求将无法获得所需的数据。因此,在options-put-headers:{XXX}中,您还需要放入有效负载,以获取dat
const cheerio = require('cheerio');
const Table = require('cli-table');
const rp = require('request-promise');
const talbe = new Table({
head: ['Job Title', 'URL']
});
const options = {
method: 'POST',
url: 'https://ec.europa.eu/eures/eures-searchengine/page/jv-search/search?lang=en&app=2.4.1-build-2',
json: true,
body: {
"keywords":[{"keyword":"developer","specificSearchCode":"EVERYWHERE"}],"positionScheduleCodes":[],"positionOfferingCodes":[],"educationLevelCodes":[],"euresFlagCodes":[],"nutsCodes":[],"notSpecifiedInNutsCodes":[],"requiredExperienceCodes":[],"solidarityContextCodes":[],"otherBenefitsCodes":[],"occupationUris":[],"includeJobsWithoutBenefits":false,"requiredLanguages":[],"includeJobsWithoutRequiredLanguages":false,"sortSearch":"BEST_MATCH","resultsPerPage":10,"page":1,"sessionId":"g07h0s8tfmmtfr5u9lible"
},
headers: {
'Connection': 'keep-alive',
'ajax-call': 'true',
'Accept': 'application/json, text/plain, */*',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36',
'Content-Type': 'application/json;charset=UTF-8',
'Origin': 'https://ec.europa.eu',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': 'https://ec.europa.eu/eures/eures-searchengine/page/main?lang=en',
'Accept-Language': 'en-US,en;q=0.9',
}
}
rp(options).then(
(data) => {
console.log("Got results =", data);
}
).catch(
(err) => {
console.log(err);
}
);