IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Crawling avec Scrapy


Sujet :

Python

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Un Passionn� !!!
    Inscrit en
    Juillet 2011
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (�le de France)

    Informations professionnelles :
    Activit� : Un Passionn� !!!
    Secteur : High Tech - Produits et services t�l�com et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 2
    Par d�faut Crawling avec Scrapy
    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

    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>
    Comme dit dans mon code j'aimerais rapatrier ce qui se trouve dans la "class = plViewZone_1" et "class = plViewZone_2"
    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 :

    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 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
     
    # 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()
    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.

    Cordialement,

  2. #2
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 772
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : Architecte technique retrait�
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 772
    Par d�faut
    Salut,

    scrapy est un "crawler".
    Autrement dit, un engin qui permet de parcourir une arborescence d'URL pour y r�cup�rer liens et contenus, les stocker en base et effectuer des mises a jours incr�mentales - ce qui a change depuis le dernier crawl.

    R�cup�rer des informations bas�es sur la structure de la page se fait dans un deuxi�me temps - apr�s avoir r�cup�r� la nouvelle page -.
    note: cela permet de tester l'extraction hors "crawler" en travaillant sur la page Web "fichier".

    => Pour mettre au point votre extraction, scrapy sugg�re de le lancer via la commande: scrapy shell [url|file]. Ca charge la page et vous avez une variable globale "sel" pour jouer avec le selector.

    Pour faire ce boulot, vous pouvez aussi utiliser BeautifullSoup ou lxml. Pas la peine d'apprendre a travailler avec le selector builtin dans scrapy si on en conna�t d�j� d'autres.
    note: et si vous n'en connaissez aucun, choisissez plut�t un couteau suisse tel que BeautifullSoup.

    Pour visualiser la "structure" de la page, on peut (par exemple) utiliser l'inspector de firefox (ou de webkit): on clicke sur le "block" int�ressant pour r�cup�rer son "adresse" dans le document qu'on utilise pour "viser" le "block" de fa�on programmatique.

    A priori, dans votre cas, vous it�rez sur les <div class="plProductView"...> * inner html * </div>.
    Le sku est un attribut du div et les autres informations sont dans "* inner html *" qu'il faudra traiter s�par�ment.

    Vous pouvez commencez a jouer avec scrapy shell (on se retourve avec une console iPython):
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    In [2]: for e in sel.xpath('//div[@class="plProductView"]'):
    ...    print (e.extract()) # inner HTML
    ...    q = raw_input('*next*?')
    ...    if q: break
    Rien de bien complique avec Python, mais il faut conna�tre un peu les technos. sous-jacentes, savoir programmer et coder en Python.
    Ce qui fait pas mal de pr�-requis avant de pouvoir envisager d'utiliser un framework comme Scrapy.

    Bon courage,
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Un Passionn� !!!
    Inscrit en
    Juillet 2011
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (�le de France)

    Informations professionnelles :
    Activit� : Un Passionn� !!!
    Secteur : High Tech - Produits et services t�l�com et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 2
    Par d�faut
    Tout d'abord merci � vous @wiztricks!

    Je vais regarder du cot� de "BeautifulSoup",
    en ce qui concerne mon programme donc je doit s�quencer les �tapes:

    1) crawler
    2) parser les liens avec scrapy shell || BeautifulSoup.

    Je vais regarder cela et je ferais un retour sous dizaine,

    encore merci.

Discussions similaires

  1. probleme avec SCrapy
    Par fezzani dans le forum R�seau/Web
    R�ponses: 5
    Dernier message: 01/09/2014, 13h55
  2. Lancer un crawl avec heritrix
    Par GoldenEyes dans le forum D�buter
    R�ponses: 0
    Dernier message: 09/09/2010, 14h08
  3. Probl�me avec la m�moire virtuelle
    Par Anonymous dans le forum CORBA
    R�ponses: 13
    Dernier message: 16/04/2002, 16h10
  4. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    R�ponses: 2
    Dernier message: 23/03/2002, 11h51
  5. R�ponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo