質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

2217閲覧

エラー「IndexError: list index out of range」について

idkohhi

総合スコア15

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/09/28 01:28

こちら↓のサイトで紹介されている本を買い勉強しています。
https://hiroronn.hatenablog.jp/entry/20180511/1526044297
本は「Pythonによるクローラー&スクレイピング入門 設計・開発から収集データの解析・運用まで」
下記のサンプルプログラムをそのまま実行してもエラーになります。

エラー
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range

存在しないインデックを指定した、ということだと思うのですが、
h1要素はあります。

<h1 itemprop="name">iPhone&Androidアプリ内課金プログラミング完全ガイド 第2版</h1>

python3.6 、Ubuntu18.04です。
なぜエラーになっているのか教えていただけると幸いです。

ソースコード

import requests import lxml.html # HTMLソースを得る r = requests.get("http://www.shoeisha.co.jp/book/detail/9784798146072") html = r.text # HTMLをHtmlElementオブジェクトにする root = lxml.html.fromstring(html) # XPathを指定して該当する要素のリストを得る titleH1 = root.xpath("/html/body/div[1]/section/h1") # リストの1番目のテキストを表示する print(titleH1[0].text) # CSSセレクターで該当する要素のリストを得る qaA = root.cssselect("#qa > p > a") ## forループで回して取得した要素のhref要素を表示する for aTag in qaA:   print(aTag.attrib["href"])

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

本が出てからサイトの構造が変わった、等の理由ではないでしょうか。

こういうことはよくあるので、ブラウザの「要素の検証」機能などを使って自分でXPathを取ってくると良いです(方法はググれば幾らでも解説が出てくるので割愛)。

chromeは次のようなXPathを教えてくれました。

//*[@id="cx_contents_block"]/div[1]/section/h1

参考ページも同じXPathでやっていますね(そちらのページではダブルクォーテーションをエスケープしていますが)。

python

1titleH1 = root.xpath('//*[@id="cx_contents_block"]/div[1]/section/h1') # エスケープが嫌なのでシングルクォートで囲っています 2

投稿2018/09/28 01:42

編集2018/09/28 01:44
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

idkohhi

2018/09/28 05:40

できました。 早速回答いただきありがとうございます。 ご指摘の通リ本のCSSあたりのサイト構造が違ったのかもしれません。 xpathまで教えていただき大変感謝しております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問