Comment écrire une araignée simple en Python?
-
05-07-2019 - |
Question
J'essaie d'écrire cette araignée depuis des semaines mais sans succès. Quel est le meilleur moyen pour moi de le coder en Python:
1) URL initiale: http://www.whitecase.com/Attorneys/List.aspx?LastName=A
2) depuis l'URL initiale, récupérez ces URL avec cette regex:
hxs.select('//td[@class="altRow"][1]/a/@href').re('/.a\w+')
[u'/cabel', u'/jacevedo', u'/jacuna', u'/aadler', u'/zahmedani', u'/tairisto', u
/zalbert', u'/salberts', u'/aaleksandrova', u'/malhadeff', u'/nalivojvodic', u'
....
3) Accédez à chacune de ces URL et récupérez les informations sur l'école avec cette expression régulière
hxs.select('//td[@class="mainColumnTDa"]').re('(?<=(JD,\s))(.*?)(\d+)'
[u'JD, ', u'University of Florida Levin College of Law, <em>magna cum laude</em>
, Order of the Coif, Symposium Editor, Florida Law Review, Awards for highest
grades in Comparative Constitutional History, Legal Drafting, Real Property and
Sales, ', u'2007']
4) Écrivez les informations sur l’école récupérées dans le fichier schools.csv
Pouvez-vous m'aider à écrire cette araignée en Python? J'ai essayé de l'écrire dans Scrapy mais sans succès. Voir ma question précédente.
Merci.
La solution
http://www.ibm.com/developerworks/linux/ bibliothèque / l-spider / article IBM avec une bonne description
ou
http://code.activestate.com/recipes/576551/ livre de recettes Python , meilleur code mais moins d'explication
Autres conseils
En outre, je vous suggère de lire:
balises de correspondance RegEx ouvertes sauf XHTML self balises contenues
Avant d'essayer d'analyser le code HTML avec une expression régulière. Puis réfléchissez à ce qui se passe la première fois que le nom de quelqu'un force la page à être unicode au lieu de latin-1.
EDIT: pour répondre à votre question sur une bibliothèque à utiliser en Python, je suggérerais Beautiful Soup, , qui est un excellent analyseur HTML et qui prend toujours en charge l’unicode (et fait un très bon travail avec du HTML mal formé, que vous allez trouver partout).