2016-11-25 2 views
0

이것이이 질문을위한 장소가 아니지만 미안하지만 다른 곳을 물어볼 곳이 확실치 않습니다.파이썬으로 웹 데이터 긁기

저는 rotogrinders.com에서 데이터를 긁어 내려고 노력하고 있습니다. 몇 가지 문제가 있습니다. 특히

, 나는이 형식의 URL을 사용하여 이전 NHL 게임 데이터를 긁어 할 수 있도록하려면 (분명히 다른 일의 데이터에 대한 날짜를 변경할 수 있습니다) : https://rotogrinders.com/game-stats/nhl-skater?site=draftkings&date=11-22-2016

을 그러나, 나는 페이지에 도착하면 데이터가 페이지로 나뉘어져있는 것을 확인하고, 페이지 하단의 "모두"버튼을 클릭 한 후 나타나는 데이터를 가져 오기 위해 스크립트를 작성하려면 어떻게해야하는지 확신 할 수 없습니다.

파이썬에서이 작업을 수행 할 수있는 방법이 있습니까? 아마도 버튼 클릭을 허용하는 라이브러리일까요? 아니면 실제로 URL/요청에 대해 영리하면서 버튼을 클릭하지 않고 데이터를 가져올 수있는 방법이 있습니까?

+0

셀렌. –

+0

지금까지 무엇을 했습니까? 코드를 보여 주거나 작업을 시도하면 사람들이 더 기꺼이 도움을줍니다. – Dalvenjia

답변

1

사실이 경우 복잡한 일이 아닙니다. "모두"를 클릭하면 네트워크 요청이 발행되지 않습니다.. 데이터는 이미 모두입니다. HTML의 script 태그 안에는 추출 만하면됩니다.

배열을로드 (re가 (스크립트에서 원하는 "플레이어"배열을 추출하는) requests는, (페이지의 콘텐츠를 다운로드) BeautifulSoup (HTML을 구문 분석하고 원하는 script 요소를 찾기 위해) 사용 json 작동 코드 파이썬 목록에 문자열) :

import json 
import re 

import requests 
from bs4 import BeautifulSoup 

url = "https://rotogrinders.com/game-stats/nhl-skater?site=draftkings&date=11-22-2016" 
response = requests.get(url) 

soup = BeautifulSoup(response.content, "html.parser") 
pattern = re.compile(r"var data = (\[.*?\]);$", re.MULTILINE | re.DOTALL) 

script = soup.find("script", text=pattern) 

data = pattern.search(script.text).group(1) 
data = json.loads(data) 

# printing player names for demonstration purposes 
for player in data: 
    print(player["player"]) 

인쇄 : "버튼 클릭을 허용 아마도 일부 라이브러리"

Jeff Skinner 
Jordan Staal 
... 
William Carrier 
A.J. Greer 
+0

고마워요! BeautifulSoup에 대해 들어 봤지만 전에 사용해 본 적이별로 없었습니다. 분명히 나는 ​​그것이 할 수있는 모든 것을 정말로 파악하기 위해 더 많은 문서를 읽을 필요가있다. 도움말에 다시 한 번 감사드립니다. – TrolliOlli