簡體   English   中英

Pandas read_html() 在特定列上返回“nan”

[英]Pandas read_html() returns 'nan' on a specific column

我正在使用 Pandas 來抓取網站,但它返回一整列帶有'nan'值而不是正確值的列。 我曾嘗試更改幾個read_html()參數,例如風味、轉換器和 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})

該列應包含包含匹配時間的字符串。

他們將日期時間嵌入到 data-date 屬性中,因此另一個選擇而不是求助於 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:00”:

所以我像這樣修改了你的代碼:

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

我成功地找到了我想要的元素,只是我不知道如何提取它之后的文本(即“下午 6:00”)。 我怎樣才能做到這一點?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM