Python 如何使用BeautifulSoup从表数据中删除行中的特定类

Python 如何使用BeautifulSoup从表数据中删除行中的特定类,python,beautifulsoup,Python,Beautifulsoup,我正在尝试从表中逐行刮取数据。 但是,在某些行中,两个不同的类[“显示为中高”、“隐藏为中高”]和数据被链接,导致重复编号。例如,第一个数字是10.837,第二个数字是10.84。单元格的结果编号为10.83710.84。我想删除最后一个号码。 如何仅删除最后一个类“隐藏中等大小”? 请参阅我的代码: 从bs4导入美化组 导入请求 作为pd进口熊猫 进口稀土 url=”https://uk.flightaware.com/live/flight/AZA202/history/20210224/0

我正在尝试从表中逐行刮取数据。
但是,在某些行中,两个不同的类[“显示为中高”、“隐藏为中高”]和数据被链接,导致重复编号。例如,第一个数字是10.837,第二个数字是10.84。单元格的结果编号为10.83710.84。我想删除最后一个号码。
如何仅删除最后一个类“隐藏中等大小”?
请参阅我的代码:

从bs4导入美化组
导入请求
作为pd进口熊猫
进口稀土
url=”https://uk.flightaware.com/live/flight/AZA202/history/20210224/0856Z/LIRF/EGLL/tracklog"
html\u content=requests.get(url).text
汤=美汤(html_内容,“lxml”)
#表格数目:
flt_tables=soup.find_all(“table”,attrs={“class”:“prettyTable fullWidth”})
打印(“N.表格:”,len(flt_表格))
#刮取第一个表-仅标题
表1=flt_表[0]
#逐行数据('tr'->行)
table_rows=table 1.find_all(“tr”)
页眉=表_行[0]#页眉
表数据=表行[1:]#表数据(不包括表头)
标题=[]
对于标题中的项。查找所有(“th”):#在“th”元素中循环
item=(item.text).rstrip(“\n”)#获取文本部分并删除“\n”
headers.append(项目)
打印(标题)
#刮表数据('td')
所有_行=[]
对于范围内的行数(len(表数据)):#一次一行
行=[]
对于表_数据[row _num]中的行_项,查找所有(“td”):#在“td”元素中循环
#正则表达式->从行\u item.text中删除\xa0和\n以及逗号
#xa0编码标志,\n是换行符,逗号分隔数千个数字
aa=re.sub((\xa0)|(\n)|,“,”,行_项.text)
行。附加(aa)
所有行。追加(行)
打印(所有_行[5])
print(headers)
print(所有行[5])
的输出分别为:

[“时间(JST)JST,“纬度Lat,“经度Lon,“航程数据”,“kts”,“英里/小时”,“米”,“速度”,“报告设施”]

[Wed 17:50:3405:50PM,'42.247342.25,'10.891910.89,'← 297°,'449','517','79717971,'FlightAware ADS-B(LIRG)'

粗体文本是要删除的部分

第一个数据行的“tr”html代码:

<tr class="smallrow1 flight_event">
<td align="left" colspan="6"><div style="display: inline; "><span class="show-for-medium-up">Wed 17:50:34</span><span class="hide-for-medium-up">05:50PM</span> <strong>   Departure (FCO)<span class="show-for-medium-up"> @ Wednesday 09:50:34 <span class="tz">CET</span> </span></strong></div></td>
<td align="left" class="show-for-medium-up-table" colspan="1"><span class="show-for-medium-up"></span></td>
<td class="show-for-medium-up"></td>
<td align="left" class="show-for-large-up-table"><span class="show-for-large-up"><img height="12" src="https://e0.flightcdn.com/images/live/fasource.gif" width="12"/> <a href="/adsb/">FlightAware ADS-B</a>  (LIRG) </span></td>
</tr>

周三下午17:50:3405:50出发(FCO)@CET时间周三09:50:34
(里格)

使用类属性可以让您更进一步:

for i in table_data[5].find_all("td"): 
  try: 
    for child in i.childGenerator(): 
      print(child.attrs["class"]) 
  except: 
      print("no attribute \"class\" {:}".format(i))
输出

['show-for-medium-up']
['hide-for-medium-up']
['show-for-medium-up']
['hide-for-medium-up']
['show-for-medium-up']
['hide-for-medium-up']
no attribute "class" <td align="right"><span>← 297°</span></td>
no attribute "class" <td align="right">449</td>
no attribute "class" <td align="right" class="show-for-medium-up-table">517</td>
['show-for-medium-up']
['hide-for-medium-up']
['show-for-medium-up']
['show-for-large-up']
输出

N. tables:  1
['Time (CET)CET', 'LatitudeLat', 'LongitudeLon', 'CourseDir', 'kts', 'mph', 'meters', 'Rate', 'Reporting Facility']
['Wed 09:50:34', '42.2473', '10.8919', '<span>← 297°</span>', '449', '517', '7971', '', ' FlightAware ADS-B  (LIRG) ']
N.表格:1
['Time(CET)CET','LatitudeLat','Longtudelon','CourseDir','kts','mph','meters','Rate','Reporting Facility']
[周三09:50:34',42.2473',10.8919','← 297°,'449','517','7971','FlightAware ADS-B(LIRG)'

您能否提供一个
td
的html代码,以查看它们是如何构造的,以及如何删除额外的信息?您好,ygorg,我尝试在这里插入“tr”的html代码,但是没有空间作为注释。在文件中,以“table_rows[5]”的形式运行一行,该行将生成第一个包含主数据的“tr”,并包含该行的所有“td”。当询问新信息时,请编辑您的问题。感谢Braulio Barahona,我实现了您的建议,并且它正在工作!
N. tables:  1
['Time (CET)CET', 'LatitudeLat', 'LongitudeLon', 'CourseDir', 'kts', 'mph', 'meters', 'Rate', 'Reporting Facility']
['Wed 09:50:34', '42.2473', '10.8919', '<span>← 297°</span>', '449', '517', '7971', '', ' FlightAware ADS-B  (LIRG) ']