2017-06-15 15 views
1

lynda.comコースをスクラップし、その情報をcsvファイルに保存しようとしています。これは私がここでやろうとしていますどのように私のコード追加のリクエストの解析結果の解析

# -*- coding: utf-8 -*- 
import scrapy 
import itertools 


class LyndadevSpider(scrapy.Spider): 
    name = 'lyndadev' 
    allowed_domains = ['lynda.com'] 
    start_urls = ['https://www.lynda.com/Developer-training-tutorials'] 

    def parse(self, response): 
     #print(response.url) 
     titles = response.xpath('//li[@role="presentation"]//h3/text()').extract() 
     descs = response.xpath('//li[@role="presentation"]//div[@class="meta-description hidden-xs dot-ellipsis dot-resize-update"]/text()').extract() 
     links = response.xpath('//li[@role="presentation"]/div/div/div[@class="col-xs-8 col-sm-9 card-meta-data"]/a/@href').extract() 

     for title, desc, link in itertools.izip(titles, descs, links): 
      #print link 
      categ = scrapy.Request(link, callback=self.parse2) 
      yield {'desc': link, 'category': categ} 

    def parse2(self, response): 
     #getting categories by storing the navigation info 
     item = response.xpath('//ol[@role="navigation"]').extract() 
     return item 

であることは、私はチュートリアルのリストのタイトル、説明をつかみ、その後、URLに移動し、parse2でカテゴリをつかんだということです。

はしかし、私はこのような結果を得る:

category,desc 
<GET https://www.lynda.com/SVN-Subversion-tutorials/SVN-Java-Developers/552873-2.html>,https://www.lynda.com/SVN-Subversion-tutorials/SVN-Java-Developers/552873-2.html 
<GET https://www.lynda.com/Java-tutorials/WebSocket-Programming-Java-EE/574694-2.html>,https://www.lynda.com/Java-tutorials/WebSocket-Programming-Java-EE/574694-2.html 
<GET https://www.lynda.com/GameMaker-tutorials/Building-Physics-Based-Platformer-GameMaker-Studio-Using-GML/598780-2.html>,https://www.lynda.com/GameMaker-tutorials/Building-Physics-Based-Platformer-GameMaker-Studio-Using-GML/598780-2.html 

私は私が欲しい情報にアクセスするにはどうすればよいですか?

答えて

1

あなたはstart_urls(代わりの辞書をもたらす)の応答を解析するparse方法でyieldscrapy.Requestを必要としています。また、私はコースの項目をループし、各コースの項目の情報を個別に抽出したいと思います。

カテゴリによって正確な意味がわかりません。私はそれらがの下のコースの詳細ページで見ることができるタグだと思います。のスキル。しかし、私は間違っているかもしれません。

# -*- coding: utf-8 -*- 
import scrapy 

class LyndaSpider(scrapy.Spider): 
    name = "lynda" 
    allowed_domains = ["lynda.com"] 
    start_urls = ['https://www.lynda.com/Developer-training-tutorials'] 

    def parse(self, response): 
     courses = response.css('ul#category-courses div.card-meta-data') 
     for course in courses: 
      item = { 
       'title': course.css('h3::text').extract_first(), 
       'desc': course.css('div.meta-description::text').extract_first(), 
       'link': course.css('a::attr(href)').extract_first(), 
      } 
      request = scrapy.Request(item['link'], callback=self.parse_course) 
      request.meta['item'] = item 
      yield request 

    def parse_course(self, response): 
     item = response.meta['item'] 
     #item['categories'] = response.css('div.tags a em::text').extract() 
     item['category'] = response.css('ol.breadcrumb li:last-child a span::text').extract_first() 
     return item 
+0

こんにちは:

は、このコードを試してみてください。答えをありがとう、任意のコースをクリックした場合。あなたは左上に表示されます –

+0

あなたはブレッドクラムナビゲーションを意味しますか?私はあなたの仕様を反映する答えを編集しました - 最後のナビゲーション項目からテキストを抽出するようになりました。 –

+0

ありがとうございます。とにかくそれを修正しました。あなたは命を救った人です。ところで、2段階のログインをする方法を知っていますか? –