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

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

新規登録して質問してみよう
ただいま回答率
87.20%

解決済

スクレイピング実行時のjavascript:void(0)

53243
53243

総合スコア6

1回答

0評価

0クリップ

556閲覧

投稿2022/01/15 07:48

編集2022/01/16 15:09

前提・実現したいこと

求人サイトのエン転職をスクレイピングしているときです。
目的は企業のurlと企業名の取得です。
参考:リンク内容
と企業名の取得はできましたが、
urlを取得しようとすると以下が出力されました。

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

============================== 0 ============================== 株式会社グロップ(グロップグループ) javascript:void(0) ============================== 1 ============================== 株式会社グロップ(グロップグループ) javascript:void(0) ============================== 2 ============================== 株式会社ウィルオブ・ワーク(ウィルグループ) javascript:void(0)

該当のソースコード

python

from bs4 import BeautifulSoup import requests import pandas as pd from time import sleep base_url = 'https://employment.en-japan.com/search/search_list/?areaid=23_24_21_50&occupation=101000_102500_103000_103500_104500_105000_105500_109000&aroute=1&pagenum=1&arearoute=1' d_list = [] for i in range(1, 23): url = base_url.format(i) r = requests.get(url, timeout=3) sleep(3) r. raise_for_status() soup = BeautifulSoup(r.content, 'lxml') companies = soup.find_all('div', class_='unitBase') for i, company in enumerate(companies): print('='*30, i, '='*30) company_name = company.find('span', class_='company').text page = company.find('a', class_='toDesc').get('href') print(company_name) page_url = 'https://employment.en-japan.com/' + page sleep(2) page_r = requests.get(page_url, timeout=3) page_r.raise_for_status() page_soup = BeautifulSoup(page_r.content, 'lxml') company_url = page_soup.find('a', class_='previewOption') if company_url: company_url = company_url.get("href") print(company_url) else: print('特殊ページ:') company_url = soup.select_one('.companyTable > tbody > tr:nth-of-type(3) > td > a').get('href') d_list.append({ 'company_name': company_name, 'company_url': company_url }) df = pd.DataFrame(d_list) df.to_csv('company_en', index='None', encoding='utf-8-sig')

試したこと

seleniumを使ったほうがいいかもしれないと思いやってみましたが、
自分では解決には至りませんでした。

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

ここにより詳細な情報を記載してください。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

melian

2022/01/15 08:39

a 要素の href 属性ではなく text に URL が書かれていますので、 company_url = company_url.text としてみてはどうでしょうか。
53243

2022/01/15 08:55 編集

回答ありがとうございます。 浅い考えでコーディングしてすいません。 これで一部のurlは取得できましたが、5つ目から以下のようにAttributeErrorが出てしまいました。 .textもやってみましたが、何も変わりませんでした。 seleniumを使えということでしょうか? Traceback (most recent call last): File "c:/Users/genge/Desktop/python_practice/lesson9.py", line 38, in <module> company_url = soup.select_one('.companyTable > tbody > tr:nth-of-type(3) > td > a').get('href') AttributeError: 'NoneType' object has no attribute 'get'
melian

2022/01/15 08:57

特殊ページの方は動的に生成されている様なので、確かに selenium を使う方が適切かもしれませんね。
53243

2022/01/15 09:16

回答ありがとうございます。 seleniumを使うことにします。
53243

2022/01/15 12:54 編集

seleniumで各urlにアクセスしてから、ページのHTMLを取得する。 そのあとにHTMLをスクレピングするべきなのでしょうか?
melian

2022/01/16 04:37 編集

回答に書きましたが、selenium を使わなくても情報は取れそうです。ただ、最初のページでしか動作確認をしていませんので、2ページ目以降でなんらかのエラーが発生するかもしれません。
53243

2022/01/16 06:09

ご丁寧な説明ありがとうございます。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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