Python美化组html解析

Python美化组html解析,python,html,css,parsing,beautifulsoup,Python,Html,Css,Parsing,Beautifulsoup,不熟悉Webscraping,尝试解析的html,并将机场代码连同城市名称和州一起放入数据框中。HTML如下所示。基本上,似乎在每个'div class=“t6”标记之后,我需要解析的项目行(城市、州和机场代码)都会用一个中断标记列出,但由于它们是按字母顺序分段的,因此每个部分中的项目数量不同 <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tr><td bgcolor="#CBC7E

不熟悉Webscraping,尝试解析的html,并将机场代码连同城市名称和州一起放入数据框中。HTML如下所示。基本上,似乎在每个'div class=“t6”标记之后,我需要解析的项目行(城市、州和机场代码)都会用一个中断标记列出,但由于它们是按字母顺序分段的,因此每个部分中的项目数量不同

<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr><td bgcolor="#CBC7E0"><img height="2" src="img/0.gif" width="1"/></td></tr>
</table></div>
<a name="USA"></a>
<div class="t6"><div class="major"><b>A</b></div></div>

Aberdeen, SD (ABR) <br/>
Abilene, TX (ABI)<br/>
Adak Island, AK (ADK)<br/>
Akiachak, AK (KKI)<br/>
Akiak, AK (AKI)<br/>
Akron/Canton, OH (CAK)<br/>
Akuton, AK (KQA)<br/>
Alakanuk, AK (AUK)<br/>
Alamogordo, NM (ALM)<br/>
...

<div class="sectionBreak">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr><td bgcolor="#CBC7E0"><img height="2" src="img/0.gif" width="1"/></td></tr>
</table></div>
<div align="right"><div align="right"><a href="#top">return to top</a></div></div>
<a name="USB"></a>
<div class="t6"><div class="major"><b>B</b></div></div>

Bakersfield, CA (BFL)<br/>
Baltimore, MD (BWI)<br/>
Bangor, ME (BGR)<br/>
Bar Harbour, ME (BHB)<br/>
...

让我明白:

Aberdeen, SD (ABR) 


Bakersfield, CA (BFL)


Canton/Akron, OH (CAK)

但这是错误的,因为代码似乎只返回指定标记旁边的第一项。任何帮助都将不胜感激

首先,您必须提取
br
标记,以便正确读取文本结果

然后,您可以循环使用
类型(标记)
并测试它是否是
bs4.element.NavigableString

试试这个:

import requests
from bs4 import BeautifulSoup as soup
import bs4

url = "http://www.airportcodes.org/"
resp = requests.get(url)

page = soup(resp.text, 'html.parser')
for br in page.find_all('br'):
    br.extract()

for tag in page.find_all("div", class_="t6"):
    while type(tag.next_sibling) is bs4.element.NavigableString:
        tag = tag.next_sibling
        print(tag)
结果:

Aberdeen, SD (ABR) 
Easton, PA (ABE)
...
...
Island Lake/Garden Hill, Canada (YIV)
Islay, United Kingdom (ILY)

使用
查找下一个兄弟姐妹(text=True)
获取所有机场信息

from bs4 import BeautifulSoup
import requests
r=requests.get("http://www.airportcodes.org/").content
soup=BeautifulSoup(r,'html.parser')
for items in soup.select('div.t6'):
   for item in items.find_next_siblings(text=True):
       print(item)

谢谢,这似乎几乎可以工作,但删除了一些值(机场代码),即没有得到所需的所有结果。有什么帮助吗?@Si_CPyR:你能提供一个例子,说明你对diagnos遇到了什么问题吗?谢谢,这似乎几乎奏效,但删除了一些值(机场代码),也就是说,没有得到所有想要的结果。有什么帮助吗?得到与你相同的结果,但你注意到,只有1个值以“A”开头,即Aberdeen,SD(ABR),但正如你从我的原始帖子中所看到的,下一个值是Abilene,TX(ABI),而这一点是找不到的
from bs4 import BeautifulSoup
import requests
r=requests.get("http://www.airportcodes.org/").content
soup=BeautifulSoup(r,'html.parser')
for items in soup.select('div.t6'):
   for item in items.find_next_siblings(text=True):
       print(item)