2017-09-06 4 views
-1

Je voulais gratter un website. L'extraction que je veux faire est la liste des documents, le nom de l'auteur et la date. J'ai regardé quelques vidéos d'araignées scrapy et capable de comprendre 3 commande de script de coquille qui donne les données requises du site Web. Les commandes sontScapes multiples avec araignée Scrapy

scrapy shell https://www.cato.org/research/34/commentary 

pour ce jour:

response.css('span.date-display-single::text').extract() 

pour auteur:

response.css('p.text-sans::text').extract() 

pour les liens de documents dans la page

response.css('p.text-large.experts-more-h > a::text').extract() 

Je suis en train de l'obtenir à travers Python mais en vain. Comme il y a plusieurs données.

Voici le code python:

import scrapy 
class CatoSpider(scrapy.Spider): 

    name = 'cato' 

    allowed_domains = ['cato.org'] 

    start_urls = ['https://www.cato.org/research/34/commentary'] 


def parse(self, response): 

    pass 
+0

Ne pas utiliser 'css' pour cette , mieux vaut 'xpath' – AndMar

+0

J'essaie de construire un module de plus et la tâche sera de cliquer sur le lien de l'article et d'extraire la date, l'auteur et le titre de l'article. Et faites ceci pour tout l'article lien la page Web (cato.org/research/34/commentary). S'il vous plaît aider – Shad

Répondre

0

Cela devrait fonctionner. Tout ce que vous avez besoin est exécutée juste cette commande: scrapy runspider cato.py -o out.json Mais comme je le vois, il y a erreur avec des liens, ne vous prendra que le texte de liens, non href

import scrapy 

class CatoItem(scrapy.Item): 
    date = scrapy.Field() 
    author = scrapy.Field() 
    links = scrapy.Field() 


class CatoSpider(scrapy.Spider): 

    name = 'cato' 

    allowed_domains = ['cato.org'] 

    start_urls = ['https://www.cato.org/research/34/commentary'] 


    def parse(self, response): 
     date = response.css('span.date-display-single::text').extract() 
     author = response.css('p.text-sans::text').extract() 
     links = response.css('p.text-large.experts-more-h > a::text').extract() 
     for d, a, l in zip(date, author, links): 
      item = CatoItem() 
      item['date'] = d 
      item['author'] = a 
      item['links'] = l 
      yield item 
+0

Merci une tonne. Je ne peux pas dire combien je suis reconnaissant. Juste besoin de demander une chose que la classe "Catoitem" se sépare ou doit-elle être utilisée avec cette 2ème partie araignée? – Shad

+0

Vous pouvez mettre 'CatoItem' dans le même module que votre spider, mais c'est une mauvaise pratique, mieux vaut le mettre dans' items.py' parce que vous pouvez avoir beaucoup d'araignées dans le futur et il sera facile de l'importer d'un module. – AndMar

+0

Vous êtes un épargnant de vie. – Shad