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
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
j'aimerais informer mon programme principale des erreurs qui se produise dans mon sous programme. Présentement, les erreurs ne se communiquent pas.


Merci de votre aide!