Bonjour,
Je sollicite l'aide des développeurs Python et qui connaisse le Framework "Scrapy" et aussi les autres.
Je suis nouveau dans le monde python et encore plus avec Scrapy.
Mon projet :
Récupérer tous les produits qui m'intéresse sur Cdiscount.
Ex:
Je voudrais récupérer tous les ordinateurs portables qui se trouve à cette URL.
http://www.cdiscount.com/informatiqu...l-1070922.html
j'ai analysé la structure HTML de la page, ce qui m'intéresse se trouve dans
Comme dit dans mon code j'aimerais rapatrier ce qui se trouve dans la "class = plViewZone_1" et "class = plViewZone_2"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <div class="mainColumn Pl"> <div class="boxSimple pad05em list" id="productList"> <div class="plProductView" data-sku="F552CLSX236H"> <div class="plViewZone_1"> RAPATRIER Tous ce qui se trouve ici </div> <div class="plViewZone_2"> RAPATRIER Tous ce qui se trouve ici </div> </div> </div> </div>
Donc la marque du PC, l'image, la description, le nom ainsi que le lien vers la page qui se trouve dans un HREF avec le nom du PC et la balise "data-sku" qui se trouve dans la "class = plProductView".
Voici mon Crawler :
Mon Item:
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 from scrapy.contrib.spiders import CrawlSpider, Rule from scrapy.selector import Selector from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor from enPromos.items import EnpromosItem class CDiscount(CrawlSpider): name = 'cdiscount' allowed_domains = ['cdiscount.com'] start_urls = ['http://www.cdiscount.com'] rules = ( Rule (SgmlLinkExtractor( deny = ( '\/about','\/maison\/','\/chaussures\/', '\/pret-a-porter\/','\/bijouterie\/', '\/bagages\/','\/le-sport\/','\/vin-champagne\/', '\/au-quotidien\/','\/juniors\/','\/dvd\/','\/livres-bd\/', '\/tout\/','\/carte-cdiscount\/','/mentions-legales.html', '\/culture-multimedia\/','/plan-du-site.asp') ), callback='parse_item'), ) def parse_item(self, response): self.log('la page est %s' % response.url) url_crawl = open('url.txt', 'a') url_crawl.write(str(response.url) + '\n') url_crawl.close() # my item my_item = EnpromosItem() # selector methode call sel = Selector(response) my_item['id'] = sel.xpath('//div[@class="plProductView"]/@data-sku').extract() my_item['name'] = sel.xpath('//a[@class="plPrName"]/@title').extract() my_item['descrip'] = sel.xpath('//span[@class="plPrDesc"]/@data-longdesc').extract() my_item['img'] = sel.xpath('//div[@class="plProductImg"]/img/@src').extract() my_item['brand'] = sel.xpath('//img[@class="plLogo"]/@src').extract() return my_item
Mon code actuel fonctionne pour le "data-sku" mais pour le reste cela ne fonctionne pas. N'étant pas très à l'aise avec le XPATH je sollicite votre aide et vos lumières.
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 # Define here the models for your scraped items # # See documentation in: # http://doc.scrapy.org/en/latest/topics/items.html from scrapy.item import Item, Field class EnpromosItem(Item): # define the fields for your item here like: id = Field() name = Field() descrip = Field() img = Field() brand = Field()
Cordialement,
Partager