2013-12-08 5 views
0

환상적인 농구 통계를 긁어내는 데 도움을주기 위해 병 치료를 시작했습니다. 내 주요 문제는 내 스파이더입니다 - 링크의 href 속성을 긁어 내서 해당 URL의 다른 파서를 콜백하는 방법은 무엇입니까?처음에 긁어 모으는 URL에서 콜백을 요청하려면 어떻게해야합니까?

나는 link extractors을 조사했는데 이것이 내 해결책 일지 모르지만 확실하지 않습니다. 나는 그것을 계속해서 또 다시 읽었고, 어디서부터 시작해야하는지 혼란 스럽다. 다음은 지금까지 가지고있는 코드입니다.

def parse_player(self, response): 
    player_name = "Steven Adams" 
    sel = Selector(response) 
    player_url = sel.xpath("//a[text()='%s']/@href" % player_name).extract() 
    return Request("http://sports.yahoo.com/'%s'" % player_url, callback = self.parse_curr_stats) 

def parse_curr_stats(self, response): 
    sel = Selector(response) 
    stats = sel.xpath("//div[@id='mediasportsplayercareerstats']//table[@summary='Player']/tbody/tr[last()-1]") 
    items =[] 

    for stat in stats: 
     item = player_item() 
     item['fgper'] = stat.xpath("td[@title='Field Goal Percentage']/text()").extract() 
     item['ftper'] = stat.xpath("td[@title='Free Throw Percentage']/text()").extract() 
     item['treys'] = stat.xpath("td[@title='3-point Shots Made']/text()").extract() 
     item['pts'] = stat.xpath("td[@title='Points']/text()").extract() 
     item['reb'] = stat.xpath("td[@title='Total Rebounds']/text()").extract() 
     item['ast'] = stat.xpath("td[@title='Assists']/text()").extract() 
     item['stl'] = stat.xpath("td[@title='Steals']/text()").extract() 
     item['blk'] = stat.xpath("td[@title='Blocked Shots']/text()").extract() 
     item['tov'] = stat.xpath("td[@title='Turnovers']/text()").extract() 
     item['fga'] = stat.xpath("td[@title='Field Goals Attempted']/text()").extract() 
     item['fgm'] = stat.xpath("td[@title='Field Goals Made']/text()").extract() 
     item['fta'] = stat.xpath("td[@title='Free Throws Attempted']/text()").extract() 
     item['ftm'] = stat.xpath("td[@title='Free Throws Made']/text()").extract() 
     items.append(item) 
    return items 

그래서 당신이 볼 수있는, 최초의 구문 분석 함수에서, 당신은 이름을 부여하고, 당신은 player_url "에 저장되어있는 자신의 개인 페이지로 여러분을 안내 할 것입니다 페이지에있는 링크를 찾으십시오 ". 그러면 어떻게 그 페이지로 가서 두 번째 파서를 실행합니까?

마치 내가 뭔가를 완전히 광택을 내고 누군가가 약간의 빛을 비출 수 있다면 그것은 크게 감사 할 것입니다.

def parse_player(self, response): 
    ...... 
    yield Request(......) 

단일 구문 분석 방법에 보내려는 많은 요청 객체가있는 경우, 가장 PRACTIC입니다 : 당신이하는 Request 객체를 보낼 그냥이 같은 yield보다는 return를 사용하려면

답변

0

이 같은 :

def parse_player(self, response): 
    ...... 
    res_objs = [] 
    # then add every Request object into 'res_objs' list, 
    # and in the end of the method, do the following: 
    for req in res_objs: 
     yield req 

나는 scrapy 거미가 실행 중일 때,이 같은 후드 요청을 처리 할 생각 :

# handle requests 
for req_obj in self.parse_play(): 
    # do something with *Request* object 

Request 개체를 보내려면 수율을 기억하십시오.

관련 문제