환상적인 농구 통계를 긁어내는 데 도움을주기 위해 병 치료를 시작했습니다. 내 주요 문제는 내 스파이더입니다 - 링크의 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
를 사용하려면