2009-06-10 6 views
6

J'ai besoin de créer un programme de collecte de contenu qui lira simplement des nombres sur des pages Web spécifiées, et sauvegardera ces données pour analyse plus tard. Je n'en ai pas besoin pour rechercher des liens ou des données connexes, il suffit de rassembler toutes les données des sites Web qui auront un contenu changeant tous les jours. J'ai très peu d'expérience en programmation, et j'espère que ce sera bon pour l'apprentissage. La vitesse n'est pas un gros problème, j'estime que le crawler devrait tout au plus charger 4 000 pages par jour.Quel est le langage de programmation idéal pour un robot d'exploration Web?

Merci. Editer: Y at-il un moyen de tester à l'avance si les sites Web à partir de laquelle je rassemble des données sont protégés contre les robots d'indexation?

Répondre

9

Python probablement, ou Perl.

Perl a un très bon LWP (Library for WWW in Perl), Python a urllib2.

Les deux sont des langages de script simples disponibles sur la plupart des systèmes d'exploitation.

J'ai fait un robot en Perl plusieurs fois, c'est une soirée de travail. Et non, ils ne peuvent pas vraiment se protéger des robots d'exploration, sauf pour l'utilisation de CAPTCHA de tri - tout le reste est plus facile à cracker qu'à mettre en place.

Il y avait un point à propos de Java: Java est très bien. Il est plus détaillé et nécessite une configuration de l'environnement de développement: vous ne le feriez donc pas en une soirée, probablement une semaine. Pour une petite tâche, quel auteur de la question a indiqué, cela pourrait être une surcharge. D'autre part, il existe des bibliothèques très utiles comme lint, tagsoup (DOM traversal pour le HTML aléatoire là-bas) et lucene (indexation et recherche plein texte), donc vous pourriez vouloir Java pour des projets plus sérieux. Dans ce cas, je recommande la bibliothèque Apache commons-httpclient pour le web-crawling (ou nutch si vous êtes fou :).

En outre: il existe des produits de tablettes qui surveillent les changements sur des sites Web spécifiques et les présentent de manière utile, vous pouvez donc en prendre un.

+5

que les robots d'indexation ne respectent pas le protocole d'exclusion des robots - et les clients sont tenus de respecter les conditions d'utilisation de tout site Web. –

+0

Je suis d'accord avec vous. – alamar

+0

La plupart des choses sur le web font apparaître Java pour la programmation des robots. Est-ce que java est trop compliqué? ou quel est le problème avec ça? – Alex

-3

Je dirais PHP. C'est un langage orienté Web, ce qui signifie beaucoup de fonctions de bibliothèque pour faire toutes les petites choses que vous aurez besoin de faire dans un projet comme celui-ci. Il a une bonne librairie pour ce built-in (CURL), et c'est un langage simple et mort. Vous allez le dépasser assez vite si vous continuez à programmer dedans, mais pour quelque chose de simple comme ça, c'est un bon choix.

+1

Je ne recommanderais pas PHP pour les scripts côté client. Cela peut être fait, mais c'est en arrière. – alamar

+1

Je l'ai fait et je dois dire que c'était horrible. Le manque de threading cause beaucoup de problèmes lors de l'écriture d'une araignée efficace. – Lothar

+0

J'ai fait plusieurs crawlers PHP, ça va mais parfois ça refuse juste d'avoir des éléments de certaines URL, mais croyez-moi, Python est le meilleur choix, je n'ai pas travaillé avec Perl mais c'mon man, Python est celui celui utilisé par Google! –

2

Est-il possible de tester à l'avance si les sites dont je suis collecte de données sont protégées contre les robots d'exploration ?

Autre que CAPTCHAs c'est une bonne étiquette de respecter le contenu du fichier robots.txt s'il existe.

7

La langue avec laquelle vous êtes le plus à l'aise est plus que la meilleure langue à utiliser.

J'ai très peu de programmation expérience

Vous trouverez peut-être que un robot web est un peu un baptême de feu et vous avez besoin de construire quelques autres applications plus triviales pour se familiariser avec votre langue choisie (et cadre le cas échéant).

Bonne chance!

1

