【現在していること】
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&va=dragon+ball+card&exflg=1&b=51&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で検索してみましたが、
・スクレイピングでの自動出品
・ヤフーファイナンスの方では禁止
というところまで見つけれたのですが、ヤフーオークション内ではスクレイピングの禁止事項を見つけることはできませんでした。
回答1件
あなたの回答
tips
プレビュー