La escritura de un robot web en delphi
En este artículo, David Bolton se muestra cómo crear una Web simple robot que hace de múltiples búsquedas en paralelo en un motor de búsqueda y visitas a cada sitio Web en los resultados y las descargas de la página.
En este artículo, David Bolton se muestra cómo crear una Web simple robot que realiza múltiples búsquedas en paralelo en un motor de búsqueda, a continuación, visita a cada sitio Web en los resultados y las descargas de la página. Utiliza los Componentes de ActiveX que proporciona Internet Explorer 4 o 5.
Advertencia - el código escrito originalmente iba a trabajar con Altavista, pero que ha cambiado probablemente una docena de veces por lo que sus probabilidades de trabajar como su oportunidad de bicyling hasta el Monte Everest! Copérnico (www.copernic.com) es un impresionante (y gratis) de motor de búsqueda buscador y emitir actualizaciones específicas para motores sobre una base regular. Si desea escribir uno, jugar con Copérnico. Yo tasa de 11 sobre 10. (No tengo ni finanicial o de lo contrario, la conexión a ellos - soy un cliente muy satisfecho).
a Pesar de que suena exótico, un bot (también conocida como la araña, el agente inteligente, robot Web crawler, robot, etc) es simplemente un programa que visita una serie de sitios Web. El más conocido de los bots son, por supuesto, las arañas utilizado por los diferentes motores de búsqueda para catalogar el contenido nuevo. Echa un vistazo en la Web y encontrarás un montón de referencias y detalles. Incluso hay un libro sobre el tema, publicado por Microsoft Press: Programación de Robots, Arañas y Agentes Inteligentes en Visual C , por David Pallmann (ISBN 0-7356-0565-3). Vale la pena si usted está interesado en la escritura de los bots y no te importa vadeando a través de código de C.
Cuando se crea un bot, usted debe ser consciente de que el material de su bot se reúne a partir de los sitios que visitas, bien puede ser con derechos de autor, así que ten cuidado de cómo lo usa. Otra cosa a tener en cuenta es esta: Si el bot de visitas de un sitio Web en repetidas ocasiones, podría molestar a los propietarios del sitio Web, especialmente si llevan la publicidad de pago. Para una reacción similar, sólo mencionar los Grabadores de Vídeo que automáticamente saltarse los anuncios o Tivo a la gente de la publicidad. Por supuesto, si el bot hace el martillo de un sitio Web en particular y que se cuenta, usted podría encontrar que su dirección IP, no se permitirá el acceso a ese sitio (La temida 403!). En ese caso, una cuenta de acceso telefónico, donde el ISP le da una dirección IP dinámica es probablemente una idea mucho mejor. Voy a discutir el Estándar de Exclusión de Robots más adelante en este sentido.
El principal problema con el desplazamiento de su propio bot no es escribir el código, es la velocidad de su conexión a Internet. Graves para el rastreo, usted necesita el enlace permanente, no de acceso telefónico!
Programable de navegación
Microsoft ha hecho la vida mucho más fácil para el bot de los creadores (y creadores de virus, troyano autores!) por su habitual práctica de incluir un par de la exploración de objetos ActiveX en Internet Explorer (IE) desde la versión 4. En realidad este reutilizables 'motor' enfoque es ser admirado, si sólo no era mal utilizada tanto! Si usted los usa, ellos se encargan de 99 por ciento de las cosas difíciles como el acceso a Internet, cortafuegos, y el uso de HTTP para descargar las páginas HTML. Es decir, tiene un montón de funcionalidades incorporadas, y mucho de esto es accesible. Es decir 3 había algunos objetos que hay en ella, pero no estoy seguro de si estas son utilizables en la misma manera.
Si eres un ferviente es decir hater, tomar el corazón! Usted no tiene que traicionar sus principios o saltarse este artículo. Cuando el uso del IE de los objetos, usted nunca realmente ver, es decir que está totalmente integrado en Windows.
WebBrowser es el nombre del objeto ActiveX de IE. Con Delphi 3, si usted tiene internet explorer instalado en su PC, usted debe crear el tipo de unidad de biblioteca-ir a la Importación de los Controles de ActiveX en Delphi, seleccione Controles de Internet de Microsoft y haga clic en instalar. Ahora debería ver TWebBrowser_V1, TWebBrowser, y TShellFolderViewOC en la pestaña ActiveX en la paleta de componentes. Vamos a utilizar TWebBrowser. Delphi 4 se presenta un problema debido a los cambios en el manejo de ActiveX entre Delphi versiones 3 y 4. Un programa que corrió muy bien en Delphi 3 genera una EOLESysError bajo Delphi 4: 'CoInitialize no se Llama.' La biblioteca de tipo Pascal fuente para el control ahora es dos veces el tamaño en Delphi 5 que en Delphi 3. Si usted tiene Delphi 4, sugiero que actualice a Delphi 5 o encontrar a alguien que lo tiene y ver si el Delphi 5 shdocvw.pas trabaja para usted. Todos los de la IE la funcionalidad del objeto está contenido en el shdocvw.dll.
Si usted tiene Delphi 5 o 6, no es necesario hacer esto. TWebBrowser ha reemplazado la antigua THTML componente y es el último componente en la Ficha de Internet. Usted también consigue una demostración de uso de esta en la carpeta Demos/Coolstuff, y el archivo de Ayuda tiene algunas cosas en TWebBrowser, pero curiosamente, Borland no ha agregado el TWebBrowser_V1 componente, aunque en el archivo de origen. Si quieres saber más sobre el uso de TWebBrowser o TWebBrowser_V1, ir a www.microsoft.com y hacer una búsqueda, o conseguir Delphi 5 para el archivo de Ayuda!
TWebBrowser es muy fácil componente para trabajar con. Alrededor de la mitad de las propiedades que se pueden ignorar, como lo son para el visible, es decir la interfaz para el control de la pantalla de la mirada de IE-como las barras de herramientas o la visualización en pantalla completa. La propiedad Visible determina si se puede ver la ventana del navegador o no. En la final de la aplicación, el usuario no verá, pero puede ser útil para la depuración.
La forma más sencilla de utilizar WebBrowser es llamando al Navegar(URL) método, entonces el manejo de la OnNavigateComplete2 evento y el uso de la propiedad de Documento para acceder a la descarga de la página. Aunque hay otros dos eventos-OnDocumentComplete y OnDownloadComplete-que debe ayudar a determinar si una página Web se ha descargado correctamente, me pareció más fácil de procesar todo, desde la OnNavigateComplete2. Este solo se activa cuando el navegador se ha trasladado con éxito a la URL especificada sin embargo, es confundido por varios fotogramas, por lo que algunos extra de cuidado tiene que ser tomado, como se verá.
WebBrowser ofrece varias propiedades para simplificar la tarea de extracción de datos. Estas propiedades incluyen Enlaces, los anclajes, los applets, formas, marcos, hojas de estilo, y un poco más. El único problema, especialmente cuando se utilizan marcos, está separando la paja del trigo-que los enlaces son válidos, y que podría ser anuncios u otros servicios? En ese caso, la única manera de hacerlo es escanear el código HTML y extraer la información relevante. Como cada página se descarga, se puede acceder directamente.
Marcos
Como se puede saber, muchas SearchEngines no índice de fotogramas. Un documento HTML puede constar de uno o más marcos. El fotograma que contiene el material que quieres? Generalmente, es el primer (y a veces única) de la página. La única manera confiable es caminar a través de cada página buscando el texto y, a continuación, buscar en este para las cadenas de caracteres que identifican a los resultados. Un problema mucho más grande es el múltiple de activación de los distintos DocumentComplete, DownloadComplete, y NavigationComplete eventos. Mucho de depuración, la maldición, y la eliminación del vello se produjo antes de que me di cuenta de lo que estaba sucediendo. Ignorar DownloadComplete. En su lugar, utilice DocumentComplete o NavigationComplete. Hice algunas más experimentos y se encontró que el mejor camino era el uso de uno y comprobar si un documento fue preparado con VarIsEmpty(fwebbrowser.el documento). A continuación, obtenga el marco desde el navegador Documento := fWebBrowser.El documento, contar el número de fotogramas, y el índice a través de ellos. Cuadro 0 utiliza la secuencia de comandos.la parte superior, mientras que otros marcos de utilizar los fotogramas.Elemento(índice). Nota el tipo Básico de la matriz de indexación. Desde el fotograma, seleccione el tipo de documento.cuerpo, y extraer el texto real de este. Ser conscientes de que la CreateTextRange se producirá una excepción si no hay texto, como en un banner objeto-de ahí el intento-excepto para cogerlo. En este punto, tenemos la completa código HTML, y todos debemos hacer a continuación es obtener los resultados y vínculos de navegación de ella.
escaneado en HTML
Cuando yo era una prueba de esto, he usado la palabra Opciones en AltaVista. La página a la que fue devuelto figura 85 enlaces según el WebBrowser enlaces (documento.los enlaces.Los elementos(Índice) se utiliza la propiedad). De estos, sólo 10 son los resultados y un número de anuncios, banners, y cosas por el estilo, así como los enlaces de Navegación. El diseño es diferente para cada motor de búsqueda del resultado, y un HTML objeto de análisis sería una buena idea para un artículo futuro. Me he quedado con AltaVista, como otros motores de búsqueda laicos cosas a su manera. Para simplificar el código, he utilizado dos cadenas de texto-'AltaVista encontrado' y 'Páginas de resultados'-para marcar el inicio y la parada de el resultado de los saltos. Todas las Url (buscar por 'href=') que ocurren entre estos dos cadenas y no contienen el texto definido en el alto el texto (como 'saltar.altavista').
estructura
Todo se centra en tres componentes: TSearchEngine, TFetchResult, y TResultHandler. Una lista de TSearchEngines está construido al inicio del programa con cada objeto de la celebración de los detalles necesarios para utilizar ese motor y una instancia del objeto WebBrowser. La cadena de búsqueda se pasa a esta lista, y cada componente, a continuación, inicia una consulta con su propio motor. Resultado de los enlaces vuelven a una lista central, teniendo cuidado para serializar el acceso a esta lista a través de un simple guardia de la variable (fbusy) para prevenir dos de la lista de incorporaciones de que ocurren al mismo tiempo. Si se tratase de una operación que se realiza, esto se puede evitar, pero tengo una lista de búsqueda así, y esto toma tiempo, por lo que la guardia de la variable debe ser utilizado.
Para un típico motor de búsqueda como AltaVista, la consulta es procesada por un script cgi-bin llamada de consulta con diversos parámetros añadido algo como esto para la cadena de búsqueda 'buscar texto' (comillas incluidas): pg=p & kl=en & p='buscar texto' & stq=20, lo que yo entiendo como pg = q (query), kl = es (en Idioma inglés), y stq=20 (resultados de empezar con el 20 de resultado).
La clase TSearchEngine tiene métodos PostQuestion, ExtractResultLinks, y NavigateNextResultPage y establece el WebBrowser controladores de eventos para actuar en consecuencia. La mayoría de las aplicaciones del tiempo se dedica a no hacer nada más que esperar a que el WebBrowser eventos para desencadenar. He incluido un estado simple mecanismo para que los usuarios de esta clase puede determinar lo que está sucediendo, y es capaz de seguir la pista de lo que se supone que debe hacer.
Para cada uno de los resultados de enlace que se encuentra, un TFetchResult componente se crea y se añade a una lista de las recuperaciones. Cada instancia de esta clase tiene su propio componente de WebBrowser y el código del controlador de eventos. He utilizado una lista para simplificar el seguimiento de todas las operaciones de captura. Yo uso un período de tiempo de espera (por defecto 240 segundos), y cada 30 segundos, toda la lista de búsquedas que se escanea y se comprueban los tiempos de espera. Un temporizador es más ligero en los recursos de Windows de un temporizador para cada objeto. Como también es difícil determinar con exactitud cuando una página ha sido completamente descargado, este tiempo de espera proporciona una ordenada manera de hacerlo.
Si la captura se realiza correctamente, el contenido HTML del documento se guardan a una carpeta de resultados. Yo no he incluido los gráficos con el fin de mantener el código más corto. El nombre se deriva del nombre del marco después de la eliminación de inaceptable caracteres.
el Paralelismo
En un sentido, esta es una aplicación multiproceso con un razonable grado de paralelismo, aunque no hay hilos de forma explícita. Cada uno de los WebBrowser componentes se utiliza de forma independiente, una en cada TSearchEngine y uno en cada TFetchResult. Parece que no hay límite superior para el número de búsquedas en paralelo, aunque la velocidad en general es, por supuesto, sujeto a que el ancho de banda del enlace a Internet.
Si estuviera escribiendo un producto comercial, que probablemente iba a crear un archivo de configuración con alguna manera de definir el formato de consulta para cada motor puede manejar así como extraer el resultado de los enlaces. Cada motor de búsqueda produce resultados en diferentes formatos y bien podría cambiar el formato de siempre que les gusta.
también Hay una alta probabilidad de que dos o más búsquedas producirá la misma URL. Yo de evitar que mediante la búsqueda en la lista actual de las recuperaciones. Sugiero otra lista de utilizarse, ya que esta sólo tiene la corriente de recuperaciones. Antes de la captura de los resultados de una determinada URL, una rápida búsqueda se realiza de esta lista para asegurarse de que la URL no ha sido capturado. Si no, la dirección URL se agrega a la lista y la recuperación de fondos.
Como siempre con los motores de búsqueda, usted tiene que elegir su texto de búsqueda con cuidado para evitar que varios millones de resultados. Un límite de valor codificado como 100 se establece para cada TSearchEngine.
Un último punto: hay que Ser cuidadoso con el uso de la Aplicación.ProcessMessages cuando utilice WebBrowser. He evitado, excepto donde las capturas se agregó, que se espera que si el resultProcessor está ocupado. No sé si es la manera en que los eventos se envían, pero me encontré con que la asignación de una etiqueta y de la aplicación de llamada.ProcessMessages podría forzar el mismo evento a suceder de nuevo. Esto ocurrió más en el depurador, pero si usted consigue un comportamiento extraño, comentario ellos.
Advertencia
creo que este código es un poco áspero y listo, pero funciona muy bien. Posiblemente la menos satisfactoria son los métodos de detección que marco ha de texto. Me costó trabajo, otros que por el uso de captura de excepciones, por lo que si se ejecuta en el depurador, esperar un par de atrapadas excepciones. Es también no muy pulido de la aplicación podría ser una mejor interfaz de usuario, por ejemplo. Pero se hace lo que yo pretendía-realiza varias búsquedas en paralelo y descargas al mismo tiempo.
los Robots no son bienvenidos
Un estándar ha surgido llamado el Estándar de Exclusión de Robots, que los sitios Web deben utilizar para especificar los árboles, que no deben ser indexadas por las arañas porque las páginas cambian con frecuencia o que contienen archivos ejecutables o no los archivos de texto.
he leído que las últimas estimaciones sugieren que hay más de 800 millones de páginas Web en la existencia, y que la mayoría de los motores de búsqueda se han indexado menos de la mitad del total entre ellos. Los motores de búsqueda más grandes sólo tienen índices de 150-200 millones de páginas. Así que cualquier cosa que limita el 'ruido' es bienvenida, y una forma de hacer esto es a través de la presente norma. Sólo tiene que colocar una robots.txt archivo de texto en la raíz-por ejemplo, www.altavista.com/robots.txt-like los siguientes:
User-agent: *
Disallow: /cgi-bin
Este se estipula que todos los robots Web no debería mirar en /cgi-bin. Por supuesto, sus robots no tienen que prestar atención a esto-es destinado principalmente para arañas Web, pero es de mala educación ignorar, y tiene sentido para ir junto con él a menos que usted realmente necesita para ver lo que hay.
¿Cómo, usted podría preguntarse, ¿ el sitio Web de la gente sabe cuando un robot se les ha visitado? Simplemente es el UserAgent nombre en el encabezado pasa al servidor Web. Esto es más a menudo Mozilla, pero podría ser Scooter (el de AltaVista 'spider') o a los demás. Mozilla (por 'Mosaico Killer') era el nombre de trabajo de Netscape, IE también ha adoptado. Es posible cambiar esto en el quinto parámetro de la TWebBrowser método Navigate, que contiene encabezados adicionales. O usted puede escribir su propia interfaz HTTP en lugar de usar el IE, y, a continuación, especifique un nombre. Dado que lo que estamos haciendo puede que no sea muy popular con los motores de búsqueda, es probablemente la mejor manera de hacerlo detrás del anonimato de un navegador de Mozilla! Además, es posible que desee añadir un retardo de 10 segundos entre el salto de las páginas. De esa manera, por lo menos mirar como si se trata de un operador humano y no un programa.
La escritura de un robot web en delphi
La escritura de un robot web en delphi : Multi-millones de consejos para hacer su vida mas facil.
En este articulo, David Bolton se muestra como crear una Web simple robot que hace de multiples busquedas en paralelo en un motor de busqueda y visitas a cada sitio Web en los resultados y las descargas de la pagina.
En este articulo, David Bolton se muestra como crear una Web simple robot que realiza multiples busquedas en paralelo en un motor de busqueda, a continuacion, visita a cada sitio Web en los resultados y las descargas de la pagina. Utiliza los Componentes de ActiveX que proporciona Internet Explorer 4 o 5.
Advertencia - el codigo escrito originalmente iba a trabajar con Altavista, pero que ha cambiado probablemente una docena de veces por lo que sus probabilidades de trabajar como su oportunidad de bicyling hasta el Monte Everest! Copernico (www.copernic.com) es un impresionante (y gratis) de motor de busqueda buscador y emitir actualizaciones especificas para motores sobre una base regular. Si desea escribir uno, jugar con Copernico. Yo tasa de 11 sobre 10. (No tengo ni finanicial o de lo contrario, la conexion a ellos - soy un cliente muy satisfecho).
a Pesar de que suena exotico, un bot (tambien conocida como la araña, el agente inteligente, robot Web crawler, robot, etc) es simplemente un programa que visita una serie de sitios Web. El mas conocido de los bots son, por supuesto, las arañas utilizado por los diferentes motores de busqueda para catalogar el contenido nuevo. Echa un vistazo en la Web y encontraras un monton de referencias y detalles. Incluso hay un libro sobre el tema, publicado por Microsoft Press: Programacion de Robots, Arañas y Agentes Inteligentes en Visual C , por David Pallmann (ISBN 0-7356-0565-3). Vale la pena si usted esta interesado en la escritura de los bots y no te importa vadeando a traves de codigo de C.
Cuando se crea un bot, usted debe ser consciente de que el material de su bot se reune a partir de los sitios que visitas, bien puede ser con derechos de autor, asi que ten cuidado de como lo usa. Otra cosa a tener en cuenta es esta: Si el bot de visitas de un sitio Web en repetidas ocasiones, podria molestar a los propietarios del sitio Web, especialmente si llevan la publicidad de pago. Para una reaccion similar, solo mencionar los Grabadores de Video que automaticamente saltarse los anuncios o Tivo a la gente de la publicidad. Por supuesto, si el bot hace el martillo de un sitio Web en particular y que se cuenta, usted podria encontrar que su direccion IP, no se permitira el acceso a ese sitio (La temida 403!). En ese caso, una cuenta de acceso telefonico, donde el ISP le da una direccion IP dinamica es probablemente una idea mucho mejor. Voy a discutir el Estandar de Exclusion de Robots mas adelante en este sentido.
El principal problema con el desplazamiento de su propio bot no es escribir el codigo, es la velocidad de su conexion a Internet. Graves para el rastreo, usted necesita el enlace permanente, no de acceso telefonico!
Programable de navegacion
Microsoft ha hecho la vida mucho mas facil para el bot de los creadores (y creadores de virus, troyano autores!) por su habitual practica de incluir un par de la exploracion de objetos ActiveX en Internet Explorer (IE) desde la version 4. En realidad este reutilizables 'motor' enfoque es ser admirado, si solo no era mal utilizada tanto! Si usted los usa, ellos se encargan de 99 por ciento de las cosas dificiles como el acceso a Internet, cortafuegos, y el uso de HTTP para descargar las paginas HTML. Es decir, tiene un monton de funcionalidades incorporadas, y mucho de esto es accesible. Es decir 3 habia algunos objetos que hay en ella, pero no estoy seguro de si estas son utilizables en la misma manera.
Si eres un ferviente es decir hater, tomar el corazon! Usted no tiene que traicionar sus principios o saltarse este articulo. Cuando el uso del IE de los objetos, usted nunca realmente ver, es decir que esta totalmente integrado en Windows.
WebBrowser es el nombre del objeto ActiveX de IE. Con Delphi 3, si usted tiene internet explorer instalado en su PC, usted debe crear el tipo de unidad de biblioteca-ir a la Importacion de los Controles de ActiveX en Delphi, seleccione Controles de Internet de Microsoft y haga clic en instalar. Ahora deberia ver TWebBrowser_V1, TWebBrowser, y TShellFolderViewOC en la pestaña ActiveX en la paleta de componentes. Vamos a utilizar TWebBrowser. Delphi 4 se presenta un problema debido a los cambios en el manejo de ActiveX entre Delphi versiones 3 y 4. Un programa que corrio muy bien en Delphi 3 genera una EOLESysError bajo Delphi 4: 'CoInitialize no se Llama.' La biblioteca de tipo Pascal fuente para el control ahora es dos veces el tamaño en Delphi 5 que en Delphi 3. Si usted tiene Delphi 4, sugiero que actualice a Delphi 5 o encontrar a alguien que lo tiene y ver si el Delphi 5 shdocvw.pas trabaja para usted. Todos los de la IE la funcionalidad del objeto esta contenido en el shdocvw.dll.
Si usted tiene Delphi 5 o 6, no es necesario hacer esto. TWebBrowser ha reemplazado la antigua THTML componente y es el ultimo componente en la Ficha de Internet. Usted tambien consigue una demostracion de uso de esta en la carpeta Demos/Coolstuff, y el archivo de Ayuda tiene algunas cosas en TWebBrowser, pero curiosamente, Borland no ha agregado el TWebBrowser_V1 componente, aunque en el archivo de origen. Si quieres saber mas sobre el uso de TWebBrowser o TWebBrowser_V1, ir a www.microsoft.com y hacer una busqueda, o conseguir Delphi 5 para el archivo de Ayuda!
TWebBrowser es muy facil componente para trabajar con. Alrededor de la mitad de las propiedades que se pueden ignorar, como lo son para el visible, es decir la interfaz para el control de la pantalla de la mirada de IE-como las barras de herramientas o la visualizacion en pantalla completa. La propiedad Visible determina si se puede ver la ventana del navegador o no. En la final de la aplicacion, el usuario no vera, pero puede ser util para la depuracion.
La forma mas sencilla de utilizar WebBrowser es llamando al Navegar(URL) metodo, entonces el manejo de la OnNavigateComplete2 evento y el uso de la propiedad de Documento para acceder a la descarga de la pagina. Aunque hay otros dos eventos-OnDocumentComplete y OnDownloadComplete-que debe ayudar a determinar si una pagina Web se ha descargado correctamente, me parecio mas facil de procesar todo, desde la OnNavigateComplete2. Este solo se activa cuando el navegador se ha trasladado con exito a la URL especificada sin embargo, es confundido por varios fotogramas, por lo que algunos extra de cuidado tiene que ser tomado, como se vera.
WebBrowser ofrece varias propiedades para simplificar la tarea de extraccion de datos. Estas propiedades incluyen Enlaces, los anclajes, los applets, formas, marcos, hojas de estilo, y un poco mas. El unico problema, especialmente cuando se utilizan marcos, esta separando la paja del trigo-que los enlaces son validos, y que podria ser anuncios u otros servicios? En ese caso, la unica manera de hacerlo es escanear el codigo HTML y extraer la informacion relevante. Como cada pagina se descarga, se puede acceder directamente.
Marcos
Como se puede saber, muchas SearchEngines no indice de fotogramas. Un documento HTML puede constar de uno o mas marcos. El fotograma que contiene el material que quieres? Generalmente, es el primer (y a veces unica) de la pagina. La unica manera confiable es caminar a traves de cada pagina buscando el texto y, a continuacion, buscar en este para las cadenas de caracteres que identifican a los resultados. Un problema mucho mas grande es el multiple de activacion de los distintos DocumentComplete, DownloadComplete, y NavigationComplete eventos. Mucho de depuracion, la maldicion, y la eliminacion del vello se produjo antes de que me di cuenta de lo que estaba sucediendo. Ignorar DownloadComplete. En su lugar, utilice DocumentComplete o NavigationComplete. Hice algunas mas experimentos y se encontro que el mejor camino era el uso de uno y comprobar si un documento fue preparado con VarIsEmpty(fwebbrowser.el documento). A continuacion, obtenga el marco desde el navegador Documento := fWebBrowser.El documento, contar el numero de fotogramas, y el indice a traves de ellos. Cuadro 0 utiliza la secuencia de comandos.la parte superior, mientras que otros marcos de utilizar los fotogramas.Elemento(indice). Nota el tipo Basico de la matriz de indexacion. Desde el fotograma, seleccione el tipo de documento.cuerpo, y extraer el texto real de este. Ser conscientes de que la CreateTextRange se producira una excepcion si no hay texto, como en un banner objeto-de ahi el intento-excepto para cogerlo. En este punto, tenemos la completa codigo HTML, y todos debemos hacer a continuacion es obtener los resultados y vinculos de navegacion de ella.
escaneado en HTML
Cuando yo era una prueba de esto, he usado la palabra Opciones en AltaVista. La pagina a la que fue devuelto figura 85 enlaces segun el WebBrowser enlaces (documento.los enlaces.Los elementos(Indice) se utiliza la propiedad). De estos, solo 10 son los resultados y un numero de anuncios, banners, y cosas por el estilo, asi como los enlaces de Navegacion. El diseño es diferente para cada motor de busqueda del resultado, y un HTML objeto de analisis seria una buena idea para un articulo futuro. Me he quedado con AltaVista, como otros motores de busqueda laicos cosas a su manera. Para simplificar el codigo, he utilizado dos cadenas de texto-'AltaVista encontrado' y 'Paginas de resultados'-para marcar el inicio y la parada de el resultado de los saltos. Todas las Url (buscar por 'href=') que ocurren entre estos dos cadenas y no contienen el texto definido en el alto el texto (como 'saltar.altavista').
estructura
Todo se centra en tres componentes: TSearchEngine, TFetchResult, y TResultHandler. Una lista de TSearchEngines esta construido al inicio del programa con cada objeto de la celebracion de los detalles necesarios para utilizar ese motor y una instancia del objeto WebBrowser. La cadena de busqueda se pasa a esta lista, y cada componente, a continuacion, inicia una consulta con su propio motor. Resultado de los enlaces vuelven a una lista central, teniendo cuidado para serializar el acceso a esta lista a traves de un simple guardia de la variable (fbusy) para prevenir dos de la lista de incorporaciones de que ocurren al mismo tiempo. Si se tratase de una operacion que se realiza, esto se puede evitar, pero tengo una lista de busqueda asi, y esto toma tiempo, por lo que la guardia de la variable debe ser utilizado.
Para un tipico motor de busqueda como AltaVista, la consulta es procesada por un script cgi-bin llamada de consulta con diversos parametros añadido algo como esto para la cadena de busqueda 'buscar texto' (comillas incluidas): pg=p & kl=en & p='buscar texto' & stq=20, lo que yo entiendo como pg = q (query), kl = es (en Idioma ingles), y stq=20 (resultados de empezar con el 20 de resultado).
La clase TSearchEngine tiene metodos PostQuestion, ExtractResultLinks, y NavigateNextResultPage y establece el WebBrowser controladores de eventos para actuar en consecuencia. La mayoria de las aplicaciones del tiempo se dedica a no hacer nada mas que esperar a que el WebBrowser eventos para desencadenar. He incluido un estado simple mecanismo para que los usuarios de esta clase puede determinar lo que esta sucediendo, y es capaz de seguir la pista de lo que se supone que debe hacer.
Para cada uno de los resultados de enlace que se encuentra, un TFetchResult componente se crea y se añade a una lista de las recuperaciones. Cada instancia de esta clase tiene su propio componente de WebBrowser y el codigo del controlador de eventos. He utilizado una lista para simplificar el seguimiento de todas las operaciones de captura. Yo uso un periodo de tiempo de espera (por defecto 240 segundos), y cada 30 segundos, toda la lista de busquedas que se escanea y se comprueban los tiempos de espera. Un temporizador es mas ligero en los recursos de Windows de un temporizador para cada objeto. Como tambien es dificil determinar con exactitud cuando una pagina ha sido completamente descargado, este tiempo de espera proporciona una ordenada manera de hacerlo.
Si la captura se realiza correctamente, el contenido HTML del documento se guardan a una carpeta de resultados. Yo no he incluido los graficos con el fin de mantener el codigo mas corto. El nombre se deriva del nombre del marco despues de la eliminacion de inaceptable caracteres.
el Paralelismo
En un sentido, esta es una aplicacion multiproceso con un razonable grado de paralelismo, aunque no hay hilos de forma explicita. Cada uno de los WebBrowser componentes se utiliza de forma independiente, una en cada TSearchEngine y uno en cada TFetchResult. Parece que no hay limite superior para el numero de busquedas en paralelo, aunque la velocidad en general es, por supuesto, sujeto a que el ancho de banda del enlace a Internet.
Si estuviera escribiendo un producto comercial, que probablemente iba a crear un archivo de configuracion con alguna manera de definir el formato de consulta para cada motor puede manejar asi como extraer el resultado de los enlaces. Cada motor de busqueda produce resultados en diferentes formatos y bien podria cambiar el formato de siempre que les gusta.
tambien Hay una alta probabilidad de que dos o mas busquedas producira la misma URL. Yo de evitar que mediante la busqueda en la lista actual de las recuperaciones. Sugiero otra lista de utilizarse, ya que esta solo tiene la corriente de recuperaciones. Antes de la captura de los resultados de una determinada URL, una rapida busqueda se realiza de esta lista para asegurarse de que la URL no ha sido capturado. Si no, la direccion URL se agrega a la lista y la recuperacion de fondos.
Como siempre con los motores de busqueda, usted tiene que elegir su texto de busqueda con cuidado para evitar que varios millones de resultados. Un limite de valor codificado como 100 se establece para cada TSearchEngine.
Un ultimo punto: hay que Ser cuidadoso con el uso de la Aplicacion.ProcessMessages cuando utilice WebBrowser. He evitado, excepto donde las capturas se agrego, que se espera que si el resultProcessor esta ocupado. No se si es la manera en que los eventos se envian, pero me encontre con que la asignacion de una etiqueta y de la aplicacion de llamada.ProcessMessages podria forzar el mismo evento a suceder de nuevo. Esto ocurrio mas en el depurador, pero si usted consigue un comportamiento extraño, comentario ellos.
Advertencia
creo que este codigo es un poco aspero y listo, pero funciona muy bien. Posiblemente la menos satisfactoria son los metodos de deteccion que marco ha de texto. Me costo trabajo, otros que por el uso de captura de excepciones, por lo que si se ejecuta en el depurador, esperar un par de atrapadas excepciones. Es tambien no muy pulido de la aplicacion podria ser una mejor interfaz de usuario, por ejemplo. Pero se hace lo que yo pretendia-realiza varias busquedas en paralelo y descargas al mismo tiempo.
los Robots no son bienvenidos
Un estandar ha surgido llamado el Estandar de Exclusion de Robots, que los sitios Web deben utilizar para especificar los arboles, que no deben ser indexadas por las arañas porque las paginas cambian con frecuencia o que contienen archivos ejecutables o no los archivos de texto.
he leido que las ultimas estimaciones sugieren que hay mas de 800 millones de paginas Web en la existencia, y que la mayoria de los motores de busqueda se han indexado menos de la mitad del total entre ellos. Los motores de busqueda mas grandes solo tienen indices de 150-200 millones de paginas. Asi que cualquier cosa que limita el 'ruido' es bienvenida, y una forma de hacer esto es a traves de la presente norma. Solo tiene que colocar una robots.txt archivo de texto en la raiz-por ejemplo, www.altavista.com/robots.txt-like los siguientes:
User-agent: *
Disallow: /cgi-bin
Este se estipula que todos los robots Web no deberia mirar en /cgi-bin. Por supuesto, sus robots no tienen que prestar atencion a esto-es destinado principalmente para arañas Web, pero es de mala educacion ignorar, y tiene sentido para ir junto con el a menos que usted realmente necesita para ver lo que hay.
¿Como, usted podria preguntarse, ¿ el sitio Web de la gente sabe cuando un robot se les ha visitado? Simplemente es el UserAgent nombre en el encabezado pasa al servidor Web. Esto es mas a menudo Mozilla, pero podria ser Scooter (el de AltaVista 'spider') o a los demas. Mozilla (por 'Mosaico Killer') era el nombre de trabajo de Netscape, IE tambien ha adoptado. Es posible cambiar esto en el quinto parametro de la TWebBrowser metodo Navigate, que contiene encabezados adicionales. O usted puede escribir su propia interfaz HTTP en lugar de usar el IE, y, a continuacion, especifique un nombre. Dado que lo que estamos haciendo puede que no sea muy popular con los motores de busqueda, es probablemente la mejor manera de hacerlo detras del anonimato de un navegador de Mozilla! Ademas, es posible que desee añadir un retardo de 10 segundos entre el salto de las paginas. De esa manera, por lo menos mirar como si se trata de un operador humano y no un programa.
La escritura de un robot web en delphi
By Consejos Y Trucos
La escritura de un robot web en delphi : Multi-millones de consejos para hacer su vida más fácil.