2016-08-08 22 views
1

Dies ist mit der vorherigen Frage, die ich schrieb here verbunden. Ich versuche, die gleichen Daten von mehreren Seiten auf der gleichen Domain zu ziehen. Eine kleine Erklärung, ich versuche Daten wie offensive Werften, Umsätze usw. aus einer Menge verschiedener Box-Scores auf eine main page zu ziehen. Das Ziehen der Daten von einzelnen Seiten funktioniert genauso wie das Erzeugen der URLs, aber wenn ich versuche, die Spinne durch alle Seiten laufen zu lassen, wird nichts zurückgegeben. Ich habe viele andere Fragen durchgesehen, die die Leute gestellt haben und die Dokumentation, und ich kann nicht herausfinden, was nicht funktioniert. Code ist unten. Danke an alle, die im Voraus helfen können.Scrapy Ziehen Sie gleiche Daten aus mehreren Seiten

import scrapy 

from scrapy import Selector 
from nflscraper.items import NflscraperItem 

class NFLScraperSpider(scrapy.Spider): 
    name = "pfr" 
    allowed_domains = ['www.pro-football-reference.com/'] 
    start_urls = [ 
     "http://www.pro-football-reference.com/years/2015/games.htm" 
     #"http://www.pro-football-reference.com/boxscores/201510110tam.htm" 
    ] 

    def parse(self,response): 
     for href in response.xpath('//a[contains(text(),"boxscore")]/@href'): 
      item = NflscraperItem() 
      url = response.urljoin(href.extract()) 
      request = scrapy.Request(url, callback=self.parse_dir_contents) 
      request.meta['item'] = item 
      yield request 

    def parse_dir_contents(self,response): 
     item = response.meta['item'] 
     # Code to pull out JS comment - https://stackoverflow.com/questions/38781357/pro-football-reference-team-stats-xpath/38781659#38781659 
     extracted_text = response.xpath('//div[@id="all_team_stats"]//comment()').extract()[0] 
     new_selector = Selector(text=extracted_text[4:-3].strip()) 
     # Item population 
     item['home_score'] = response.xpath('//*[@id="content"]/table/tbody/tr[2]/td[last()]/text()').extract()[0].strip() 
     item['away_score'] = response.xpath('//*[@id="content"]/table/tbody/tr[1]/td[last()]/text()').extract()[0].strip() 
     item['home_oyds'] = new_selector.xpath('//*[@id="team_stats"]/tbody/tr[6]/td[2]/text()').extract()[0].strip() 
     item['away_oyds'] = new_selector.xpath('//*[@id="team_stats"]/tbody/tr[6]/td[1]/text()').extract()[0].strip() 
     item['home_dyds'] = item['away_oyds'] 
     item['away_dyds'] = item['home_oyds'] 
     item['home_turn'] = new_selector.xpath('//*[@id="team_stats"]/tbody/tr[8]/td[2]/text()').extract()[0].strip() 
     item['away_turn'] = new_selector.xpath('//*[@id="team_stats"]/tbody/tr[8]/td[1]/text()').extract()[0].strip() 
     yield item 

Antwort

1

Die nachfolgenden Anfragen Sie vornehmen, werden als Offsite gefiltert, fixieren Sie Ihre allowed_domains Einstellung:

allowed_domains = ['pro-football-reference.com'] 

für mich gearbeitet.

+0

Wow, das ist lächerlich nervig. Gut zu wissen, dass ich die Dinge sonst richtig gemacht habe. Vielen Dank. – Jeff