🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
スクレイピング

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

Python 3.x

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

Q&A

解決済

1回答

1022閲覧

スクレイピング:JavaScriptで表示される複数ページのhref属性を取得したいです。

yudai109

総合スコア18

スクレイピング

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

Python 3.x

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

0グッド

1クリップ

投稿2019/11/01 05:16

前提・実現したいこと

https://tenshoku.mynavi.jp/search/list/
①上記サイトで、「詳細を見る」に含まれているhref属性の値を取得

②「▶︎」ボタンを押して、次のjavaScriptで表示されるページの「詳細を見る」に含まれているhref属性の値を取得

<li class="pager__item"> <a href="javascript:changePageNo(2)">2</a> </li> ↓ ②の動作を繰り返す。 <li class="pager__item"> <a href="javascript:changePageNo(3)">3</a> </li> ・ ・ ・ というように全ての「詳細を見る」のhref属性の値を取得したいと考えています。

発生している問題・エラーメッセージ

現状、1ページ目のスクレイピングはできているのですが、javaScriptで表示されつ次のページのスクレイピングができず、全て1ページ目の「詳細を見る」のhref属性が取得されてしまいます。

https://tenshoku.mynavi.jp//jobinfo-127282-1-22-1/?ty=rzs&searchId=1209365424&pageNum=1&showNo=1 https://tenshoku.mynavi.jp//jobinfo-256535-1-2-1/?ty=rzs&searchId=1209365424&pageNum=1&showNo=2 https://tenshoku.mynavi.jp//jobinfo-254362-1-7-1/?ty=rzs&searchId=1209365424&pageNum=1&showNo=3 ・ ・ https://tenshoku.mynavi.jp//jobinfo-196777-1-35-5/?ty=0&searchId=1209365424&pageNum=1&showNo=49 https://tenshoku.mynavi.jp//jobinfo-204416-1-20-1/?ty=0&searchId=1209365424&pageNum=1&showNo=50 https://tenshoku.mynavi.jp//jobinfo-127282-1-22-1/?ty=rzs&searchId=1209365424&pageNum=1&showNo=1 https://tenshoku.mynavi.jp//jobinfo-256535-1-2-1/?ty=rzs&searchId=1209365424&pageNum=1&showNo=2 https://tenshoku.mynavi.jp//jobinfo-254362-1-7-1/?ty=rzs&searchId=1209365424&pageNum=1&showNo=3 ・ ・ https://tenshoku.mynavi.jp//jobinfo-196777-1-35-5/?ty=0&searchId=1209365424&pageNum=1&showNo=49 https://tenshoku.mynavi.jp//jobinfo-204416-1-20-1/?ty=0&searchId=1209365424&pageNum=1&showNo=50

というように繰り返されてしまいます。

該当のソースコード

from selenium import webdriver from bs4 import BeautifulSoup import requests import time driver = webdriver.Chrome(executable_path='chromedriver') driver.get('https://tenshoku.mynavi.jp/search/list/') html = driver.page_source.encode('utf-8') res = requests.get('https://tenshoku.mynavi.jp/search/list/') res.raise_for_status() soup = BeautifulSoup(res.text, "html.parser") elems = soup.select('.linkArrowS') elems_btn = soup.select('iconFont--arrowLeft') i = 1 def get_url(): time.sleep(2) for elem in elems: if elem.string == '詳細を見る': elem_rink = elem.get('href') if 'msg/' in elem_rink: elem_rp = elem_rink.replace('msg/', '') print('https://tenshoku.mynavi.jp/' + elem_rp) else: print('https://tenshoku.mynavi.jp/' + elem_rink) elem_btn = driver.find_element_by_class_name('iconFont--arrowLeft') elem_btn.click() while i <= 50: get_url() i += 1

補足情報(FW/ツールのバージョンなど)

ヘッダーレスでやればできるというよな記事も見かけたのですが、よくわかりません。
どなたか、教えていただけませんでしょうか?

よろしくお願いいたします。。。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ここと同じ質問じゃないの?
https://teratail.com/questions/220626

python

1from bs4 import BeautifulSoup 2import requests 3from urllib.parse import urljoin 4 5for n in range(1, 5): 6 url = f"https://tenshoku.mynavi.jp/search/list/?pageNum={n}" 7 8 res = requests.get(url) 9 res.raise_for_status() 10 soup = BeautifulSoup(res.text, "html.parser") 11 for i in soup.find_all("a", class_='linkArrowS', text="詳細を見る"): 12 print(urljoin(url, i.get("href")).replace("/msg/","/"))

投稿2019/11/01 05:50

編集2019/11/01 06:37
barobaro

総合スコア1286

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

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

yudai109

2019/11/01 06:03

barobaroさん ここと同じ質問です! こちらを実行しても同じ出力結果が繰り返されることになってしまいます。。 もしよろしければ解決方法を教えていただきたいです。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問