我有一份来自维基百科的飞机列表:https://en.wikipedia.org/wiki/List_of_regional_airliners我想获取每架飞机的规格,并将其粘贴到 Excel 中的新工作表中,以便制作一个总体比较表。最好的方法是什么?
编辑澄清:
我想按照链接转到单独页面上的规格。例如,第一个条目是空客 A220,我想按照该表中的链接转到 en.wikipedia.org/wiki/Airbus_A220#Specifications 并提取规格表,这样我就可以了解每架飞机的详细信息。
答案1
因此,excel 没有跟踪链接的功能,因此我编写了一个具有此功能的 python 脚本。它基本上使用 beautifulsoup 抓取页面中的链接并访问每个链接。然后,它使用 pandas 转换该页面上的“规格”下的表格,并将其保存为 excel 中的新工作表。
import pandas as pd
import requests
from bs4 import BeautifulSoup
import re
wikiurl="https://en.wikipedia.org/wiki/List_of_regional_airliners"
table_class="wikitable sortable jquery-tablesorter"
# get main table and grab links from first column of table
response=requests.get(wikiurl)
soup = BeautifulSoup(response.text, 'html.parser')
links = [items.find("a")["href"] for items in soup.find(class_="wikitable").find_all("tr")[1:] ]
# open excel file and and loop over each link extension
writer = pd.ExcelWriter("test_out.xlsx", engine = 'xlsxwriter')
for link in links:
testurl = "https://en.wikipedia.org" + link
response=requests.get(testurl)
soup = BeautifulSoup(response.text, 'html.parser')
# remove refrences that wiki adds eg [0,1]
for tag in soup.find_all(class_="reference"):
tag.decompose()
span = soup.find('span', {'id': re.compile("Specifications*")})
# if there is a table found save to a new sheet in excel
# with the name of the link
if span != None:
table = span.parent.find_next_siblings("table")
try:
specs = pd.read_html(str(table))[0]
name = link.split('/')[-1][:31]
specs.to_excel(writer, sheet_name=name)
except Exception as e:
print("failed to add: " + link)
print(e)
print("___________________________")
writer.save()
writer.close()