2017-05-31 4 views
0

Donc, fondamentalement, je suis en train d'explorer une page avec un ensemble de catégories, gratter les noms de chaque catégorie, suivre un sous-lien associé à chaque catégorie à une page avec un ensemble de sous-catégories, gratter leur noms, puis suivez chaque sous-catégorie à leur page associée et récupérer les données de texte. A la fin, je veux sortir un fichier JSON formaté un peu comme:Comment parcourir récursivement les sous-pages avec Scrapy

  1. Catégorie 1 Nom
    • Sous-catégorie 1 Nom
      • données de ce nom la page de sous-catégorie
    • Sous-catégorie n
      • des données de cette page
  2. Catégorie nom n
    • Sous-catégorie 1 Nom
      • données de la page de la sous-catégorie n

etc.

Finalement, je veux être en mesure d'utiliser ces données avec ElasticSearch

J'ai à peine une expérience avec Scrapy et c'est ce que j'ai jusqu'à présent (qu'effleurer les noms des catégories de la première page, je ne sais pas ce que à faire à partir d'ici) ... De mes recherches, je crois que je dois utiliser un CrawlSpider mais je ne suis pas sûr de ce que cela implique. J'ai également été suggéré d'utiliser BeautifulSoup. Toute aide serait grandement appréciée.

class randomSpider(scrapy.Spider): 
    name = "helpme" 
    allowed_domains = ["example.com"] 
    start_urls = ['http://example.com/categories',] 

    def parse(self, response): 
     for i in response.css('div.CategoryTreeSection'): 
      yield { 
       'categories': i.css('a::text').extract_first() 
      } 
+0

si vous le pouvez, donnez-nous l'adresse du site web – parik

Répondre

0

Vous n'êtes pas familier avec ElasticSearch mais je construirais un grattoir comme celui-ci:

class randomSpider(scrapy.Spider): 
    name = "helpme" 
    allowed_domains = ["example.com"] 
    start_urls = ['http://example.com/categories',] 

    def parse(self, response): 
     for i in response.css('div.CategoryTreeSection'): 
      subcategory = i.css('Put your selector here') # This is where you select the subcategory url 
      req = scrapy.Request(subcategory, callback=self.parse_subcategory) 
      req.meta['category'] = i.css('a::text').extract_first() 
      yield req 

    def parse_subcategory(self, response): 
     yield { 
      'category' : response.meta.get('category') 
      'subcategory' : response.css('Put your selector here') # Select the name of the subcategory 
      'subcategorydata' : response.css('Put your selector here') # Select the data of the subcategory 
     } 

Vous recueillez l'URL de la sous-catégorie et envoyer une demande. La réponse de cette demande sera ouverte au parse_subcategory. Lors de l'envoi de cette requête, nous ajoutons le nom de la catégorie dans les métadonnées.

Dans la fonction parse_subcategory, vous obtenez le nom de catégorie à partir des métadonnées et collectez les données de sous-catégorie à partir de la page Web.