2017-01-28 2 views
0

私はこの非常に短いスパイダーを書いて、米国のニュースリンクにアクセスし、そこに掲載されている大学の名前を取得しました。Scrapの空の.jsonファイル

#!/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(), 
      } 

私はこのクモを実行し、schools.jsonという名前のファイルに保存する名前を尋ねたときただし、ファイルが空白に出てきます。私は間違って何をしていますか?開始URLはいずれも含まれていないとして、あなたが参照しているページを、私は私の携帯の午前

+0

のためのユーザエージェントあなたはターミナル/ CLIで得られた項目を参照していますか? – Umair

+0

@Umairどういう意味ですか?私の端末出力にエラーは見られませんでした。 – ch1maera

+0

@Umair「HTTPステータスコードは処理されない、または許可されませんが」私はこれを取得しました。 – ch1maera

答えて

1

それを得ました!それはロボットの検出のためです。

エンコード

>>> 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 

次に、あなたはあなたが必要とするすべてのコンテンツを持っています。あなたが必要とする解析や抽出を行います。ヘッダーをエンコードする手順は、Scrapyで非常に似ているはずです。

scrapy doc for request with headers

クローム

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

はとても正確な変数名を覚えていないが、それはそれは偽

0

にrobots_follow

設定する必要がありますidがview-1c4ddd8a-8b04-4c93-8b68-9b7b4e5d8969の要素です。非常にユニークなように見えますが、普遍的なXPath式には適していないようです。私は何かを使用することをお勧めしますschool.xpath('.//div[@data-view="colleges-search-results-card"]//h3/a/text()').extract()

+0

私はそれを試みたが、私はまだ "HTTPステータスコードが処理されないか、または許可されていない" – ch1maera