Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3:值的长度与索引的长度不匹配_Python_Python 3.x_Pandas_Beautifulsoup - Fatal编程技术网

Python3:值的长度与索引的长度不匹配

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(

我正在尝试组合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(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。这样,我将收集所有组的所有装置