Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo implementar la función de rastreo de índices de Baidu

Cómo implementar la función de rastreo de índices de Baidu

Lo que les traigo esta vez es cómo implementar la función de rastreador de Baidu Index y cuáles son las precauciones para implementar la función de rastreador de Baidu Index. El siguiente es un caso práctico, echemos un vistazo.

He leído un artículo esclarecedor antes, que habla sobre la tecnología anti-rastreo frontal de varios fabricantes importantes. Sin embargo, como se menciona en este artículo, no existe un método 100% anti-rastreo. El artículo presenta una forma sencilla de evitar todos estos métodos anti-rastreo de front-end.

El siguiente código toma Baidu Index como ejemplo. El código se ha empaquetado en la biblioteca del nodo rastreador de Baidu Index: instalación pm, o cambie la dirección de descarga a Taobao mirror y luego instale:

npm config set PUPPETEER_DOWNLOAD_HOST=https://npm.taobao.org/mirrors

npm install --save puppeteer

También puedes omitir la descarga de Chromium durante la instalación, especificando esto en el código Ruta local de Chrome para ejecutar:

/ npm

npm install --save puppeteer --ignore-scripts

/ node

puppeteer .launch({ executablePath: '/path/to/Chrome' });

Implementación

Para mayor claridad, a continuación solo se enumeran las partes principales. Para mayor claridad, a continuación solo se enumeran las partes principales. En la parte principal, las partes del código que hacen referencia al selector se reemplazan por... Para obtener el código completo, consulte el repositorio de github en la parte superior del artículo.

Abre la página de índice de Baidu y simula el inicio de sesión.

Lo que hacemos aquí es simular las operaciones del usuario, hacer clic y escribir paso a paso. Los códigos de verificación de inicio de sesión no se manejan aquí. El manejo de códigos de verificación es otro tema. Si ha iniciado sesión en Baidu localmente, generalmente no necesita un código de verificación.

//Inicie el navegador,

//Si el parámetro sin cabeza está configurado en verdadero, Puppeteer operará su Chromium en segundo plano. En otras palabras, no verá el navegador. Proceso de operación

//Establecer en falso; por el contrario, abrirá el navegador en su computadora y mostrará todas las operaciones del navegador.

const browser = aguardar puppeteer.launch({headless: false});

const page = aguardar browser.newPage();

//Abrir Baidu Índice

await page.goto(BAIDU_INDEX_URL);

// Simular inicio de sesión

await page.click('...');

await page.waitForSelecto('...');

//Ingrese la contraseña de la cuenta de Baidu e inicie sesión

await page.type('...');

esperar página.tipo('...', 'nombre de usuario');

esperar página.tipo('...', 'contraseña');

await page.click('...') )

await page.waitForNavigation();

console.log(':white_check_mark: inicio de sesión exitoso');

p>

Simule mover el mouse para obtener los datos requeridos

Debe desplazar la página hasta el área del gráfico de tendencias, luego mover el mouse a una fecha determinada, esperar la solicitud para finalizar, la información sobre herramientas para mostrar el valor y luego tomar una captura de pantalla. Guarde la imagen.

//Obtener las coordenadas del primer día del gráfico

const position = await page.evaluate(() =gt; {

const $image = document.querySelector('...') ;

const $area = document.querySelector('...') ;

const areaRect = $area.getBoundingClientRect() ;

const imageRect = $image.getBoundingClientRect();

const position = await page.evaluate(() =gt; {

// Obtener el coordenadas del primer día de la carta.

getBoundingClientRect();

// Desplácese al área de visualización del gráfico

window.scrollBy(0, areaRect.top);

return { x: imageRect. x , y: 200 };

});

espera página.mouse.move( posición.x, posición.y); waitForSelector ('...');

//Obtener información sobre herramientas

const tooltipInfo = await page.evaluate(() =gt; {

const $tooltip = document.querySelector('...') ;

const $title = $tooltip.querySelector('...') ;

const $value = $tooltip .querySelector('...') ;

const $título = $tooltip.querySelector('...') ;

const $valor = $tooltip.querySelector(' ...')querySelector('...');

const valueRect = $value.getBoundingClientRect();

const padding = 5; return {

título: $title.textContent.split(' ')[0],

x: valueRect.x - relleno,

y: valueRect .y,

ancho: valueRect.width padding * 2,

alto: valueRect.height

}

});

Captura de pantalla

Calcula las coordenadas de los valores, toma una captura de pantalla y usa pares de jimp para recortar la imagen.

await page.screenshot({ path: imgPath });

// Recorta la imagen, manteniendo solo la parte digital

const img = await jimp. read( imgPath);

await img.crop( tooltipInfo.x, tooltipInfo.y, tooltipInfo.width, tooltipInfo.height);

//Agrandar la imagen mejorará el reconocimiento precisión

p>

espera img.scale(5);

espera img.write(imgPath);

}

consola. log(val);

De hecho, Tesseract no entrenado cometerá algunos errores en el reconocimiento, como reconocer números que comienzan con 9 como "3", por lo que debemos entrenar para mejorar la precisión de Tesseract. Si el problema es el mismo, se puede solucionar mediante regularización.

Encapsulación

Después de implementar los puntos anteriores, solo necesita combinarlos para encapsular una biblioteca de nodos del rastreador de índice de Baidu. Por supuesto, existen muchos métodos de optimización, como el rastreo por lotes, especificar el número de días para rastrear, etc. No es difícil lograrlo sobre esta base.

reconocimiento constante = require('. /src/recognition');

const Spider = require('. /src/spider'); .exports = {

ejecución asíncrona (palabra, opciones, titiriteroOptions = { headless: true }) {

const spider = new Spider({

imgDir,

..options

}, puppeteerOptions);

// Obtener datos

await spider.run(word); p>

// Lee la captura de pantalla capturada y realiza el reconocimiento de la imagen

const wordDir = path.const wordDir = path.resolve(imgDir, word);

const imgNames = fs .readdirSync(wordDir);

resultado const = [];

imgNames = imgNames.filter(item =gt. path.extname(item) === '.png ') ;

for (let i = 0; i lt; imgNames.length; i ) {

const imgPath = ruta.dirección(wordDir, palabra);

const imgNames.filter(item =gt.resolve(wordDir, imgNames[i]);

const val = espera reconocimiento.run(imgPath);

resultado.push (val

}

devolver resultado

}

}

Anti-rastreador

Finalmente, ¿cómo resistir a tales rastreadores? Personalmente creo que juzgar la trayectoria del movimiento del mouse puede ser una forma. Por supuesto, no existe un método 100% anti-rastreador en la parte frontal. un poco más difícil.

Creo que después de leer el caso de este artículo, domina el método. Para obtener más información interesante, preste atención a otros artículos relacionados en el sitio web de Gxl.

Lectura recomendada:

Cómo manejar el cuadro de fecha y hora de easyui en términos de compatibilidad con IE

Vue determina si el contenido de entrada tiene espacios