Я создал сценарий Python, который считывает URL-адреса из текстового файла и использует URL-адреса в l oop для сбора аналогичной информации. Все URL-адреса взяты с одного веб-сайта. Ниже примерно показано, как выглядит код Python.
for url in urls:
x = scrape(url)
if has_changed(x):
notify_me()
else:
continue
К сожалению, этот парсер не работает на некоторых веб-сайтах, так как веб-сайты блокируют большинство парсеров, поэтому я вынужден использовать Node js Puppetteer Stealth библиотека, с которой я не очень знаком, так как Python Pyppeteer заблокирован (вместе с Selenium, requests, requests- html et c.)
Я пытаюсь реализовать синхронный подход из Python в Node JS, но я изо всех сил пытаюсь. На данный момент это моя реализация ...
const puppeteer = require("puppeteer-extra");
// add stealth plugin and use defaults (all evasion techniques)
const StealthPlugin = require("puppeteer-extra-plugin-stealth");
const { url } = require("inspector");
puppeteer.use(StealthPlugin());
// puppeteer usage as normal
async function sad(url, number) {
puppeteer.launch({ headless: true }).then(async (browser) => {
console.log("Running tests..");
const page = await browser.newPage();
await page.goto(url);
await page.screenshot({ path: "test" + number + ".png", fullPage: true });
await browser.close();
console.log(`All done, check the screenshot. ✨`);
});
}
var urls = [
"https://www.example1.com",
"https://www.example2.com",
"https://www.example3.com",
];
function iHateNode() {
for (i in urls) {
sad(urls[i], i);
}
}
iHateNode();
Я создал структуру данных из массива с объектом для каждого вида, как показано ниже.
allUrls = [
{
url: "https://example1.org"
extraInfo : "1234"
}
{
url: "https://example1.org"
extraInfo : "789"
}
{
url: "https://example1.org"
extraInfo : "987"
}
...
]
Намерение состоит в том, что я хочу пройти l oop через каждый URL в массиве allUrls и вызвать скребок Puppetteer. Если информация изменилась, я хочу получить уведомление, а затем изменить соответствующую информацию в allUrls, чтобы отразить это новое изменение (поэтому я не получаю уведомления об этом постоянно). Я не уверен, что асинхронная природа Node JS вызовет проблемы, две функции одновременно пытаются изменить массив allUrls. Я не совсем уверен, что синхронизация - лучший подход и в этом случае, но, по крайней мере, это не должно вызывать ошибок, подобных упомянутой ранее.