Python

【Python】BeautifulSoupでtableが最初の数行しか取得できない場合の対処

投稿日:

概要

PythonでWebスクレイピングをするときの定番であるBeautifulsoupですが、tableを取得しようとしたときに最初の数行しか取得できないことがあったのでその対処法についてメモする。

環境

Python 3.7.3

発生事象

以下のようなテーブルがあるとします。

番号名前
1佐藤
2加藤
3伊藤
4後藤

ウェブブラウザのF12で見えているhtmlコードはこのような状態

<table class="test_table">
<thead>
<tr>
<th>名前</th>
<th>氏名</th>
</tr>
</thead>
<tbody>
    <tr>
    <td>1</td>
    <td>佐藤</td>
    </tr>
</tbody>
<tbody>
    <tr>
    <td>2</td>
    <td>加藤</td>
    </tr>
</tbody>
<tbody>
    <tr>
    <td>3</td>
    <td>伊藤</td>
    </tr>
</tbody>
<tbody>
    <tr>
    <td>4</td>
    <td>後藤</td>
    </tr>
</tbody>
</table>

これをBeautifulSoupを使った次のようなコードで取得しようとしたところ・・・

import requests
from bs4 import BeautifulSoup

r = requests.get('http://example.com',headers = headers)
soup = BeautifulSoup(r.content, "html.parser")

table = soup.findAll('table',{'class':"test_table"})[0]

rows = table.findAll('tr')
for row in rows:
    print(row)

実行結果

なぜか最初の数行分の<tr>しか取れてこないという現象が起きました。

<tr>
<th>名前</th>
<th>氏名</th>
</tr>
</thead>
<tbody>
    <tr>
    <td>1</td>
    <td>佐藤</td>
    </tr>
</tbody>
<tbody>
    <tr>
    <td>2</td>
    <td>加藤</td>
    </tr>
</tbody>

対処法

試した結果、BeautifulSoupでhtml.parserではなくlxmlを使用することで、すべての行を取得できるようになった。(結果は略)

import requests
from bs4 import BeautifulSoup

r = requests.get('http://example.com',headers = headers)
soup = BeautifulSoup(r.content, "lxml")

table = soup.findAll('table',{'class':"test_table"})[0]

rows = table.findAll('tr')
for row in rows:
    print(row)

理由はよくわかりませんが・・・そういうもんだと割り切ってやってこうと思います。

-Python

執筆者:


  1. […] 【Python】BeautifulSoupでtableが最初の数行しか取得できない場合の対処 […]

comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

【Python】cx_Oracleでデータを一括挿入する方法

Contents1 概要2 環境3 Step1 : Oracle側テーブル作成4 Step2 : Pythonによる一括挿入コード5 まとめ 概要 pythonからOracleデータベースを操作するラ …

【Python】標準偏差と分散の計算

Contents1 目的2 標準偏差3 Pythonによる標準偏差の計算4 分散 目的 以前の記事で四分位偏差によりデータの分散度の計算を行いましたが、四分位偏差ではデータの代表値である四分位数のみを …

VSCodeでJupytreNotebookを使う

Contents1 目的2 環境3 Step1 : pythonプラグインインストール4 Step2 : JupyterNotebookの立ち上げ5 Step : 3 使ってみる6 まとめ 目的 VS …

【Python】dtreeviz使用時にExecutableNotFound: … ,make sure the Graphviz executables are on your systems’ PATHが出たときの対処

Contents1 概要2 症状2.1 結果3 対処その13.1 結果4 対処その24.1 結果5 まとめ 概要 Pythonの決定木の可視化でビジュアルに優れたdtreevizパッケージのメソッドを …

Pythonの文字列操作

Contents1 目的2 文字列の連結3 文字列の抽出4 文字列の抽出(スライス)5 文字列の繰り返し6 文字数取得7 文字列の分割8 文字列の結合9 文字列の置換 目的 pythonの文字列操作に …

言語切り替え

カテゴリー