>

파이썬 3.6 Selenium 를 사용하고 있습니다   Chrome web driver 와 함께

NHL 통계 데이터를 긁어 시도. 데이터를 얻을 수는 있지만 웹 사이트의 테이블을 Excel로 미러링하도록 형식을 지정하려고합니다. 데이터를 긁을 수는 있지만 전체 데이터 중 하나의 열만 수집 할 수 있습니다.

아래는 내 코드입니다-

#Load Lib
import csv
from selenium import webdriver
#Browser load and player stats
driver = webdriver.Chrome(executable_path=r"ENTER PATH")
driver.get("http://www.nhl.com/stats/player?aggregate=0&gameType=2&report=skatersummary&pos=S&reportType=season&seasonFrom=20162017&seasonTo=20162017&filter=gamesPlayed,gte,1&sort=points,goals,assists")
PlayerStats = driver.find_elements_by_class_name("rt-tr-group")
for post in PlayerStats:
        print(post.text)
driver.close()

출력
1
코너 맥 다비드
2016-17
EDM
C
82
30
70
100
27
26
1.22
3
27
1
2
6
1
251
11.9
21:07
24.37
43.22
시드니 크로스비
2016-17
PIT
C
75
44
45
89
17
24
1.19
14
25
0
0
5
1
255
17.3
19:52
24.69
48.23


  • 답변 # 1

    스크랩 된 데이터에 줄 바꿈이 있으므로 줄 바꿈을 다른 것으로 바꿀 수 있습니다. 탭

    for post in PlayerStats:
        print(post.text.replace('\n', '\t'))
    
    

  • 답변 # 2

    개행 문자로 나누면됩니다.

    print(post.text.split('\n')) # this is only print. How to split and save a list of lists, I will leave it as an exercise for you.
    
    

    출력 :

    ['1', 'Connor McDavid', '2016-17', 'EDM', 'C', '82', '30', '70', '100', '27', '26', '1.22', '3', '27', '1', '2', '6', '1', '251', '11.9', '21:07', '24.37', '43.2']
    ['2', 'Sidney Crosby', '2016-17', 'PIT', 'C', '75', '44', '45', '89', '17', '24', '1.19', '14', '25', '0', '0', '5', '1', '255', '17.3', '19:52', '24.69', '48.2']
    
    

    목록 목록을 Excel로 변환하려면 pandas 를 사용하십시오  도서관.

    df = pandas.DataFrame(PlayerStats) # after you save the list of lists
    df = df.T # Transpose. rows become columns.
    df = df.T # Transpose. change it once again from column to rows
    # I know the above is like a hack. Would appreciate if someone came up with
    # a neater solution.
    # To add column names:
    df.columns = ['Heading1', 'Heading2'] # -> get the headings from the site
    # To save as excel
    df.to_excel("filename.xlsx") # -> has arguments, please check Pandas documentation
    
    

    전치 할 수있는 깔끔한 원 라이너 :

    df = pd.DataFrame(PlayerStats).T.T
    
    

    출력 :

    0               1        2    3  4   5   6   7    8   9   ...   13 14 15 16  \
    0  1  Connor McDavid  2016-17  EDM  C  82  30  70  100  27  ...   27  1  2  6   
    1  2   Sidney Crosby  2016-17  PIT  C  75  44  45   89  17  ...   25  0  0  5   
      17   18    19     20     21    22  
    0  1  251  11.9  21:07  24.37  43.2  
    1  1  255  17.3  19:52  24.69  48.2  
    [2 rows x 23 columns]
    
    

  • 답변 # 3

    를 직접 그것을 캔트. 플레이어에 대한 데이터를 배열로 배치해야합니다. 에서 당신은 뭔가를 가지고 있습니다

    [Player1 Data, Player2 Data, ...]
    
    

    Player1 Data는리스트 플레이어 데이터입니다. 이 후 파이썬에서 Matrix Transpose가 필요할 수 있습니다.

    플레이어 데이터를 배열에 배치하는 방법. 예.

    players_data = []
    for post in PlayerStats:
        player_data = []
        for i in range(23):  # where 23 is column count
            player_data.append(post.text)
            next(post)  # iter item
        players_data.append(player_data)
    players_data = list(zip(*players_data))  # Here you gote "Python split csv column into rows"
    
    

    print (players_data [0]) # 플레이어 이름 출력

관련 자료

  • 이전 java - listadd ()와 listadd (new ArrayList ())의 차이점은 무엇입니까?
  • 다음 루비 분리 구문