列表索引超出范围错误:使用Beauthoul Soup

2024-06-01 00:15:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试着用漂亮的汤从this website刮走现场离店桌。在

我试过以下方法:

caremar_live_departures_table = list(soup.select('.table-booking-history tr'))
caremar_live_departures_data = []
for tr in caremar_live_departures_table:
    td = tr.select('td')
    caremar_live_departures_data.append({
    'DEPARTURE PORT': td[1].select('span span').text,
    'ARRIVAL PORT': td[2].select('span span').text, 
    'DEPARTURE TIME': td[4].select('span').text, 
    'ARRIVAL TIME': td[6].select('span').text,     
    'FEERY TYPE':  td[3].select('span span').text,   
    'STATUS': td[3].select('span span').text   
    })

我得到了以下错误:

^{pr2}$

td应该是一个数组,为什么不是这样?在


Tags: textlivedatatimeporttablethisselect
2条回答

我并没有在表中查看所有的数据源。如果你只观察r1类,r2类就得到了你需要的数据。有些只有一个td。因此,只有td[0]可用。这就是为什么你得到IndexError

另外,我认为你可能把你的列表索引错误了。我已经尽可能地把它修好了。在

import requests
from bs4 import BeautifulSoup
r=requests.get('https://shop.caremar.it/it/prossime-partenze/')
soup=BeautifulSoup(r.text,'html.parser')
caremar_live_departures_table = list(soup.select('.table-booking-history tr[class*="r"]'))
caremar_live_departures_data = []
for tr in caremar_live_departures_table:
    td = tr.select('td')
    caremar_live_departures_data.append({
    'DEPARTURE PORT': td[0].text.strip(),
    'ARRIVAL PORT': td[1].text.strip(),
    'DEPARTURE TIME': td[3].text.strip(),
    'ARRIVAL TIME': td[5].text.strip(),
    'FEERY TYPE':  td[2].text.strip(),
    'STATUS': td[6].text.strip()
    })
print(caremar_live_departures_data)

输出

^{pr2}$

用一个指定感兴趣和顺序的列来表示panda和阅读_html不是更容易吗?在

import pandas as pd

results = pd.read_html('https://shop.caremar.it/it/prossime-partenze/')
df = results[0].dropna(how='all').fillna('')[['Porto di Partenza','Porto di Arrivo','Orario', 'Arrivo', 'Mezzo', 'Stato']]
print(df)

在列标题更改包括在内的情况下,您可以使其更加明确:

^{pr2}$

相关问题 更多 >