用正确的编码解析html

问题描述 投票:-1回答:1

我正试图使用 篮球参考 使用python的API与 requestsbs4 库。

from requests import get
from bs4 import BeautifulSoup

这是我想做的一个最小的例子。

# example request
r = get(f'https://widgets.sports-reference.com/wg.fcgi?css=1&site=bbr&url=%2Fteams%2FMIL%2F2015.html&div=div_roster')
soup = BeautifulSoup(dd.content, 'html.parser')
table = soup.find('table')

一切都很顺利,我就可以把这个... ... tablepandas 以其 read_html 并将我需要的数据很好地打包到一个数据框中。

我遇到的问题是编码。

在这个特定的请求中,我得到了两个带有奇怪字符的NBA球员名字。Ersan Ä°lyasova (Ersan İlyasova)和 Jorge Gutiérrez (Jorge Gutiérrez). 在目前的代码中,它们被解释为 "Ersan Ä°lyasova "和 "Jorge Gutiérrez",这显然不是我想要的。

所以问题是 -- 我该如何解决这个问题?这个网站 似乎表明他们有 windows-1251 编码,但我不确定如何使用这些信息(事实上我甚至不确定这是否是真的)。

我知道我漏掉了一些基本的东西,因为我有点搞不清楚这些编码是如何工作的,在哪一点上它们被 "解释 "了等等,所以如果你能帮我解决这个问题,我将感激不尽!

python encoding beautifulsoup utf-8 python-requests
1个回答
1
投票

我真的不知道为什么你要使用format string 你的问题也不清楚,你只是复制了网络流量中的url,然后你把引号和编码的事情混在一起。

下面你应该可以做到这一点。

import pandas as pd


df = pd.read_html("https://www.basketball-reference.com/teams/MIL/2015.html")

print(df)

输出。

[    No.                   Player Pos  ... Unnamed: 6  Exp                College   
0    34    Giannis Antetokounmpo  SG  ...         gr    1                    NaN    
1    19           Jerryd Bayless  PG  ...         us    6                Arizona    
2     5  Michael Carter-Williams  PG  ...         us    1               Syracuse    
3     9             Jared Dudley  SG  ...         us    7         Boston College    
4    11              Tyler Ennis  PG  ...         ca    R               Syracuse    
5    13          Jorge Gutiérrez  PG  ...         mx    1             California    
6    31              John Henson   C  ...         us    2                    UNC    
7     7           Ersan İlyasova  PF  ...         tr    6                    NaN    
8    23            Chris Johnson  SF  ...         us    2                 Dayton    
9    11           Brandon Knight  PG  ...         us    3               Kentucky    
10    5         Kendall Marshall  PG  ...         us    2                    UNC    
11    6            Kenyon Martin  PF  ...         us   14             Cincinnati    
12    0                O.J. Mayo  SG  ...         us    6                    USC    
13   22          Khris Middleton  SF  ...         us    2              Texas A&M    
14    3          Johnny O'Bryant  PF  ...         us    R                    LSU    
15   27            Zaza Pachulia   C  ...         ge   11                    NaN    
16   12            Jabari Parker  PF  ...         us    R                   Duke    
17   21            Miles Plumlee   C  ...         us    2                   Duke    
18    8            Larry Sanders   C  ...         us    4  Virginia Commonwealth    
19    6             Nate Wolters  PG  ...         us    1     South Dakota State 
© www.soinside.com 2019 - 2024. All rights reserved.