Perl ou python sont les choix évidents, cela dépend de ce qui vous convient le mieux vraiment à la fin de la journée. Ce n'est pas difficile non plus mais en général si vous trouvez que vous préférez un langage linguistique coulant qui est vraiment flexible, perl vous conviendrait mieux, où comme si vous trouviez que vous préférez un langage plus rigide avec un esprit plus mathématique (surtout en croyant une façon de faire quelque chose de bien) alors vous vous sentirez probablement plus chez vous en python. D'autres langages peuvent très bien faire le travail mais ces deux choix sont évidents en raison de la portabilité et de la robustesse des langages pour les tâches de script CLI, en particulier la manipulation de texte et les langages webdev puissants. donnant le bénéfice de php mentionné, mais sans les aspects négatifs de php pour clientide). Si un grand nombre de modules utiles est disponible pour vous, alors perl a beaucoup plus pour ce type de tâche que n'importe quelle autre langue (sur CPAN) il peut être intéressant de vérifier s'il y a du code que vous pouvez réutiliser avant de prendre le plonger dans quelle langue utiliser. Dans certaines zones, l'un est plus rapide que l'autre (python excelle généralement en maths complexes, perl peut généralement traiter le texte plus rapidement, cela dépend de la façon dont vous le faites).

D'autres choix de langue sont disponibles, un langage compilé est moins portable et donc généralement plus difficile à configurer sur un serveur, mais s'exécute plus rapidement. Les langages de script sont généralement conçus pour manipuler du texte et des fichiers avec plus de facilité que les langages compilés, mais pas toujours vrai. Je me sens plus à l'aise avec Perl, donc je l'utiliserais, mais en disant que ce n'est pas la base sur laquelle vous devriez prendre une décision, trouvez qui a plus de ressources que vous pouvez utiliser, et que vous aimez sentir mieux (lire code voir quel style a plus de sens pour vous) puis décider. Oh et orielly avez un livre sur la programmation de l'intelligence collective destiné aux débutants au sujet, je ne l'ai jamais lu mais il est supposé être plutôt bon, feuilletez-le dans un magasin et donnez-lui de la considération car il s'agit principalement de web algorithmes -crawler ... Il utilise python pour des exemples.

3

J'ai créé un WebCrawler une seule fois, mais il a été créé pour rechercher d'autres sites sur d'autres sites et les suivre. Il devait se souvenir de ces liens et s'assurer que je ne visiterais pas un site deux fois, donc j'avais besoin d'un moyen très rapide de vérifier les URL en double. Pour ce faire, j'ai créé ma propre table de hachage dans Delphi 2007. Avec quelques connaissances supplémentaires sur l'utilisation de l'interface COM Internet Explorer, j'ai réussi à lire beaucoup de pages en peu de temps. J'ai utilisé Delphi pour écrire ce robot parce que je voulais beaucoup de performance. Ensuite, j'ai aussi choisi Delphi parce que c'est le langage qui me convient le mieux, et cela m'a permis d'apprendre beaucoup sur plusieurs sujets intéressants, y compris sur la façon d'écrire vos propres algorithmes de table de hachage. En outre, c'était un défi très intéressant pour un programmeur expérimenté comme moi.

Mes conseils ont déjà été fournis: utilisez les outils qui vous conviennent le mieux.

1

Si vous êtes un débutant, je suggère un langage "facile" tel que REBOL. Dans REBOL, un script de base pour vérifier un tas de pages wikipedia pour les modifications ressemblerait au code ci-dessous.De toute évidence, "facile" est subjective et vous auriez encore besoin de quelques modifications de base à ce code pour répondre à vos besoins.

enregistrements: chargement% enregistrements.txt
; (Contenu du fichier records.txt ressemble this- indentation pas important)
[
        [en.wikipedia.org/wiki/Budget_deficit
        "déficit budgétaire des États-Unis (wikipedia)"
        {< li id ​​= "lastmod" > Cette page a été modifiée le}
        « 1. Juin 2009 à 11h26. "]

        [en.wikipedia.org/wiki/List_of_U.S._states_by_unemployment_rate
        "US Taux de chômage (wikipedia)"
        {< li id ​​= "lastmod" > Cette page a été modifiée le}
        "25 mai 2009 à 20h15."]
]

; Maintenant, boucle à travers les dossiers et vérifier les changements web
foreach enregistrements rec [
    html: lire rec/1    ; Erreur d'ajout-chking ici pour 404s ou délai d'attente
        parse/all html [tout [thru rec/3 copie Curr-mod-date </li >]]
            moins rec/4 = curr-mod jour [
                    print [ "CHANGE DETECTED:" rec/2]
                   ; analyser à nouveau pour recueillir et enregistrer des données de page spécifique ici
                   ; mettre à jour% enregistrements.fichier txt avec estampilles mises à jour
         ]
]

Rebol est pas bien connu, mais il est sympathique, très petit, multi-plateforme et une interface graphique activée. J'ai eu beaucoup de succès avec ça pour les scripts rapides et sales.