我正在使用熊猫抓取网站,但它会返回一整个列,其中包含'nan'
个值,而不是正确的值。我尝试更改多个read_html()
参数,例如flavor,converters和na_values均未成功。我注意到问题列的html代码不同,它们的其余部分为'td class='
类型,而未被正确读取的则为'td data-behavior='
。当我简单地将表格复制/粘贴到excel中时,一切都可以粘贴了。我将不胜感激。
我尝试更改read_html()
上的某些参数,但未成功。我也尝试过使用lxml / xpath来获取表,但是也没有成功。
week_data = pd.read_html('https://www.espn.co.uk/nfl/fixtures/_/week/2/seasontype/1',
converters={'time': str})
该列应包含包含比赛时间的字符串。
答案 0 :(得分:2)
他们将日期时间嵌入到data-date属性中,因此,除了求助于硒之外,另一种选择就是简单地将其拉出,并使用beautifulsoup粘贴到td元素中。
from bs4 import BeautifulSoup
import requests
import pandas as pd
import dateutil
from datetime import datetime
espn_page = requests.get('https://www.espn.co.uk/nfl/fixtures/_/week/2/seasontype/1')
soup = BeautifulSoup(espn_page.content, 'html.parser')
espn_schedule = soup.find('div', {'class': 'main-content'})
for td in espn_schedule.find_all('td', {'data-behavior': 'date_time'}):
utc = dateutil.parser.parse(td.get('data-date'))
localtime = utc.astimezone(dateutil.tz.gettz())
td.string = localtime.strftime("%I:%M")
df = pd.read_html(str(espn_schedule))
print(df[0].columns)
print(df[0][df[0].columns[2]])
答案 1 :(得分:0)
您的代码可以完美运行,但是我宁愿需要在'href'元素之后包含的文本,即'6:00 PM':
所以我这样修改了您的代码:
for td in espn_schedule.find_all('a', {'data-dateformat': 'time1'}):
td.string = td.get('href')
我成功地找到了想要的元素,只是我不知道如何在其后提取文本(即“ 6:00 PM”)。我该怎么办?