Python初心者です。
いま、Pythonの学習用にサイトをスクレイピングしようとしているのですが、以下の事象で詰まってしまっています。
質問内容について、大変恐縮ですがご教示いただけますと幸いです。
よろしくお願いいたします。
事象:
-
xpathで取得設定した項目が、掲載元サイトに掲載がなかった場合、エラーで処理が止まってしまう。
-
掲載元サイトで、ポップアップが突然表示されてしまった場合、後続の処理にいかずエラーで処理が止まってしまう。
質問内容:
-
xpathで取得設定した項目が、掲載元サイトに掲載がなかった場合、取得エラーのテキストをリストに返し、後続の処理に進む方法
-
掲載元サイトで、ポップアップが突然表示されてしまった場合、以下の処理で、ポップアップを閉じたあと、後続の処理に進む方法。ポップアップは毎回出るものではありません。詳細ページでの表示はなく、一覧ページで表示されます。
※表示されたポップアップを閉じる方法は分かっています。
以下のコードで閉じることができます。
Python
1 elem_close_btn = browser.find_element_by_id('popover-link-x') 2 elem_close_btn.click()
コードの説明:
- ブラウザ :Chrome
- 使用ライブラリ :selenium (beautifulsoupは使用していません)
- 設定のページングURLにある一覧ページを起点にクロールをしていきます。
- 詳細ページにもぐり、xpathで指定したスクレイピング箇所(5か所)を取得します。
- 一覧ページでページングをして、さらに詳細ページをクロール
- 一覧ページ1~10ページまで繰り返し...
※コード部分
index_page = 0
for pages in range(10,100):
Python
1from selenium import webdriver 2from time import sleep 3import pandas as pd 4browser = webdriver.Chrome('chromedriver.exe') 5 6#============================================================================================================================= 7# 設定 8#============================================================================================================================= 9 10## 起点URL 11#url = 'https://jp.indeed.com/%E6%B1%82%E4%BA%BA?q=%C2%A56%2C000%2C000%E3%80%80%E3%83%87%E3%83%BC%E3%82%BF&l=%E6%9D%B1%E4%BA%AC%E9%83%BD' 12 13## ページングURL 14page = 'https://jp.indeed.com/jobs?q=%C2%A56%2C000%2C000%E3%80%80%E3%83%87%E3%83%BC%E3%82%BF&l=%E6%9D%B1%E4%BA%AC%E9%83%BD&start={}' 15 16## スクレイピング箇所 17 18### タイトル 19results_01 =[] 20r01_xpath = '/html/body/div[1]/div[2]/div[3]/div/div/div[1]/div[1]/div[1]/h3' 21### 会社名 22results_02 =[] 23r02_xpath = '/html/body/div[1]/div[2]/div[3]/div/div/div[1]/div[1]/div[1]/div[1]/div/div/div[1]' 24### 勤務地 25results_03 =[] 26r03_xpath = '/html/body/div[1]/div[2]/div[3]/div/div/div[1]/div[1]/div[1]/div[1]/div/div/div[3]' 27### 年収 28results_04 =[] 29r04_xpath = '/html/body/div[1]/div[2]/div[3]/div/div/div[1]/div[1]/div[1]/div[2]/span[1]' 30### 詳細 31results_05 =[] 32r05_xpath = '//*[@id="jobDescriptionText"]' 33 34 35#============================================================================================================================= 36# クロール&スクレイピング 37#============================================================================================================================= 38 39index_page = 0 40for pages in range(10,100): 41 browser.get(page.format(index_page)) 42 43 44 45 ## 詳細ページのURLのクラスを指定 46 elem_detail_btn = browser.find_elements_by_class_name('title') 47 48 index_detail = 0 49 for elem_detail_btns in range(len(elem_detail_btn)): 50 elem_detail_btn[index_detail].click() 51 52 ## 詳細ページに移動 53 browser.switch_to.window(browser.window_handles[-1]) 54 55 ## スクレイピング 56 r01 = browser.find_element_by_xpath(r01_xpath).text 57 results_01.append(r01) 58 r02 = browser.find_element_by_xpath(r02_xpath).text 59 results_02.append(r02) 60 r03 = browser.find_element_by_xpath(r03_xpath).text 61 results_03.append(r03) 62 r04 = browser.find_element_by_xpath(r04_xpath).text 63 results_04.append(r04) 64 r05 = browser.find_element_by_xpath(r05_xpath).text 65 results_05.append(r05) 66 67 68 ## 一覧ページに移動 69 browser.switch_to.window(browser.window_handles[0]) 70 71 72 index_detail +=1 73 74 index_page +=10 75 76
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。