実案件をもとにpythonでのスクレイピングを学習中です。
BeaautifulSoupを用いています。
このurlの中から企業名と企業のurlを取得して欲しい、というのが要件です。
https://next.rikunabi.com/rnc/docs/cp_s00700.jsp?leadtc=top_wpmodal_submit
python
1from time import sleep 2import pandas as pd 3import requests 4from bs4 import BeautifulSoup 5from requests.api import post 6 7url = 'https://next.rikunabi.com/rnc/docs/cp_s00700.jsp?leadtc=top_wpmodal_submit' 8r = requests.get(url , timeout=3) 9soup = BeautifulSoup(r.content , 'lxml') 10r.raise_for_status() 11 12companies = soup.find_all('ul' , class_='rnn-group--xm') 13 14 15d_list = [] 16for i , company in enumerate(companies): 17 print('='*30 , i , '='*30) 18 page_url = company.find('h2' , class_="rnn-textLl js-abScreen__title").get('href') 19 page_url = page_url.replace('nx1_rq' , 'nx2_rq') #この行に対してエラーが出ています。 20 21 sleep(3) 22 23 page_r = requests.get(page_url , timeout=3) 24 page_r.raise_for_status() 25 page_soup = BeautifulSoup(page_r.content , 'lxml') 26 27 table_1 = page_soup.find('div' , class_='rn3-companyOfferCompany') 28 table_2 = page_soup.find('div' , class_='rn3-companyOfferEntry') 29 30 company_name = table_1.find('p' , class_='rn3-companyOfferCompany__text') 31 company_url = table_2.find('a' , class_='rn3-companyOfferEntry__link js-companyOfferEntry__link').get('href') 32 33 d = { 34 'company_name' : company_name, 35 'company_url' : company_url 36 } 37 38 d_list.append(d) 39 print(d_list)
行なったことです。
まず、先述したurlにアクセスするとこのようなページが表示されます。
この段階では企業名と企業urlが格納されている要素には辿り着けないので、
python
1page_url = company.find('h2' , class_="rnn-textLl js-abScreen__title").get('href')
このコードを使用して下層ページに飛びました。下層ページはこのようになっています。
目的の企業名、企業URLは、ここからさらに”求人情報”というタブをクリックした先にありました。
ここで、求人情報のページにアクセスする為に今回エラーが出てしまった行のコードを書きました。
具体的には、
"企業からのメッセージ"ページurl
https://next.rikunabi.com/company/cmi0248910140/nx1_rq0008925977/
"求人情報"ページurl
https://next.rikunabi.com/company/cmi0248910140/nx2_rq0008925977/
この2つのページのurlを見比べて相違している部分をreplace関数を用いて書き換え、page_urlに上書きしてあげることで、"求人情報"にたどり着く変数を作ろうとしました。
するとこのようなエラーが表示されました。
File "answer.py", line 19, in <module>
page_url = page_url.replace('nx1_rq' , 'nx2_rq')
AttributeError: 'NoneType' object has no attribute 'replace'
NoneTypeと出ている部分が、
https://qiita.com/shizen-shin/items/5455e2ea625a3c8cf5dd
こちらのサイトで紹介されているように”関数にデフォルト引数が渡されなかったときなど”に発生する
エラーだということは分かったのですが、具体的に私のコードの場合なにが悪かったのか、いまいちピンときませんでした。
どなたかご教授いただけますでしょうか。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。