Python Pandas read_html()返回';楠';在特定列上

Python Pandas read_html()返回';楠';在特定列上,python,pandas,Python,Pandas,我正在使用pandas搜索一个网站,但它返回的是一整列的'nan'值,而不是正确的值。我尝试更改了几个read_html()参数,例如flavor、converter和na_值,但没有成功。我注意到问题列的html代码的不同之处在于,其余的代码是'td class='类型,而未正确读取的代码则读取'td data behavior='。当我简单地将表格复制/粘贴到excel中时,一切都已粘贴好。如果有任何帮助,我将不胜感激 我尝试在read\u html()上更改一些参数,但没有成功。我还尝试使

我正在使用pandas搜索一个网站,但它返回的是一整列的
'nan'
值,而不是正确的值。我尝试更改了几个
read_html()
参数,例如flavor、converter和na_值,但没有成功。我注意到问题列的html代码的不同之处在于,其余的代码是
'td class='
类型,而未正确读取的代码则读取
'td data behavior='
。当我简单地将表格复制/粘贴到excel中时,一切都已粘贴好。如果有任何帮助,我将不胜感激

我尝试在
read\u html()
上更改一些参数,但没有成功。我还尝试使用lxml/xpath获取表,但也没有成功

week_data = pd.read_html('https://www.espn.co.uk/nfl/fixtures/_/week/2/seasontype/1',
                          converters={'time': str})

列应该有包含匹配时间的字符串。

它们将日期时间嵌入到数据日期属性中,因此,另一个不使用selenium的选项是简单地拉出该属性,并使用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]])

您的代码运行得非常好,但我需要在'href'元素后面包含的文本,即'6:00pm':

所以我修改了你的代码如下:

for td in espn_schedule.find_all('a', {'data-dateformat': 'time1'}):
    td.string = td.get('href')

我成功地找到了我想要的元素,只是我不知道如何提取后面的文本(即“6:00pm”)。我该怎么做呢?

如果页面使用JavaScript添加数据,那么您无法使用panda、requests/urllib、lxml/beautifulsoup获取数据,因为它们无法运行JavaScript。您可能需要Selenium来控制web浏览器,该浏览器将运行JavaScript,稍后您可以获得HTML。谢谢我从未使用过硒,但我会仔细研究:)非常感谢!我非常感谢你分享知识。这很有效,但如果可以的话,我需要进一步的帮助。我把它贴在下面。时钟观察者,有没有好的手册或参考文本,让我可以更详细地研究BS是如何工作的?再次感谢。@gosci-我相信你已经找到了,但是精美的汤文档涵盖了你想知道的几乎所有东西——是的,我找到了我需要的所有东西。非常感谢你!数据日期以UTC时间表示。所以你的下午6点可能是我的下午4点。为了让它完成您的任务,您只需要将给定的UTC转换为您的本地时间。最简单的方法是使用python dateutil pip包。我在上面修改了我的帖子,使其格式与当地时间一致。