前提・実現したいこと
求人サイトのエン転職をスクレイピングしているときです。
目的は企業のurlと企業名の取得です。
参考:リンク内容
と企業名の取得はできましたが、
urlを取得しようとすると以下が出力されました。
発生している問題・エラーメッセージ
============================== 0 ============================== 株式会社グロップ(グロップグループ) javascript:void(0) ============================== 1 ============================== 株式会社グロップ(グロップグループ) javascript:void(0) ============================== 2 ============================== 株式会社ウィルオブ・ワーク(ウィルグループ) javascript:void(0)
該当のソースコード
python
1 2from bs4 import BeautifulSoup 3import requests 4import pandas as pd 5from time import sleep 6 7base_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' 8d_list = [] 9for i in range(1, 23): 10 url = base_url.format(i) 11 r = requests.get(url, timeout=3) 12 sleep(3) 13 14 r. raise_for_status() 15 16 soup = BeautifulSoup(r.content, 'lxml') 17 companies = soup.find_all('div', class_='unitBase') 18 19 for i, company in enumerate(companies): 20 print('='*30, i, '='*30) 21 company_name = company.find('span', class_='company').text 22 page = company.find('a', class_='toDesc').get('href') 23 print(company_name) 24 page_url = 'https://employment.en-japan.com/' + page 25 26 sleep(2) 27 28 page_r = requests.get(page_url, timeout=3) 29 page_r.raise_for_status() 30 31 page_soup = BeautifulSoup(page_r.content, 'lxml') 32 company_url = page_soup.find('a', class_='previewOption') 33 34 if company_url: 35 company_url = company_url.get("href") 36 print(company_url) 37 else: 38 print('特殊ページ:') 39 company_url = soup.select_one('.companyTable > tbody > tr:nth-of-type(3) > td > a').get('href') 40 41 42 d_list.append({ 43 'company_name': company_name, 44 'company_url': company_url 45 }) 46 47df = pd.DataFrame(d_list) 48df.to_csv('company_en', index='None', encoding='utf-8-sig') 49
試したこと
seleniumを使ったほうがいいかもしれないと思いやってみましたが、
自分では解決には至りませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
a 要素の href 属性ではなく text に URL が書かれていますので、
company_url = company_url.text
としてみてはどうでしょうか。
回答ありがとうございます。
浅い考えでコーディングしてすいません。
これで一部の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'
特殊ページの方は動的に生成されている様なので、確かに selenium を使う方が適切かもしれませんね。
seleniumで各urlにアクセスしてから、ページのHTMLを取得する。
そのあとにHTMLをスクレピングするべきなのでしょうか?
回答に書きましたが、selenium を使わなくても情報は取れそうです。ただ、最初のページでしか動作確認をしていませんので、2ページ目以降でなんらかのエラーが発生するかもしれません。
ご丁寧な説明ありがとうございます。

回答1件
あなたの回答
tips
プレビュー