Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python在不丢失依赖项的情况下解析html文件_Python_Html_Parsing_Beautifulsoup - Fatal编程技术网

Python在不丢失依赖项的情况下解析html文件

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_

我正试图解析此html页面以获得每个地区、国家和城市的航空公司数量:

我正在使用beautifulsoup获取数据,但问题是我单独获取数据。例如,没有地区、国家和城市的所有航空公司。 我使用findall方法来获取特殊的头

这是我的密码:

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()
,以获取嵌套的子元素。我通过添加代码和预期输出编辑了我的帖子。非常感谢。