2017-12-11 11 views
0

フィルタが付いているウェブサイトのデータを取得しようとしています。このウェブサイトは次のものです:https://www.lequipe.fr/Basket/RES_NBA.htmlスクラブでウェブサイトのフィルタを管理する方法

私は必要なすべての情報を収集するだけのスパイダーを持っていますが、表示されている日付のみです。

フィルタで使用可能なすべての日付のデータを収集するために、フィルタを反復処理する必要があります。

誰かが助けてくれればとっても感謝します。

私のクモは、このようなものです:

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


class LequipeBotSpider(scrapy.Spider): 
name = 'Lequipe_bot' 
allowed_domains = ['www.lequipe.fr/Basket/RES_NBA.html'] 
start_urls = ['http://www.lequipe.fr/Basket/RES_NBA.html'] 
#location of csv file 
custom_settings = { 
    'FEED_FORMAT' : "csv", 
    'FEED_URI' : 'tmp/lequipe2.csv' 
} 

def parse(self, response): 
    #Extracting the content using css selectors 
    #recap = response.css(".equipeDom a::text,div.score span.score--chiffre::text,.equipeExt a::text").extract() 
    recap=response.css(".equipeDom a::text,div.score span.score--chiffre::text,.equipeExt a::text,div.equipeDom span.nba--ranking::text,div.equipeExt span.nba--ranking::text").extract() 




    #Give the extracted content row wise 
    for x in range(0,(len(recap))/6): 
     #create a dictionary to store the scraped info 
     scraped_info = { 
      'equipe_dom' : recap[1+6*x], 
      'score_dom' : recap[2+6*x], 
      'score_ext' : recap[3+6*x], 
      'equipe_ext' : recap[4+6*x], 
      'classement_dom' : recap[0+6*x], 
      'classement_ext' : recap[5+6*x], 

     } 

     #yield or give the scraped info to scrapy 
     yield scraped_info 

、どのように私は@furasの溶液を用いてすべてのページの削れを繰り返すことができ、事前

+0

あなたは、クラス= filtrecalendrier' '内のすべての日付を持っており、すべての日付は、詳細のページへのリンクがあります。問題はどこだ ? – furas

答えて

0

ありがとうございますですべての日付を持っていますのselectウィジェット
とURLが詳細

for x in response.xpath('//*[@class="filtrecalendrier"]/option/@value'): 
    print(x.extract()) 

結果ページにあります

/Basket/BasketResultat22420.html 
/Basket/BasketResultat22421.html 
/Basket/BasketResultat22422.html 
... 

今、あなたはhttps://www.lequipe.fr/

response.urljoin('/Basket/BasketResultat22420.html') 

# https://www.lequipe.fr/Basket/BasketResultat22420.html 

でそれに参加するために持っていて、詳細情報を取得するためにページをロードすることができます


EDIT:作業コード

#!/usr/bin/env python3 

# 
# https://stackoverflow.com/a/47761077/1832058 
# 

import scrapy 

class MySpider(scrapy.Spider): 

    name = 'myspider' 

    allowed_domains = ['www.lequipe.fr'] 

    start_urls = ['http://www.lequipe.fr/Basket/RES_NBA.html'] 

    def parse(self, response): 
     print('url:', response.url) 

     for item in response.xpath('//*[@class="filtrecalendrier"]/option'): 

      date = item.xpath('./text()').extract_first() 
      url = item.xpath('./@value').extract_first() 

      url = response.urljoin(url) 

      yield scrapy.Request(url, callback=self.parse_items, meta={'date': date}) 


    def parse_items(self, response): 
     rows = response.css('.ligne.bb-color') 

     for row in rows: 

      score = row.css('.score span::text').extract() 
      if len(score) < 2: 
       score = ['', ''] 

      item = { 
       'date': response.meta['date'], 
       'equipe_dom': row.css('.equipeDom a::text').extract_first(), 
       'score_dom': score[0], 
       'score_ext': score[1], 
       'equipe_ext': row.css('.equipeExt a::text').extract_first(), 
       'classement_dom': row.css('.equipeDom a span::text').extract_first(), 
       'classement_ext': row.css('.equipeExt a span::text').extract_first(), 
      } 

      #print(item) 

      yield item 

# --- it runs without project and saves in `output.csv` --- 

from scrapy.crawler import CrawlerProcess 

c = CrawlerProcess({ 
    'USER_AGENT': 'Mozilla/5.0', 

    # save in file as CSV, JSON or XML 
    'FEED_FORMAT': 'csv',  # csv, json, xml 
    'FEED_URI': 'output.csv', # 
}) 
c.crawl(MySpider) 
c.start() 
+0

ありがとうございました。私はあなたのソリューションを試し、私のスパイダーでどのように反復できるのか見ていきます。もう一度、ありがとう。 – moundjou

+0

私は作業コードを入れました。 – furas

+0

あまりにも多くのおかげでありがとう。私はこれとは遠く離れていましたが、今私は戻ってきて、あなたのコードを試してみます。私たちは連絡を取り合う。 – moundjou

関連する問題