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

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

新規登録して質問してみよう
ただいま回答率
87.20%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

受付中

pythonを使用したMEO順位獲得でのエラー(list index out of range)

kentalk
kentalk

総合スコア0

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0評価

0クリップ

469閲覧

投稿2021/03/28 15:15

編集2022/01/12 10:55

python初心者です。
pythonを使用したMEOのスクレイピング(googlemapの検索順位)を作成しているのですが、
1回動かすとうまくいくのですが、2回動かすと2回目に下記のようなエラーが出てしまいます。
どのように書き換えたら解決できるでしょうか?

↓以下エラー文

0

IndexError Traceback (most recent call last)
<ipython-input-17-5e8ae10bdfeb> in <module>
17 #browser.find_elements_by_css_selector('.section-result-header-container')[click_point].click()
18
---> 19 browser.find_elements_by_css_selector('.place-result-container-place-link')[click_point].click()
20
21

IndexError: list index out of range

以下ソースコード

python

!pip install selenium !pip install beautifulsoup4 !pip3 install openpyxl import urllib.request from urllib.parse import quote from bs4 import BeautifulSoup import urllib.request as req import time from selenium import webdriver import time import pandas as pd import openpyxl keyword ='#検索ワード' MEO_list = [] click_point = 0 meo_rank = 0 target_word = '#店舗名' %GoogleChromeを起動 browser = webdriver.Chrome() browser.implicitly_wait(3) %アクセス url_login = "https://www.google.co.jp/maps/?hl=ja" browser.get(url_login) time.sleep(3) element = browser.find_element_by_name("q") element.clear() element.send_keys(keyword) time.sleep(3) browser_form = browser.find_element_by_class_name("searchbox-searchbutton") time.sleep(3) browser_form.click() time.sleep(3) %カレントページのURLを取得 main_url = browser.current_url %HTMLを取得 response = req.urlopen(main_url) %情報を取得 parse_html = BeautifulSoup(response,'html.parser') while click_point < 20: print(click_point) #指定の店舗をクリック browser.find_elements_by_css_selector('.place-result-container-place-link')[click_point].click() time.sleep(3) page_source = browser.page_source soup = BeautifulSoup(page_source,'html.parser') %店名を抽出し順位表示 title = soup.find(class_="section-hero-header-title-title GLOBAL__gm2-headline-5") time.sleep(3) MEO_list.append(title.text.strip()) print(MEO_list) if MEO_list[-1] == target_word: meo_rank = click_point-1 click_point += 1 browser.get(main_url) time.sleep(3) print("再度アクセスしました") if 0 < meo_rank < 20: MEO_rank = "{}位".format(meo_rank) print(MEO_rank) else: MEO_rank = "圏外" print(MEO_rank) wb = openpyxl.load_workbook("#指定ファイルへのパス") ws = wb["MEO"] c1 = ws.cell(row=5, column=5) c1.value = format(MEO_rank) wb.save("#指定ファイルへのパス")

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

y_waiwai
y_waiwai

2021/03/28 15:18

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
kentalk
kentalk

2021/03/28 15:36

申し訳ありませんでした。 コードの貼り方を修正しました。
ppaul
ppaul

2021/03/28 16:34

エラーメッセージの全文を載せてください。
kentalk
kentalk

2021/03/29 05:00

エラーメッセージを全文載せました。 質問の仕方がなれておらず申し訳ないです。
ppaul
ppaul

2021/03/29 09:17

別に謝る必要はありませんよ。 ただ、エラーメッセージは問題解決のための重要な情報ですので、それがないと解決が長引いたり、解決できなかったりするだけです。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。