2017-09-06 5 views
-1

Ich wollte eine website kratzen. Die Extraktion, die ich machen möchte, ist die Dokumentenliste, der Name des Autors und das Datum. Ich habe mir ein paar Scrapy-Spider-Videos angeschaut und war in der Lage, den 3-Shell-Script-Befehl herauszufinden, der die erforderlichen Daten von der Website liefert. Die Befehle sindMultiple Scaping mit Scrapy Spider

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

für Datum:

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

für author:

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

für die Dokumentenlinks auf der Seite

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

Ich versuche, es zu bekommen durch Python aber alles umsonst. Da gibt es mehrere Daten. Hier

ist der Python-Code:

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

Sie 'css' , besser ist 'xpath' – AndMar

+0

Ich versuche, ein weiteres Modul zu erstellen, und die Aufgabe wird sein, Artikelverknüpfung zu klicken und Datum, Autor und Artikeltitel zu extrahieren. Und tun dies für alle Artikel Link die Webseite (cato.org/research/34/commentary). Bitte helfen Sie – Shad

Antwort

0

Diese funktionieren soll. Alles, was Sie brauchen, ist nur diesen Befehl ausführen: scrapy runspider cato.py -o out.json Aber ich sehen kann, gibt es Fehler mit Links, werden Sie nur Text von Links zu nehmen, href nicht für diesen Einsatz nicht

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

Vielen Dank. Ich kann nicht sagen, wie dankbar ich bin. Nur eine Sache zu fragen, dass "Catoitem" Klasse getrennt oder es muss mit dieser 2. Spinne Teil verwendet werden? – Shad

+0

Sie können 'CatoItem' in das gleiche Modul wie Ihre Spinne stellen, aber es ist eine schlechte Übung, besser ist es in' items.py', da Sie in Zukunft viele Spider haben können und es einfach von einem zu importieren ist Modul. – AndMar

+0

Sie sind ein Lebensretter. – Shad

Verwandte Themen