Python3:值的长度与索引的长度不匹配
我正在尝试组合pandas以检索装置中许多表的值,但在提取时,我也愿意包括表中包含的href标记,但是我遇到了一个错误: 代码是:Python3:值的长度与索引的长度不匹配,python,python-3.x,pandas,beautifulsoup,Python,Python 3.x,Pandas,Beautifulsoup,我正在尝试组合pandas以检索装置中许多表的值,但在提取时,我也愿意包括表中包含的href标记,但是我遇到了一个错误: 代码是: import numpy as nd import pandas as pd import requests from bs4 import BeautifulSoup url = 'http://fcf.cat/calendari/1920/futbol-11/infantil-primera-divisio/grup-1' df = pd.read_html(
import numpy as nd
import pandas as pd
import requests
from bs4 import BeautifulSoup
url = 'http://fcf.cat/calendari/1920/futbol-11/infantil-primera-divisio/grup-1'
df = pd.read_html(url, attrs={'class': 'calendaritable'})[0]
print(df)
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
links = []
for tr in soup.findAll("tr"):
trs = tr.findAll("td")
for each in trs:
try:
link = each.find('a')['href']
links.append(link)
except:
pass
df['Links'] = links
print (df.to_string())
这是我编写的代码,为我完成了这项工作:
import numpy as nd
import pandas as pd
url = 'http://fcf.cat/calendari/1920/futbol-11/infantil-primera-divisio/grup-{}'
hoja = 'grup-{}'
xlwriter = pd.ExcelWriter('Resultados.xlsx')
for i in range(1,19):
converturl = url.format(i)
# print(url)
dfResultats = pd.read_html(converturl, header=0)
numgrupo = hoja.format(i)
tablelen = len (dfResultats)
tablelen = tablelen - 1
strrow = 0
strcol = 0
for x in range (1,tablelen):
df = dfResultats[x]
df.to_excel(xlwriter,sheet_name=numgrupo, index=False, startrow=strrow , startcol=strcol)
strrow = strrow + 9
xlwriter.close()
其想法是增强代码,将HREF包含在excel工作表中,因为这包括链接到我稍后需要提取的游戏详细信息。此脚本将从表中获取所有信息,包括链接:
import requests
import pandas as pd
from bs4 import BeautifulSoup
url = 'http://fcf.cat/calendari/1920/futbol-11/infantil-primera-divisio/grup-1'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')
out = []
for tr in soup.select('.calendaritable tbody tr'):
t = tr.get_text(strip=True, separator='|').split('|')
a = tr.select_one('.calendaritablehover a')
jornada = tr.find_previous('th', {'colspan': '4'}).get_text(strip=True)
jornada_date = tr.find_previous('th', {'colspan': '3'}).get_text(strip=True)
if len(t) == 4: # there's result
out.append({'Team 1': t[0], 'Team 2': t[3], 'Goals 1': t[1], 'Goals 2': t[2], 'Jornada': jornada, 'Jornada date': jornada_date, 'Link': a['href'] if a else ''})
else:
out.append({'Team 1': t[0], 'Team 2': t[2], 'Goals 1': '', 'Goals 2': '', 'Jornada': jornada, 'Jornada date': jornada_date, 'Link': a['href'] if a else ''})
df = pd.DataFrame(out)
print(df)
df.to_csv('data.csv')
印刷品:
Team 1 Team 2 Goals 1 Goals 2 Jornada Jornada date Link
0 CATALONIA, U.B.,A EUROPA, C.E.,B 0 1 Jornada 1 06-10-2019 http://fcf.cat/acta/1920/futbol-11/infantil-pr...
1 FUNDACIO P. CE. JUPITER,A ESCOLA PIA SARRIÀ S.E.,A 1 0 Jornada 1 06-10-2019 http://fcf.cat/acta/1920/futbol-11/infantil-pr...
2 Pª BARC. CINC COPES,A MONTAÑESA, C.F.,A 1 0 Jornada 1 06-10-2019 http://fcf.cat/acta/1920/futbol-11/infantil-pr...
3 Pª BARC. BARCINO, CE,A Pª BARC. ANGUERA,B 0 3 Jornada 1 06-10-2019 http://fcf.cat/acta/1920/futbol-11/infantil-pr...
4 DIAGONAL CLUB ESP.,A SISTRELLS C.F.,A 8 2 Jornada 1 06-10-2019 http://fcf.cat/acta/1920/futbol-11/infantil-pr...
.. ... ... ... ... ... ... ...
235 DIAGONAL CLUB ESP.,A Pª BARC. ANGUERA,B Jornada 30 31-05-2020
236 MONTAÑESA, C.F.,A Pª BARC. BARCINO, CE,A Jornada 30 31-05-2020
237 Pª BARC. CINC COPES,A ESCOLA PIA SARRIÀ S.E.,A Jornada 30 31-05-2020
238 FUNDACIO P. CE. JUPITER,A EUROPA, C.E.,B Jornada 30 31-05-2020
239 L'HOSPITALET, CENTRE ESPORTS,B CATALONIA, U.B.,A Jornada 30 31-05-2020
[240 rows x 7 columns]
并从Libre Office生成data.csv
,屏幕截图:
欢迎使用堆栈溢出!感谢您发布完整的示例-这真的很有帮助!因此,我们可以更好地了解这个问题,您可以发布您的错误,包括完整的堆栈跟踪吗?请参阅上的本指南,以了解一些很棒的技巧。您是否也可以解释一下您正在尝试做什么?当我运行代码时,我得到一个带有形状(8,7)的数据框和一个长度为1112的列表
links
。不能在数据框df
中创建长度与其他列不同的列。你为什么要将链接列表添加为另一列,而不是将其作为变量?你正在执行pd.read\u html(…)[0]
以获取第一个表,但是你正在丢弃read\u html
返回的29个其他表。谢谢你的评论。我一定会尽力解释得更好。这些网站实际上包含32个表格。我想集中在表1到表30中,因为其中包含固定装置。这个想法是提取其中一个链接,然后做一个循环,对其他29个进行同样的操作。熊猫只提取文本,不提取链接。最终我想提取所有信息并将其导出到Excel工作表。哇!!!这太神奇了。我现在需要坐下来试着理解背后的逻辑。基本上,正如我刚刚开始讨论python和web废弃一样,您已经使用beautifulsoup来收集信息,然后使用pandas构建一个数据框架来导出所有信息。我需要尝试修改脚本,因为我需要迭代url中的组1到组18。这样,我将收集所有组的所有装置