我的代码会生成我想删除的额外表格。我想删除除此之外的所有其他表。
我的代码
import csv
from bs4 import BeautifulSoup
import requests
import pandas as pd
import telnetlib as tn
import os
#import sys
cwd = os.getcwd()
print (os.getcwd)
cwd = os.getcwd()
os.chdir('c:\\Users\STaiwo\Desktop\My R code')
page = requests.get("https://www.flyingblue.com/earn-and-spend-
miles/airlines/partner/180/china-eastern.html", verify = False)
print(page.content) ### Collects HTML content of site
soup = BeautifulSoup(page.content, 'html.parser')
print(soup.prettify()) ## Cleans up the content of the site
for table in soup.findAll('tbody'):
print('Table')
list_of_rows = []
for row in table.findAll('tr')[1:]:
list_of_cells = []
for cell in row.findAll('td'):
text = ((cell.text.replace(' ', '')))
list_of_cells.append(text)
list_of_rows.append(list_of_cells)
print(list_of_rows)
我目前得到的结果: 表 [[' First Class',' F,U',' 150%'],[' P',' 125 %'],['商务舱',' J,C,D,I',' 125%'],['高级经济舱',' W' 110%'],['经济舱',' Y,B', ' 100%'],[' E,H,M',' 75%'],[' L,N,R,S ,V,K',' 50%'],[' T',' 30%'],['不符合条件应计',' Z,Q,G',' 0%']] 表 [] 表 [] 表 [['里程距离:6,482','总计'],['预订子类:125%',' 8,103&# 39;],[' 8,103']] 表 [['里程距离:6,482','总计'],['预订子类:125%','精英奖金: 75%',#9; 12,965'],[' 8,103',' 4,862']] 表 [['里程距离:6,482','总计'],['预订子类:50%',' 3,241&# 39;],[' 3,241']] 表 [['距离英里:6,482','总计'],['预订子类:50%','精英奖金: N / A',' 3,241'],[' 3,241',' 0']
我想要的结果: 表 [[' First Class',' F,U',' 150%'],[' P',' 125 %'],['商务舱',' J,C,D,I',' 125%'],['高级经济舱',' W' 110%'],['经济舱',' Y,B', ' 100%'],[' E,H,M',' 75%'],[' L,N,R,S ,V,K',' 50%'],[' T',' 30%'],['不符合条件应计',' Z,Q,G',' 0%']]
答案 0 :(得分:0)
尝试将[:1]
添加到soup.findAll('tbody')
它会将结果限制为仅限第一个表。
答案 1 :(得分:0)
页面为我呈现法语,所以你想要的东西在我的浏览器中看起来像这样。
检查HTML我发现有几个表具有相同的id
,即inlineTable
。要选择正确的一个,即使发布者在页面上更改此表的位置,也必须能够以其他方式识别它。我注意到“Classe de cabine”这个标题是这张桌子独有的,它很可能在英文版中以“Cabin class”的形式出现。让我们用它。
首先,使用id
获取所有表。看看每张桌子的文字'Classe de cabine'。当你发现吐出它的行时,除了标题行。
>>> import requests
>>> page = requests.get('https://www.flyingblue.com/earn-and-spend-miles/airlines/partner/180/china-eastern.html').text
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(page, 'lxml')
>>> required_tables = soup.select('#inlineTable')
>>> len(required_tables)
7
>>> for table in required_tables:
... if 'Classe de cabine' in table.text:
... rows = table.findAll('tr')
... for row in rows[1:]:
... row
...
<tr class="table-highlite-light">
<td rowspan="2" width="33%">Première Classe</td>
<td width="33%">F, U</td>
<td width="33%">150 %</td>
</tr>
<tr class="table-highlite-light">
<td>P</td>
<td>125 %</td>
</tr>
<tr class="table-highlite-light">
<td>Classe Affaires</td>
<td>J, C, D, I</td>
<td>125 %</td>
</tr>
<tr class="table-highlite-light">
<td>Premium Economy Classe</td>
<td>W</td>
<td>110 %</td>
</tr>
<tr class="table-highlite-light">
<td rowspan="4">Classe Économique</td>
<td>Y, B</td>
<td>100 %</td>
</tr>
<tr class="table-highlite-light">
<td>E, H, M</td>
<td>75 %</td>
</tr>
<tr class="table-highlite-light">
<td>L, N, R, S, V, K</td>
<td>50 %</td>
</tr>
<tr class="table-highlite-light">
<td>T</td>
<td>30%</td>
</tr>
<tr class="table-highlite-light">
<td>Non éligible pour l’accumulation</td>
<td>Z, Q, G</td>
<td>0 %</td>
</tr>