くじらはんど掲示板

くじらはんど用の掲示板です
[一覧へ] > (@19) [低] [解決]
@19■ (#62) 「増補改訂Pythonによるスクレイピング&機械学習」のp50のサンプルコードでエラー - yuki (2020-06-21 02:04) /低 未処理
15の投稿主と同様と思われる事象が発生しました。
大変お手数ですが、原因が分かれば教えて頂きたく。

【①発生した事象】
以下プログラムの以下箇所でエラーが発生しました。
https://github.com/kujirahand/book-python-scraping/blob/master/ch1/sel-avocado.py
print(soup.select_one("li:nth-of-type(8)").string) #(1)

エラー内容は以下になります。
AttributeError: NoneType object has no attribute string
※シングルクォーテーションを書くと掲示板書き込みエラーになったため省略しています。


【②事象発生後確認したこと】
1)エラーとなる行を外したら、書籍と同じ結果が得られました。

2)エラーとなる部分のnth-of-typeの値を変えた際は以下の結果になりました。

※print(soup.select_one("li:nth-of-type(〇)").string)
 →〇の部分を書き換えた結果。

1 → リンゴ 
2 → ブドウ
3 → レモン
4 → オレンジ
5 → レンコン
6~8 → ①に記載と同じエラー

本来、5を指定したら「ダイコン」が返ってくるのが想定の結果だと思うのですが、「レンコン」が返ってきてしまっており、その原因が分からないです。

【③バージョン】
Python3.7.4

【④使用しているHTMLファイル】
Githubから取得したので、問題ないと思いますが、HTMLファイルについて下記します。
---------------
<html><body>
<div id="main-goods" role="page">
  <h1>フルーツや野菜</h1>
  <ul id="fr-list">
    <li class="red green" data-lo="jp">リンゴ</li>
    <li class="purple" data-lo="us">ブドウ</li>
    <li class="yellow" data-lo="us">レモン</li>
    <li class="yellow" data-lo="jp">オレンジ</li>
  </ul>
  <ul id="ve-list">
    <li class="white green" data-lo="jp">ダイコン</li>
    <li class="red green" data-lo="us">パプリカ</li>
    <li class="black" data-lo="jp">ナス</li>
    <li class="black" data-lo="us">アボカド</li>
    <li class="white" data-lo="cn">レンコン</li>
  </ul>
</div>
<body></html>
-------------


大変お手数ですが、もしお気づきの点があればアドバイスをいただきたく、宜しくお願い申し上げます。

(#63) BeautifulSoupの問題? - クジラ飛行机 (2020-08-03 15:54) /低 未処理
調べて見ると、BeautifulSoupが不安定のようです。
そこで、BeautifulSoup4では、なるだけ、nth-of-typeを使わないようにすると良いと思います。
ご報告ありがとうございました。

(#64) 補足 - クジラ飛行机 (2020-08-03 16:05) /低 修正中
以前のバージョンのBeautifulSoup4の『nth-of-type(n)』では、問題なかったのですが、最近のBeautifulSoup4では、動作が不安定なようです。

(参考)https://d.aoikujira.com/bbs/mbbs.php?m=thread&threadid=19

そこで、『nth-of-type(n)』を使わず、select("li")のように書くと良いでしょう。

- [x] print(soup.select_one("li:nth-of-type(8)").string) #(1)
- [o] print(soup.select("li")[7].string) #(1)

(#65) 解決しました。ありがとうございます。 - yuki (2020-09-05 16:57) /低 解決
ご返信が遅くなり申し訳ございません。
エラーなく実行することが出来ました。
どうもありがとうございます。
ステータスを変更させて頂きました。
(もし、変更NGであれば申し訳ございません)

(#62)へ返信する:

名前
タイトル
本文
優先度
状態
確認キー お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。
編集キー 編集時に使うキーを入力(省略可能)
添付ファイル 画像ファイル(最大300KB)を添付可能