簡體   English   中英

使用Python抓取時出現KeyError

[英]KeyError while scraping with Python

我正在使用以下腳本從網站上抓取航班數據

import requests
import bs4
import csv

root_url = 'http://www.flightradar24.com/data/flights/3k601/'

response = requests.get(root_url)
soup = bs4.BeautifulSoup(response.text)


try:
    table = soup.find('table')
    rows = table.find_all('tr')
    heads = [i.text.strip() for i in table.select('thead th')]
    for tr in table.select('tbody tr'):
        with open('flight_data.csv', 'a', newline='') as csvfile:
            fieldnames = ['flight', 'From', 'To', 'Date', 'Aircraft', 'STD', 'ATD', 'STA', 'Status'] 
            writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

        flight_data = {}
        flight_data['flight'] = tr['data-flight-number']
        flight_data['From'] = " ".join(tr.select('td')[1].get_text().split())
        flight_data['To'] = " ".join(tr.select('td')[2].get_text().split())
        flight_data['Date'] = tr['data-date']
        flight_data['Aircraft'] = " ".join(tr.select('td')[3].get_text().split())
        flight_data['STD'] = tr.select('td')[4].get_text()
        flight_data['ATD'] = tr.select('td')[5].get_text()
        flight_data['STA'] = tr.select('td')[6].get_text()
        flight_data['Status'] = " ".join(tr.select('td')[7].get_text().split())
        print (flight_data)
        writer.writerow(flight_data)

except AttributeError as e:
    raise ValueError("No valid table found")

如果表中有數據,這將起作用,因為對於這樣的排期頁面,我試圖對鍵進行條件檢查

if tr['data-flight-number'] is None:

但是tr['data-flight-number']不存在,因此在繼續抓取數據之前,如何測試該表是否為空?

使用get

if tr.get('somekey', None) is None

暫無
暫無

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

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