首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >抓取错误的表

抓取错误的表
EN

Stack Overflow用户
提问于 2020-01-23 02:47:58
回答 1查看 76关注 0票数 0

我试图将球员的高级统计数据放到excel表格中,但它抓取的是第一个表格,而不是高级统计表格。

代码语言:javascript
复制
ValueError: Length of passed values is 23, index implies 21

如果我尝试使用id代替,我得到另一个关于tbody的错误。

另外,我得到了一个错误,关于

代码语言:javascript
复制
lname=name.split(" ")[1]
IndexError: list index out of range. 

我认为这与列表中的“Nene”有关。有没有办法解决这个问题?

代码语言:javascript
复制
import requests
from bs4 import BeautifulSoup
playernames=['Carlos Delfino',
'Yao Ming',
'Andris Biedrins',
'Nene']

for name in playernames:
  fname=name.split(" ")[0]
  lname=name.split(" ")[1]
  url="https://basketball.realgm.com/search?q={}+{}".format(fname,lname)
  response = requests.get(url)

  soup = BeautifulSoup(response.content, 'html.parser')
  table = soup.find('table', attrs={'class': 'tablesaw', 'data-tablesaw-mode-exclude': 'columntoggle'}).find_next('tbody')
  print(table)  

  columns = ['Season', 'Team', 'League', 'GP', 'GS', 'TS%', 'eFG%', 'ORB%', 'DRB%', 'TRB%', 'AST%', 'TOV%', 'STL%', 'BLK%', 'USG%', 'Total S%', 'PPR', 'PPS', 'ORtg', 'DRtg', 'PER']
  df = pd.DataFrame(columns=columns)

  trs = table.find_all('tr')
  for tr in trs:
    tds = tr.find_all('td')
    row = [td.text.replace('\n', '') for td in tds]
    df = df.append(pd.Series(row, index=columns), ignore_index=True)

df.to_csv('international players.csv', index=False) 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-23 02:59:23

巴西人只用一个名字来形容足球,想想弗雷德。如果你想使用他们的名字对象(Nene/Fred),那么你需要为此实现异常处理,例如

代码语言:javascript
复制
try:
    lname=name.split(" ")[1]
except IndexError:
    lname=name

对于抓取问题,尝试使用find_all而不是find,这将为您提供给定页面上的每个数据表,然后您可以从列表中提取正确的表

table = soup.find('table', attrs={'class': 'tablesaw', 'data-tablesaw-mode-exclude': 'columntoggle'}, {'id':'table-3554'})更改为find_all

仅供参考,每次刷新页面时,表ID都会发生变化,因此您不能使用ID作为搜索机制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59866400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档