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

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

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

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

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

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

Python

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

Q&A

解決済

1回答

3159閲覧

Python スクレイピング ヤフオクにて「次のページ推移」 できません

Hi1992

総合スコア2

スクレイピング

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

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2020/08/08 16:54

編集2020/08/09 07:22

【現在していること】

PythonのBeautiful Soupを使ってスクレイピングをしています。
練習で「ヤフオク」からデータを抽出しようとしています。

【詰まっている箇所】

詰まっているところですが、「次の画面(2ページ目)」に推移ができません。
先に問題の箇所(コード)を記載します。

Python3

1soup.find(class_="Pager__list Pager__list--next").find("a").get("href") 2## https://auctions.yahoo.co.jp/search/search?p=dragon+ball+card&va=dragon+ball+card&exflg=1&b=51&n=50

【検証画面のスクショ】

イメージ説明

【スクショに写っているコード】

HTML5

1<li class="Pager__list Pager__list--next"> 2 <a class="Pager__link" href="https://auctions.yahoo.co.jp/search/search? 3 p=dragon+ball+card&va=dragon+ball+card&exflg=1&b=21&n=20&mode=2">次へ</a> 4</li>

となっており2つのURLの違いは、

TEXT

1##こちらが正しい(検証画面)## 2https://auctions.yahoo.co.jp/search/search?p=dragon+ball+card&va=dragon+ball+card&exflg=1&b=21&n=20&mode=2 3 4##こちらが間違い(.find取得)## 5https://auctions.yahoo.co.jp/search/search?p=dragon+ball+card&amp;va=dragon+ball+card&amp;exflg=1&amp;b=51&amp;n=50

となっています。

【pythonの全体コード】

pythonの全体コードを記載いたします。

Python3

1import pandas as pd 2import requests 3from bs4 import BeautifulSoup as bs 4import re 5from fake_useragent import UserAgent 6 7ua = UserAgent() 8useragent = ua.random 9# URLが入力されたらランダムレスポンスを返す 10def get_html(url): 11 headers = {"User-Agent":useragent} 12 res = requests.get(url, headers = headers) 13 return res 14 15url = "https://auctions.yahoo.co.jp/search/search?auccat=&tab_ex=commerce&ei=utf-8&aq=-1&oq=&sc_i=&exflg=1&p=dragon+ball+card&x=38&y=34" 16 17res = get_html(url) 18soup = bs(res.content, "html.parser") 19items = soup.find_all(class_="Product") 20 21# 商品URLのリスト 22url_list = [item.find(class_="Product__titleLink").get("href") for item in items] 23 24# 商品リンクの取得 25soup.find(class_="Pager__list Pager__list--next").find("a").get("href")

以上が現在の状況になります。

【試したこと】

①jupyter labの再起動
②chromeではなくEdgeでテスト
③解析ページが検索結果画面(1ページ)なので2ページからスタートして3ページを目指す
をテストしましたが、駄目でした。
URLを目視で見ていたらbs4のfindで抽出したURLには「;」←が多く入っていました。
ちなみに「;」のみ全て削除したURLでアクセスしてみましたがページ推移はできませんでした..

どなたかご教授願えませんでしょうか?
よろしくお願いいたします。


追記 2020/08/09-15:15

お返事ありがとうございます。

otn様

jupyter labにて
soup.find(class_="Pager__list Pager__list--next").find("a").get("href")
と入力すると下に実行結果が返ってきます。

イメージ説明

一応ですが、<test>という変数に代入してprint(test)で実行した結果もスクショ記載しておきます。(結果は変わりません..)
イメージ説明

autumn_nsn様

僕の環境でもres = soup.find(class_="Pager__list Pager__list--next").find("a").textを実行したら「次へ」という文字列が返ってきました..

autumn_nsn様の環境でうまくいっている場合、僕の環境でPythonとは関係ないところでなにかが邪魔しているのかもしれません。
コードの試行をしていただきありがとうございます。

https://www.youtube.com/watch?v=PRCLQgG0u4g&t=954s
こちらの動画を参考にしておりコードは全く同じでこの方は問題なく実行できています..

meg_様

利用規約やGoogleで検索してみましたが、
・スクレイピングでの自動出品
・ヤフーファイナンスの方では禁止
というところまで見つけれたのですが、ヤフーオークション内ではスクレイピングの禁止事項を見つけることはできませんでした。

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

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

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

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

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

otn

2020/08/08 23:06

コードには、 soup.find(class_="Pager__list Pager__list--next").find("a").get("href") とだけしか書いてないですが、どうやって結果を見たのでしょうか? その見る方法が間違っているのでは?
autumn_nsn

2020/08/09 01:47

実際に掲載されているコードを試してみましたが、正常に機能しているみたいですが。 2ページ目にも行けましたし、そのURLから実行すると3ページ目に行けましたよ。 また、 res = soup.find(class_="Pager__list Pager__list--next").find("a").text のようなコードを試したところ、「次へ」というテキストが返ります。 問題ないように思いますが・・・
meg_

2020/08/09 02:19

> 練習で「ヤフオク」からデータを抽出しようとしています。 上記サイトはスクレイピング禁止ではありませんか?
otn

2020/08/09 07:51

jupyter labを使わないで実行してみては?
dameo

2020/08/09 08:48

https://support.google.com/webmasters/answer/6062608?hl=ja robots.txtの目的についてGoogleが言及している資料があります。 「robots.txt ファイルは、クローラがどのページやファイルをサイトからリクエストできるか、またはできないかを検索エンジン クローラに知らせるものです。これは主に、サイトでのリクエストのオーバーロードを避けるために使用され、Google にウェブページが表示されないようにするためのメカニズムではありません。 Google にウェブページが表示されないようにするには、noindex ディレクティブを使用するか、ページをパスワードで保護する必要があります。 ... robots.txt は、基本的にはクローラのサイトへのトラフィックを管理するために使用されますが、ファイルタイプに応じて Google でページを非表示にするために使用されることもよくあります」 主に負荷や効率を考えてのものとGoogleは捉えているようですよ。
Hi1992

2020/08/09 10:03

jupyter labではなく、通常のpyファイルで全く同じファイルを実行したところ 成功しました。 原因がわからないのですが、解決できたので良かったです!ありがとうございます。 次回からハマった場合の試行パターンが増えたので勉強になります。 スクレイピングは、サーバーに負荷がかかるとのことで頻繁にアクセスすることは避けて気をつけておきます。ご忠告ありがとうございました。
otn

2020/08/09 10:09

> jupyter labではなく、通常のpyファイルで全く同じファイルを実行したところ成功しました。 何らかのjupyter labの設定が残っているとかでしょうかね? 「なんかおかしい」という場合は生の環境で実行してみましょう。
guest

回答1

0

自己解決

自己解決ではないですが、「修正依頼」内で解決したためここに解決方法を記載します。

Jupyter labdではなく通常のpyファイルから実行したら無事に動作しました。
次回からハマった場合は一度pyファイルで実験する検証をしてみます。

ご回答くださった皆様、貴重なお時間を割いていただき感謝しております。
ありがとうございました。

投稿2020/08/09 10:07

Hi1992

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問