Python 3.x 为什么玩家编号不在不同的列中?

Python 3.x 为什么玩家编号不在不同的列中?,python-3.x,web-scraping,Python 3.x,Web Scraping,我已经创建了一个脚本,收集网站上的信息,并将其放到脚本中。我正在学习python抓取,我希望能得到一些帮助,因为我希望玩家的数字能出现在不同的专栏上 # import libraries import pandas as pd import requests from bs4 import BeautifulSoup import xlsxwriter import xlwt from xlwt import Workbook # Workbook is created wb = Workb

我已经创建了一个脚本,收集网站上的信息,并将其放到脚本中。我正在学习python抓取,我希望能得到一些帮助,因为我希望玩家的数字能出现在不同的专栏上

# import libraries

import pandas as pd
import requests
from bs4 import BeautifulSoup
import xlsxwriter
import xlwt
from xlwt import Workbook

# Workbook is created
wb = Workbook()

# add_sheet is used to create sheet.
sheet1 = wb.add_sheet('Sheet 1')

#send request

#url = 'http://fcf.cat/acta/1920/futbol-11/infantil-primera-divisio/grup-11/1i/sant-ildefons-ue-b/1i/lhospitalet-centre-esports-c'

url = 'https://www.fcf.cat/acta/2422183'

page = requests.get(url,timeout=5, verify=False)

soup = BeautifulSoup(page.text,'html.parser')

#read acta

#acta_text = []
#acta_text_element = soup.find_all(class_='acta-table')

#for item in acta_text_element:
#    acta_text.append(item.text)
i = 0
acta = []
for tr in soup.find_all('tr'):
   values = [td.text.strip() for td in tr.find_all('td') ]
   print(values)
   acta.append(values)
   i = 1 + i
   sheet1.write(i,0,values)

wb.save('xlwt example.xls')

print(acta)

谢谢,

以左边的团队为例,尝试以下方法:

tables = soup.select('table')
players = []
columns = ["Player","Shirt"]
titulars = [item for item in tables[1].text.strip().split('\n') if len(item)>0] 
#tables[1] is where the data for the first team is; the other team is in tables[8]

for num, name in zip(titulars[2::2],titulars[1::2]):
    player = []
    player.extend((num,name))    
    players.append(player)
pd.DataFrame(players,columns=columns)
输出:

    Player                        Shirt
0   TORNER ENCINAS, GONZALO     1
1   MACHUCA LOVERA, OSMAR SILVESTRE     3
2   JARA MARTIN, BLAI   4
3   AGUILAR LUQUE, DANIEL   5
4   FONT MURILLO, JOAQUIN   6
5   MARTÍNEZ ELVIR, RICHARD ADRIAN  7
6   MARQUEZ RODRIGUEZ, GERARD   8
7   PATUEL BATLLE, GERARD   10
8   EL MAHI ZAROUALI, BILAL     11
9   JAUME MORERA, ADRIA     14
10  DEL VALLE ESCANCIANO, MARTI     15

以左边的团队为例,尝试以下方法:

tables = soup.select('table')
players = []
columns = ["Player","Shirt"]
titulars = [item for item in tables[1].text.strip().split('\n') if len(item)>0] 
#tables[1] is where the data for the first team is; the other team is in tables[8]

for num, name in zip(titulars[2::2],titulars[1::2]):
    player = []
    player.extend((num,name))    
    players.append(player)
pd.DataFrame(players,columns=columns)
输出:

    Player                        Shirt
0   TORNER ENCINAS, GONZALO     1
1   MACHUCA LOVERA, OSMAR SILVESTRE     3
2   JARA MARTIN, BLAI   4
3   AGUILAR LUQUE, DANIEL   5
4   FONT MURILLO, JOAQUIN   6
5   MARTÍNEZ ELVIR, RICHARD ADRIAN  7
6   MARQUEZ RODRIGUEZ, GERARD   8
7   PATUEL BATLLE, GERARD   10
8   EL MAHI ZAROUALI, BILAL     11
9   JAUME MORERA, ADRIA     14
10  DEL VALLE ESCANCIANO, MARTI     15

需要考虑两件事:

您可以使用值[0]分隔列表中的第一个元素,然后对其余项目使用值[1:] 使用isnumeric检查字符串值是否为数字 请尝试以下代码:

for tr in soup.find_all('tr'):
   values = [td.text.strip() for td in tr.find_all('td') ]
   print(values)
   acta.append(values)
   i = 1 + i
   if len(values) and values[0].isnumeric():  # if first element is number
       sheet1.write(i,0,values[0])  # number in column 1
       sheet1.write(i,1,values[1:])  # rest of list in column 2
   else:
       sheet1.write(i,0,values)  # all values in column 1
Excel输出被截断


需要考虑两件事:

您可以使用值[0]分隔列表中的第一个元素,然后对其余项目使用值[1:] 使用isnumeric检查字符串值是否为数字 请尝试以下代码:

for tr in soup.find_all('tr'):
   values = [td.text.strip() for td in tr.find_all('td') ]
   print(values)
   acta.append(values)
   i = 1 + i
   if len(values) and values[0].isnumeric():  # if first element is number
       sheet1.write(i,0,values[0])  # number in column 1
       sheet1.write(i,1,values[1:])  # rest of list in column 2
   else:
       sheet1.write(i,0,values)  # all values in column 1
Excel输出被截断


我建议创建另一个空数组,将另一列中所需的值附加到该数组,然后将数组转换为数据帧。如果看起来不错,请将数据框另存为excel文件。您的预期输出是什么?我希望每个值位于不同的列中。玩家编号和姓名附加在同一单元格中。我希望有单独的列。我建议创建另一个空数组,将另一列中所需的值附加到该数组中,然后将数组转换为数据帧。如果看起来不错,请将数据框另存为excel文件。您的预期输出是什么?我希望每个值位于不同的列中。玩家编号和姓名附加在同一单元格中。我希望有单独的专栏非常感谢你的支持请接受一个答案从没有答案的列表中删除这篇文章。谢谢。非常感谢您的支持。请接受答复,将此帖子从无答复列表中删除。谢谢