Python在不丢失依赖项的情况下解析html文件
我正试图解析此html页面以获得每个地区、国家和城市的航空公司数量: 我正在使用beautifulsoup获取数据,但问题是我单独获取数据。例如,没有地区、国家和城市的所有航空公司。 我使用findall方法来获取特殊的头 这是我的密码:Python在不丢失依赖项的情况下解析html文件,python,html,parsing,beautifulsoup,Python,Html,Parsing,Beautifulsoup,我正试图解析此html页面以获得每个地区、国家和城市的航空公司数量: 我正在使用beautifulsoup获取数据,但问题是我单独获取数据。例如,没有地区、国家和城市的所有航空公司。 我使用findall方法来获取特殊的头 这是我的密码: from bs4 import BeautifulSoup import requests import pandas as pd url = requests.get("https://en.wikipedia.org/wiki/List_of_hub_
from bs4 import BeautifulSoup
import requests
import pandas as pd
url = requests.get("https://en.wikipedia.org/wiki/List_of_hub_airports").text
soup = BeautifulSoup(url, "lxml")
GLOBAL =[]
l=[]
A=[]
B=[]
C=[]
D=[]
k=[]
G=[[]]
T=soup.findAll({'h2','h3','ul'})
T=soup.findAll({'h2','h3','ul'})
for line in T:
if line.name == 'h2':
REG = line.findAll('span', {'class': 'mw-headline'})
if REG:
A=REG[0].get('id')
if line.name == 'h3':
REG = line.findAll('span', {'class': 'mw-headline'})
if REG:
B=REG[0].get('id')
if line.name == 'ul':
if B:
city=line.findAll('a')
for i in city:
if i.get('title'):
if i.get('title').endswith('Airport') == True:
D=[]
for i in city:
D.append(i.text)
l.append([A,B,D])
break
for k in l:
print(k)
输出为:
[region,country,[cities,listArilines]]
但预期的输出:
[region,country,[city,listAirlines]]
因此,我有两个问题:
-我失去了城市和航空公司之间的联系。
-对于某些地区/国家,我有类似于欧洲的表格,我不知道如何解析它以将其提取为预期输出
我需要你的帮助
谢谢我更改了代码中的一些行,但我认为您现在将拥有正确的值:
from bs4 import BeautifulSoup
import requests
import pandas as pd
url = requests.get("https://en.wikipedia.org/wiki/List_of_hub_airports").text
soup = BeautifulSoup(url, "lxml")
GLOBAL =[]
l=[]
A=[]
B=[]
C=[]
D=[]
k=[]
G=[[]]
T=soup.findAll({'h2','h3','ul'})
T=soup.findAll({'h2','h3','ul'})
for line in T:
if line.name == 'h2':
REG = line.findAll('span', {'class': 'mw-headline'})
if REG:
A=REG[0].get('id')
if line.name == 'h3':
REG = line.findAll('span', {'class': 'mw-headline'})
if REG:
B=REG[0].get('id')
if line.name == 'ul':
if B:
cities = line.findChildren('li')
for i in cities:
if i.find('a'):
cityname = i.find('a').get('title')
airlines = i.findAll('li')
if airlines:
for a in airlines:
if a.find('a'):
D=[]
D.append(cityname)
D.append(a.text)
l.append([A,B,D])
for k in l:
print(k)
编辑
我想每个城市只有一条线路,有一份航空公司名单,你只需要这样做:
from bs4 import BeautifulSoup
import requests
import pandas as pd
url = requests.get("https://en.wikipedia.org/wiki/List_of_hub_airports").text
soup = BeautifulSoup(url, "lxml")
GLOBAL =[]
l=[]
A=[]
B=[]
C=[]
D=[]
k=[]
G=[[]]
T=soup.findAll({'h2','h3','ul'})
T=soup.findAll({'h2','h3','ul'})
for line in T:
if line.name == 'h2':
REG = line.findAll('span', {'class': 'mw-headline'})
if REG:
A=REG[0].get('id')
if line.name == 'h3':
REG = line.findAll('span', {'class': 'mw-headline'})
if REG:
B=REG[0].get('id')
if line.name == 'ul':
if B:
cities = line.findChildren('li')
for i in cities:
if i.find('a'):
cityname = i.find('a').get('title')
airlines = i.findAll('li')
if airlines:
D = []
D.append(cityname)
for a in airlines:
if a.find('a'):
D.append(a.text)
l.append([A,B,D])
for k in l:
print(k)
请提供您的预期输出,并提供一些代码试用如何获取数据?显示您的代码。页面显示嵌套元素,因此您可能应该运行嵌套的
findall()
,以获取嵌套的子元素。我通过添加代码和预期输出编辑了我的帖子。非常感谢。