Usar Delphi para obtener páginas web
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); p>
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 p >
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.