Bonjour,
J'ai un problème de gestion des erreurs.
J'essais de récupérer une erreur dans mon programme parent et ça ne fonctionne pas.
j'aimerais être en mesure de générer des erreurs dans un scraper(crawler) et de le capturer dans le programme principale qui l'exécute.
Voici une partie de mon programme principal
head.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 def run_spider(NomScrapeur,linkData,filename,modefile,issndocument,niveaumoisson,siteweb,nombreniveau): #@inlineCallbacks def f(q): print("run_spider ......") try: process = CrawlerProcess(get_project_settings()) deferred = process.crawl( NomScrapeur, lien=linkData, filename=filename, modefile=modefile, issn=issndocument, niveau=niveaumoisson, site=siteweb, nbrniveau=nombreniveau ) deferred.addBoth(lambda _:reactor.stop()) reactor.run() q.put(None) print("spider fin") except Exception as e: q.put(e) print("Err dans run_spider") #print("NOMBRE D ERREUR" + str(process.stats.get_value('log_count_error'))) #defer.returnValue(None) q = Queue() p = Process(target=f, args=(q,)) p.start() result = q.get() p.join() if result is not None: raise result #END The wrapper to make it run more time for x in range(0,len(linkData)): #linkData liste de liens http pour la récupération des données if x == 0 and modefile == 0: modefile=0 else: modefile=1 try: run_spider(NomScrapeur,linkData[x],"test2.mrk",modefile,issndocument,niveaumoisson,siteweb,nombreniveau) #NomScrapeur dans ce cas ci c'est dataextraction v0 = linkDataTMP[x][0] v1 = linkDataTMP[x][1] v2 = "2" v3 = i v4 = linkDataTMP[x][2] linkData2.append((str(v0),str(v1),str(v2),str(v3),str(v4))) except: v0 = linkDataTMP[x][0] v1 = linkDataTMP[x][1] v2 = "9" v3 = i v4 = linkDataTMP[x][2] linkData2.append((str(v0),str(v1),str(v2),str(v3),str(v4)))
Mon sous programme : dataextraction.py
j'aimerais informer mon programme principale des erreurs qui se produise dans mon sous programme. Présentement, les erreurs ne se communiquent pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 class ExampleSpider(scrapy.Spider): name = "dataextraction" #****************************************************************************************************** #DEBUT - Execution du programme #****************************************************************************************************** def start_requests(self): yield scrapy.Request(self.lien) #****************************************************************************************************** #FIN - Execution du programme #****************************************************************************************************** def parse(self, response): #Declaration des variables validproprio ='NULL' #Tag XML = article['idproprio'] valtitre ='NULL' #Tag XML = titre valsoustitre ='NULL' #Tag XML = surtitre validissn ='NULL' #Tag XML = idissn vallang ='NULL' #Tag XML = revue['lang'] valtrefbiblio = 'NULL' #Tag XML = trefbiblio #Declaration des zones et initialisation pour fichier marc V_LDR = "=LDR 00446naa 22001458i4500" #Leader standard . . soup = BeautifulSoup(response.text, 'xml') valtimestamp = datetime.datetime.utcnow() try: .... except: raise
Merci de votre aide!
Partager