2017-01-28 1 views
0

Ich habe diese sehr kurze Spinne geschrieben, um zu einem US News Link zu gehen und die Namen der dort aufgeführten Colleges zu übernehmen.Leere .json Datei in Scrapy

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import scrapy 

class CollegesSpider(scrapy.Spider): 
    name = "colleges" 
    start_urls = [ 
     'http://colleges.usnews.rankingsandreviews.com/best-colleges/rankings/national-universities?_mode=list&acceptance-rate-max=20' 
    ] 

    def parse(self, response): 
     for school in response.css('div.items'): 
      yield { 
       'name': school.xpath('//*[@id="view-1c4ddd8a-8b04-4c93-8b68-9b7b4e5d8969"]/div/div[1]/div[1]/h3/a').extract_first(), 
      } 

Allerdings, wenn ich diese Spinne laufen und fragen Sie nach den Namen in einer Datei mit dem Namen schools.json gespeichert werden, kommt die Datei aus leer. Was mache ich falsch?

+0

tun Sie sehen Artikel im Terminal/CLI ergab? – Umair

+0

@Umair was meinst du? Meine Terminalausgabe zeigte keine Fehler. – ch1maera

+0

@Umair Ich habe das obwohl "HTTP-Status-Code wird nicht behandelt oder nicht erlaubt" – ch1maera

Antwort

1

zu verwenden. Es liegt an der Robotererkennung.

Encode

>>> r = requests.get('http://colleges.usnews.rankingsandreviews.com/best-colleges/rankings/national-universities?_mode=list&acceptance-rate-max=20', headers={'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}) 
>>> r.status_code 
200 

Dann haben Sie alle Inhalte, die Sie benötigen. Tun Sie, was Sie analysieren oder extrahieren wollen. Das Verfahren zum Codieren eines Headers sollte in Scrapy sehr ähnlich sein.

scrapy doc for request with headers

User-Agent für Chrome

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 
0

Ich bin auf meinem Handy also nicht genau Variablennamen erinnern, aber es sollte robots_follow

Set es auf False

0

Die Seite, die Sie sich beziehen, wie url Start enthält keine Element mit der ID view-1c4ddd8a-8b04-4c93-8b68-9b7b4e5d8969 - es sieht wie ziemlich einzigartig aus und scheint nicht die gute Wahl für einen ziemlich universellen XPath-Ausdruck zu sein. Ich würde empfehlen, etwas wie school.xpath('.//div[@data-view="colleges-search-results-card"]//h3/a/text()').extract()

+0

Ich versuchte das, aber ich bekomme immer noch "HTTP-Statuscode wird nicht behandelt oder nicht erlaubt" – ch1maera

Verwandte Themen