2009-06-09 11 views
2

J'essaye de faire trois choses. Un: explorer et archiver, au moins une fois par jour, un ensemble de sites prédéfini. Deux: exécuter des scripts Python par lots pendant la nuit sur ces données (classification de texte). Trois: exposer un frontal basé sur Django aux utilisateurs pour leur permettre de rechercher les données analysées. J'ai joué avec Apache Nutch/Lucene mais le fait de jouer avec Django me semble trop compliqué quand je peux utiliser un autre moteur de chenilles.Interfacer le robot d'exploration avec le frontal Django

Question 950790 suggère que je pourrais juste écrire le crawler dans Django lui-même, mais je ne suis pas sûr de savoir comment s'y prendre.

Fondamentalement - des pointeurs pour écrire un crawler dans Django ou un crawler python existant que je pourrais adapter? Ou devrais-je incorporer «se transformer en trucs adaptés à Django» à la deuxième étape et écrire du code de colle? Ou, enfin, devrais-je abandonner Django tout à fait? J'ai vraiment besoin de quelque chose qui peut chercher rapidement à partir de l'avant, cependant.

Répondre

3

Si vous insérez les répertoires de l'application de votre projet django dans sys.path, vous pouvez écrire des scripts Python standard qui utilisent la fonctionnalité ORM de Django. Nous avons un/admin/répertoire qui contient des scripts pour effectuer différentes tasks-- en haut de chaque script est un bloc qui ressemble à:

sys.path.insert(0,os.path.abspath('../my_django_project')) 
sys.path.insert(0,os.path.abspath('../')) 
sys.path.insert(0,os.path.abspath('../../')) 
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

Ensuite, il est juste une question d'utiliser votre outil de choix pour explorer le Web et en utilisant l'API de base de données Django pour stocker les données.

1

Si vous ne voulez pas écrire de moteur de balayage à l'aide de Django ORM (ou si vous avez déjà un robot de travail), vous pouvez partager la base de données entre le crawler et le frontal Django-powred.

Pour pouvoir rechercher (et modifier) ​​la base de données existante en utilisant Django admin, vous devez créer des modèles Django. Le moyen facile pour cela est décrit ici:

http://docs.djangoproject.com/en/dev/howto/legacy-databases/

2

Vous écrivez votre propre robot à l'aide urllib2 pour obtenir les pages et Beautiful Soup pour analyser le code HTML à la recherche du contenu.

Voici un exemple de lire une page:

http://docs.python.org/library/urllib2.html#examples

Voici un exemple d'analyse de la page:

http://www.crummy.com/software/BeautifulSoup/documentation.html#Parsing HTML

+0

Dans mon expérience, lxml2 (http: // codespeak. net/lxml /) fonctionne beaucoup plus vite que BeautifulSoup. Cependant, je n'ai pas de benchmark de preuve. – drdaeman

+0

@drdaeman: Je n'ai pas d'expérience avec lxml2, mais le point fort de BeautifulSoup est sa tolérance aux erreurs. Depuis les pages Web contiennent des erreurs célèbres. – muhuk

+0

Dans mon expérience, lxml2 fonctionne très bien avec HTML mal formé. Et si quelque chose ne va vraiment pas, il peut utiliser BeautifulSoup comme analyseur (http://codespeak.net/lxml/elementsoup.html). – drdaeman