Red de conocimiento informático - Computadora portátil - Usar Delphi para obtener páginas web

Usar Delphi para obtener páginas web

Cuando se trata de web scraping, la gente suele pensar que se trata de robar datos de Internet y luego colgar los datos recopilados en sus propios sitios web. De hecho, también puede utilizar los datos recopilados como referencia para su empresa o comparar los datos recopilados con el negocio de su propia empresa.

En la actualidad, la mayoría de las colecciones de páginas web son código 3P (3P es ASP, PHP, JSP). El sistema de recopilación de noticias más representativo del BBS de Yidongyi Technology Company y el sistema de recopilación de noticias Sina que circula en Internet son utilizados por programas ASP, pero en teoría la velocidad no es muy buena. ¿Es más rápido intentar la adquisición de subprocesos múltiples con otro software? La respuesta es sí. Puedes usar DELPHI, VC, VB, JB, pero PB parece difícil de hacer. DELPHI se utiliza a continuación para ilustrar la recopilación de datos de páginas web.

Recopilación de noticias sencilla

La recopilación de noticias es la más sencilla, siempre y cuando identifiques el título, subtítulo, autor, fuente, fecha, tema de la noticia y paginación. Debe obtener el contenido de la página web antes de recopilarlo, así que agregue el control idHTTP en DELPHI (en el panel Clientes indy) y use idHTTP1. Método GET para obtener el contenido de la página web. La declaración es la siguiente:

Función Get(AURL: cadena): cadena; sobrecarga;

Parámetro AURL, tipo de cadena, especifica la cadena de dirección URL. Esta función devuelve una cadena que devuelve el archivo fuente HTML de la página web. Por ejemplo, podríamos

realizar una llamada como esta:

tmpStr:= idHTTP1. Get('

Después de que la llamada sea exitosa, el código de la página de inicio de NetEase se almacena en la variable tmpstr.

A continuación, hablemos sobre la interceptación de datos. Aquí, defino dicha función. :

p>

Función TForm1.GetStr(StrSource, StrBegin, StrEnd: cadena): cadena;

Definir variables

in_star, in_end: entero ;

Inicio

in_star:=AnsiPos(strbegin, strsource) longitud(str start);

in_end:=AnsiPos(strend, strsource);

Resultado: = copy(strsource, in_sta, in _ end-in _ star);

Fin

StrSource: una cadena que representa el archivo fuente HTML <. /p>

StrBegin: una cadena que indica el inicio de la interceptación.

StrEnd: una cadena que indica el final de la interceptación.

Esta función devuelve un fragmento de texto en la cadena. StrSource a StrBegin. /p>

Por ejemplo:

strtmp:=TForm1.GetStr('A123BCD','A','BC');

Después de ejecutar, el valor de strtmp es '123'.

Los AnsiPos y la copia utilizados en la función están definidos por el sistema. Puede encontrar instrucciones relevantes en el archivo de ayuda de Delphi. Lo mencionaré brevemente aquí:

p>

Función AnsiPos(const Substr, S: string): Entero

Devuelve la posición de la primera aparición de Substr en s.

Función copy(strsource, in_sta, in_end-in_star): string;

Devuelve la cadena de in_sta (datos enteros) a in_end-in_star (datos enteros) en la cadena strsource.

A través de las funciones anteriores, podemos interceptar el contenido del artículo que queremos configurando varias etiquetas. En el programa, necesitamos configurar muchas etiquetas, lo cual es problemático. Para localizar algo, tenemos que configurar sus etiquetas de apertura y cierre. Por ejemplo, si desea obtener el título de un artículo en una página web, debe verificar el código de la página web con anticipación, verificar algunos códigos de característica antes y después del título del artículo e interceptar el título del artículo a través de estos códigos de característica. .

Supongamos que la dirección del artículo a recopilar es

El código es:

Lenguaje de marcado de hipertexto

Encabezado

元"

meta name = " GENERADOR " contenido = " Microsoft portada 5.0 "

meta name = " ProgId " contenido = " portada. Editor.Document"

meta http-equiv = " Content-Type " Content = " text/html;charset=gb2312 "

Título nueva página 1/título

/head

Cuerpo

P align = " título del artículo central/b/p

borde de la tabla = " 1 " relleno de celda = " 0 " espacio entre celdas = " 0 " estilo = " border-collapse:colapso " color del borde = " # 11111 " ancho = " 100 " id = " autonumber 1 "

Trtd width="60 "Author/td

Td width="40 "source /td/tr

/form

Pfont size="2 "Aquí está el texto del artículo. /font/p

A href= '..new_pr.asp 'Anterior/a a href='new_ne.asp 'Siguiente/a

/body

/html

En el primer paso, usamos strsource:= idhttp 1. get('); para guardar el código de la página web en la variable strsource.

Luego defina strTitle, strAuthor, strCopyFrom, strContent:

strTitle:= GetStr(StrSource, ' p align="center"b ', '/b/p '):

strAuthor:= GetStr(StrSource,' trtd width="60"','/td'):

strCopyFrom:= GetStr(StrSource,'td width="40"' , '/td/tr '):

strContent:= GetStr(StrSource, ' pfont size="2 ", '/font/p '):

De esta manera puedes El título, subtítulo, autor, fuente, fecha, contenido y paginación del artículo se almacenan en las variables anteriores respectivamente.

El segundo paso es abrir la siguiente página en un bucle, obtener el contenido y agregarlo a la variable strContent.

StrSource:= idHTTP1.

get(' new _ ne . ASP ');

contenido de cadena: = contenido de cadena GetStr(StrSource, ' pfont size="2 ", '/font/p '):

Luego determine si hay una página siguiente y, de ser así, obtenga el contenido de la página siguiente.

Esto completa un proceso de interceptación simple. Como se puede ver en el código del programa anterior, todos los métodos de interceptación que utilizamos son para encontrar el principio y el final del contenido interceptado. ¿Qué pasa si hay varias caras y cruces? Parece que no hay manera, solo se encontrará el primero, por lo que debe verificar si solo hay un lugar para el anverso y el reverso del contenido interceptado, y luego buscarlo.