Ceci est le code pour Spyder1 que j'ai essayé d'écrire dans le cadre Scrapy:Scrapy erreur d'index d'araignée
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item
from firm.items import FirmItem
class Spider1(CrawlSpider):
domain_name = 'wc2'
start_urls = ['http://www.whitecase.com/Attorneys/List.aspx?LastName=A']
rules = (
Rule(SgmlLinkExtractor(allow=["hxs.select(
'//td[@class='altRow'][1]/a/@href').re('/.a\w+')"]),
callback='parse'),
)
def parse(self, response):
hxs = HtmlXPathSelector(response)
JD = FirmItem()
JD['school'] = hxs.select(
'//td[@class="mainColumnTDa"]').re('(?<=(JD,\s))(.*?)(\d+)'
)
return JD
SPIDER = Spider1()
Le regex dans le rules
tire avec succès toutes les urls bio que je veux de l'URL de départ :
>>> 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'
/kallchurch', u'/jalleyne', u'/lalonzo', u'/malthoff', u'/valvarez', u'/camon',
u'/randerson', u'/eandreeva', u'/pangeli', u'/jangland', u'/mantczak', u'/darany
i', u'/carhold', u'/marora', u'/garrington', u'/jartzinger', u'/sasayama', u'/ma
sschenfeldt', u'/dattanasio', u'/watterbury', u'/jaudrlicka', u'/caverch', u'/fa
yanruoh', u'/razar']
>>>
Mais quand je lance le code que je reçois
[wc2] ERROR: Error processing FirmItem(school=[]) -
[Failure instance: Traceback: <type 'exceptions.IndexError'>: list index out of range
C'est le FirmIt em dans Items.py
from scrapy.item import Item, Field
class FirmItem(Item):
school = Field()
pass
Pouvez-vous m'aider à comprendre où se produit l'erreur d'index?
Il me semble que cela a quelque chose à voir avec SgmLinkExtractor.
J'ai essayé de faire fonctionner cette araignée pendant des semaines avec Scrapy. Ils ont un excellent tutoriel mais je suis novice en programmation python et web donc je ne comprends pas comment fonctionne par exemple SgmlLinkExtractor
derrière la scène.
Serait-il plus facile pour moi d'essayer d'écrire une araignée avec la même fonctionnalité simple avec les bibliothèques Python? J'apprécierais tous les commentaires et l'aide.
Merci
Je ne pense pas que ce soit dans le LinkExtractor du tout; il me semble que c'est quelque chose qui est impliqué dans la méthode d'analyse, qui cherche l'école d'où vient le diplôme. – inklesspen
Ok. Ensuite, je pense, je dois ajouter une boucle for à analyser afin qu'il cherche le JD dans chacune des URL renvoyées par le LinkExtractor? Mais je ne comprends pas vraiment la relation entre LinkExtractor et parse. Le didacticiel ici http://doc.scrapy.org/intro/tutorial.html#extracting-the-data possède l'analyse for loop mais utilise des hxs imbriqués. Ce n'est pas clair comment je peux implémenter cela dans mon cas, où j'ai seulement 1 regex. – Zeynel
Utilisez toujours le littéral brut pour les chaînes pouvant contenir des expressions rationnelles, par exemple, au lieu de '\ w +' utilisez r '\ w +'. – jfs