質問するログイン新規登録
Python

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

Q&A

解決済

1回答

359閲覧

PythonでGoogle検索結果をDLしたいのですが出来ません

ghon

総合スコア10

Python

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

0グッド

0クリップ

投稿2025/06/26 05:17

0

0

実現したいこと

旧PC(Win10から裏口でWin11 24H2)の調子が悪くなって
きましたので新PC(Win11 24H2)を購入しました。
そこで、スクレイピングとは定義が違うかもですが
Google検索結果をファイルに落としますプログラムを
旧PC→新PCにコピーしましても動きません。
bs4とかpipでインストール済みです。

発生している問題・分からないこと

プログラム実行時にエラーで止まってしまいます。

エラーメッセージ

error

1D:\ドキュメント\めざましじゃんけん>mezamashi.py 2Traceback (most recent call last): 3 File "D:\ドキュメント\めざましじゃんけん\mezamashi.py", line 17, in <module> 4 before = soup.encode('cp932', "ignore") 5 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 6 File "C:\Users\(ユーザー名)\AppData\Local\Programs\Python\Python312\Lib\site-packages\bs4\element.py", line 2339, in encode 7 u = self.decode(indent_level, encoding, formatter) 8 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9 File "C:\Users\(ユーザー名)\AppData\Local\Programs\Python\Python312\Lib\site-packages\bs4\__init__.py", line 1141, in decode 10 return prefix + super(BeautifulSoup, self).decode( 11 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 12 File "C:\Users\(ユーザー名)\AppData\Local\Programs\Python\Python312\Lib\site-packages\bs4\element.py", line 2443, in decode 13 piece = self._indent_string( 14 ^^^^^^^^^^^^^^^^^^^^ 15 File "C:\Users\(ユーザー名)\AppData\Local\Programs\Python\Python312\Lib\site-packages\bs4\element.py", line 2528, in _indent_string 16 space_before = formatter.indent * indent_level 17 ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~ 18TypeError: can't multiply sequence by non-int of type 'str' 19

該当のソースコード

Python

1import re 2import codecs 3import requests, bs4, datetime 4from urllib.parse import quote 5 6now = datetime.datetime.now() 7kekka_2 = "" 8 9url = 'https://search.yahoo.co.jp/realtime/search?p=%E3%82%81%E3%81%96%E3%81%BE%E3%81%97%E3%83%86%E3%83%AC%E3%83%93+%E3%82%81%E3%81%96%E3%81%BE%E3%81%97%E3%81%98%E3%82%83%E3%82%93%E3%81%91%E3%82%93+%E3%80%901%E6%88%A6%E7%9B%AE%E3%80%91&ei=UTF-8&ifr=tl_sc' 10response = requests.get(url) 11response.text.replace('\U0001f19e','') 12response.text.replace('\xa0','') 13 14response.raise_for_status() 15soup = bs4.BeautifulSoup(response.text, "html.parser") 16 17before = soup.encode('cp932', "ignore") 18res_2 = before.decode('cp932') 19 20name = re.findall('【1戦目】.+?めざまし', res_2) 21name2 = name[0] 22name3 = name2.replace('【', '\n【') 23 24save_file = 'kekka_' + now.strftime('%Y%m%d') + '.txt' 25 26with codecs.open(save_file, 'w', 'utf-8') as f: 27 f.write(name3) 28f.close() 29

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

エラー箇所をコメントアウトしてみましたが
ダメでした。

補足

旧PCのバージョンが『3.12.2』であった為、新PCでも
同じバージョンを入れていますが、
旧PCでは
python -V
コマンドで
Python 3.12.2
と表示されるのに
新PCでは
python -V
コマンドで
Python
とだけ出てきます。

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

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

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

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

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

fiveHundred

2025/06/26 06:17

Googleはスクレイピングを規約で禁止しているため、用意されているAPIを使うべきです。 https://co.nobilista.com/ja/column/seo/scraping/ 他のサイトの場合でも、スクレイピングのプログラムはサイトの内容に依存するので、リニューアルがあった場合使えなくなります。 いつまでも使えることはありえません。
ghon

2025/06/26 07:44

スクレイピング というキーワードに過剰に反応されても困ります。 やりたいことは違います。
fiveHundred

2025/06/26 07:50

なら、具体的にやりたいことを記載してください。 少なくとも提示のコードの内容は、Googleの規約違反だとしてもおかしくないです。
fiveHundred

2025/06/26 08:00

よく見たらGoogleではなくてYahooですね。 いずれにせよ、スクレイピング自体はともかく、ブラウザ以外から直接取得しようとするのが問題なわけです。 これだけで訴えられるとは思いませんが、対策を行われることは普通に考えられます。 (実際にreCAPTCHAでそのような対策しているサイトはあります) したがって、いきなり動作しなくなっても、不思議ではありませんし、今回もそれに該当することは考えられます。 私は妨害しているつもりはなく、「動作するとはとても思えない」という意見です。
fiveHundred

2025/06/26 08:01 編集

違法かどうかは差し置いたとしても、動作しないようになる、は普通にあり得ます。
meg_

2025/06/26 09:56

> 旧PCのバージョンが『3.12.2』であった為、新PCでも同じバージョンを入れていますが、 モジュールのバージョンは何ですか? > PythonでGoogle検索結果をDLしたいのですが出来ません 質問のタイトルとコードの内容が合っていないようですがコードを間違えていませんか?
ghon

2025/06/26 10:52

ありがとうございます。 モジュールのバージョン確認方法を調べまして 出てきました結果 旧PC beautifulsoup4 4.12.3 bs4 0.0.2 DateTime 5.4 quote 2.0.4 requests 2.31.0 新PC beautifulsoup4 4.13.4 bs4 0.0.2 DateTime 5.5 quote 3.0 requests 2.32.4 となっていました。 beautifulsoup4は、pipでのバージョン指定で チャレンジしてみましたが、存在しないと エラーでした…
melian

2025/06/26 11:57

soup.encode() のAPIを確認してもらうと判るかと思いますが、第2パラメータは indent_level(正整数値)なので質問文にある様なエラーが発生することになります。この場合、"ignore" は errors キーワードで指定します。 # before = soup.encode('cp932', "ignore") before = soup.encode('cp932', errors="ignore")
meg_

2025/06/26 12:16

> 旧PC→新PCにコピーしましても動きません。 "旧PC"ではエラーなく動いていたんですよね?
ghon

2025/06/26 12:34

ありがとうございます。 before = soup.encode('cp932', errors="ignore") にて動きました。 でも、旧PC(現在もリモートデスクトップにて使用中) から、丸ごとコピーしてきまして、旧PCでは動いて いましたのに…
ghon

2025/06/26 12:35

melianさん、コメントありがとうございます。 問題が解決しました! ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
melian

2025/06/26 12:49

> でも、旧PC(現在もリモートデスクトップにて使用中から、丸ごとコピーしてきまして、旧PCでは動いていましたのに… おそらく、beautifulsoup4 4.12.3 の API では errors が第2パラメータだったのだと思います。(beautifulsoup4 4.13.4 では第4パラメータになっています)
ghon

2025/06/26 12:51

ありがとうございます
guest

回答1

0

ベストアンサー

soup.encode() のAPIを確認してもらうと判るかと思いますが、第2パラメータは indent_level(正整数値)なので質問文にある様なエラーが発生することになります。この場合、"ignore" は errors キーワードで指定します。

python

1# before = soup.encode('cp932', "ignore") 2before = soup.encode('cp932', errors="ignore")

投稿2025/06/26 12:44

melian

総合スコア21464

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

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

ghon

2025/06/26 12:46

ありがとうございますっ♪
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問