Python

【Python】Webスクレイピングで不動産情報サイトを操作

不動産情報サイトからWebスクレイピングで、情報を取得しようと思いましたが、制御されていました。
そのため、検索後の画面遷移ができず。。

今回は検索するまでのWebサイトの操作方法を今回は綴っていきます。

前回までのおさらい

前回は、chromedriverを使って、Webサイトを立ち上げるところまでいきました。
(正確には、version差異でエラーを解消するところまでですが。。)

正しいversionのdriverを設定した後は、driver.get(URL)でWebサイトのURLを指定。
requests.get(URL, headers=headers).textで指定したサイトにリクエストし、Webページの内容を取得しました。

さらに、BeautifulSoupオブジェクトを使って、取得したWebページの情報をツリー構造で取得。記載していませんが、soup.titleを実行すると、Webページのタイトルが取得できたり、print(soup.get_text())を実行すると、ページの全テキストを見ることもできるようになります。

ここまでで、Webページを操作するうえでの必要な情報を取得することができました。

from selenium import webdriver
from time import sleep
import requests
from selenium.webdriver.support.select import Select
from bs4 import BeautifulSoup

URL = "https://www.rakumachi.jp/"
headers = {
    "Accept-Language": "jq",
    "User-Agent": "Mozilla/5.0",
}

CHROME_DRIVER_PATH = "C:\Development\chromedriver.exe"
driver = webdriver.Chrome(executable_path=CHROME_DRIVER_PATH)
driver.get(URL)

rget = requests.get(URL, headers=headers).text
soup = BeautifulSoup(rget, "html.parser")

Webページを操作

アクセスしたら、下記のような画面があるため、それぞれの項目に値を設定していきます。

基本的な流れは、各項目のIDを取得して、そのIDに対して操作をしていきます。

要素の取得はdriver.find_element_by_idで取得できます。そのほかのにもxpathclassでも取得できます。

物件種別は選択した後、ラジオボタンでタイプを選択する形式のため、ラジオボタンの要素も取得します。

取得した項目から、それぞれの項目を選択していきますが、まずは物件種別から操作します。物件種別をクリックし、さらに対象の物件タイプをラジオボタンで選択していきます。そのあとは、同じやり方で、項目を選択していきます。

例えば都道府県を選ぶには、Select().select_by_visible_text(選択名)で選ぶことができます。

SelectクラスはSeleniumから使えるもので、select_by_visible_textメソッドは、セレクトタグのオプションをテキストを指定して選択するメソッドです。

全ての項目を設定出来たら、検索ボタンの要素を取得して、クリックします。挙動には時間がかかるため、所定のプログラムを連続で動かすと、画面の動きが追い付かず、エラーになることが多々あります。そのため、時間がかかるコードの後には、sleepで数秒待つにようにしています。

# 都道府県取得
dropdown_prefectures = driver.find_element_by_id('search_param_prefecture_id')
# 物件種別取得
dropdown_property_types = driver.find_element_by_xpath('//*[@id="ddcl-search_param_dimension_type"]/span/span')
# 物件種別のラジオボタン取得
dropdown_property_types_options = driver.find_element_by_id('ddcl-search_param_dimension_type-i9')
# 価格取得
dropdown_prices = driver.find_element_by_id('search_param_price_to')
# 利回り取得
dropdown_yield = driver.find_element_by_id('search_param_gross_return_from')

# 物件種別を選択
dropdown_property_types.click()
sleep(2)
# 物件種別のラジオボタン選択
dropdown_property_types_options.click()

# 都道府県、価格、利回りを選択
Select(dropdown_prefectures).select_by_visible_text('東京都')
Select(dropdown_prices).select_by_visible_text('2000万円以下')
Select(dropdown_yield).select_by_visible_text('11%以上')

# 検索ボタンを取得
search_button = driver.find_element_by_xpath('//*[@id="main"]/div/div/div[3]/table/tbody/tr[3]/td/div[1]/a')
sleep(1)
# 検索ボタン押下
search_button.click()
sleep(2)

これで検索して、検索結果が出力されると思いきや、下記の画面に遷移します。

ということで、今回はここまでにしておきます。

まとめ

今回はWebスクレイピングで、検索条件を設定して、検索するところまでを紹介しました。

どの項目を取得して、選択するかで、Web上の情報を自由に、そしてスピーディに取得することができます。

大量の情報を取得したり、マーケティングとかにも活用できると思うので、是非参考にしてみてください。

Google広告