2017-05-26 15 views
0

私のコードは、削除したい余分なテーブルを生成します。私はこれ以外のすべてのテーブルを削除したいと思います。PythonのWebスクレイピング結果から余分なテーブルを削除

マイコード

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) 

結果私は現在取得しています: 表 [[ 'ファーストクラス'、 '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 ']、[' 8,103 '] テーブル [[' 「合計」、「サブクラス125%」、「エリートボーナス75%」、「12,965」、「8,103」、「4,862」] 表 [['マイル:6,482 '、'合計 ']、[予約サブカテゴリ:50%]、[3,241]]、[' 3,241 '] テーブル [[マイルの距離:6,482'、 '合計]]、 [ '予約サブクラス:50%'、 'エリートボーナス:N/A'、 '3241']、[ '3241'、 '0']

欲しい結果: 表 [ ['ファーストクラス'、 'F、U'、 '150%']、['P'、 '125%]'、 'バス「プレミアムエコノミークラス」、「W」、「110%」、「エコノミークラス」、「Y」、「B」、「C」、 100%]、['E、H、M'、 '75%']、['L、N、R、S、V、K'、 '50%']、['T'、 '30% ]、['発生対象外'、 'Z、Q、G'、 '0%']]

答えて

0

[:1]soup.findAll('tbody')を追加してください。結果は最初の表のみに限定されます。

0

ページはフランス語でレンダリングされるので、私のブラウザではこのように見えます。 desired table

HTMLを調べると、いくつかの表に同じid、つまりinlineTableがあることがわかります。正しいものを選択するには、サイト運営者がページ上のこの表の位置を変更しても、他の方法でそれを識別できる必要があります。私は「Cabas Classe」という見出しがこのテーブルに特有であることに気付き、英語版「Cabin class」として利用可能になる可能性が高いです。それを使ってみましょう。

まず、すべてidのテーブルを取得します。各テーブルのテキストを参照してください 'クラッセデキャビン'。あなたがヘッダー行を除いて行を吐き出すことが分かったとき。

>>> 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> 
関連する問題