SUUMOから情報を得る

SUUMOから情報を得る


#メモ
「8 columns passed, passed data had 9 columns」
項目以上のデータがあり不整合が起こる。

# トラブル
[vscodeでanacondaを使うとnumpyがインポートエラーになる](https://thunss.com/2020/05/21/vscode-anaconda-numpy-error/#vscodenumpy)

#参考
https://akatak.hatenadiary.jp/entry/2018/09/06/220129

# CODE

```
#必要なライブラリをインポート
import time
import re
import urllib.request, json
import urllib.parse

from bs4 import BeautifulSoup
from selenium import webdriver
import requests
from tqdm import tqdm

try:
    import pandas as pd
except:
    print("panda")

#東京都の中古マンション一覧
def init(url):


   #データ取得
    result = requests.get(url)
    c = result.content

    #HTMLを元に、オブジェクトを作る
    soup = BeautifulSoup(c)




    #物件リストの部分を切り出し
    summary = soup.find("div", id='js-bukkenList') #1ページ分を取得
    dt = summary.find("div",class_='ui-media').find_all('dt') #dtを全て取得
    cols = [t.text for t in dt]

    cols.insert(0, 'url') #後ほど物件情報詳細を確認するためurl列を追加
    print(cols) # 項目を表示する
    print('--------------------------------------------')

    #ページ数を取得
    body = soup.find("body")
    page = body.find("div",class_='pagination pagination_set-nav')
    li = page.find_all('li')
    pg_length = int(li[-1].text)

    #URLを入れるリスト
    urls = []


    #1ページ目を格納
    urls.append(url)

    #2ページ目から最後のページまでを格納
    for i in range(pg_length)[:-1]:
        pg = str(i+2) #2ページ目から
        url_page = url + '&pn=' + pg #ページ数に合わせたurl
        urls.append(url_page)
        if len(urls )> 3:
            break

    #各ページで以下の動作をループ
    bukkens =[]
    b_count = 0
    for url in tqdm(urls):
        #物件リストを切り出し
        result = requests.get(url)
        c = result.content
        soup = BeautifulSoup(c)
        summary = soup.find("div",id='js-bukkenList')

        #マンション名、住所、立地（最寄駅/徒歩~分）、築年数、建物高さが入っているproperty_unitsを全て抜き出し
        property_units = summary.find_all("div",class_='property_unit-content')
        #print(property_units)

        #各property_unitsに対し、以下の動作をループ
        for item in property_units:
            templ = []
            #マンションへのリンク取得
            h2 = item.find("h2",class_='property_unit-title')
            href = h2.find("a").get('href')
            templ.append(href)
            if ( 7 == len(item.find_all('dd')) ):
                for youso in item.find_all('dd'):
                    if(len(templ)<=7 ):
                        templ.append(youso.text)
            else:
                isFirst = True
                for youso in item.find_all('dd'):
                    if( isFirst):
                        isFirst = False
                        continue
                    else:
                        if(len(templ)<=7 ):
                            templ.append(youso.text)                                      

            print('**************************')

            bukkens.append(templ)
        time.sleep(0.01)
        b_count+=1
        if( b_count >=99):
            break

    try:
        #列名を設定し、csvに一旦export 
        df = pd.DataFrame(bukkens,columns=cols)
        df.to_csv('./bukken.csv', encoding='utf_8_sig')
    except Exception as e:
        print('---------------------')
        print(e)

if __name__ == "__main__":
    #regix()

    #url = 'https://suumo.jp/jj/bukken/ichiran/JJ010FJ001/?ar=030&bs=021&ta=13&jspIdFlg=patternShikugun&sc=13105&kb=1&kt=9999999&tb=0&tt=9999999&hb=0&ht=9999999&ekTjCd=&ekTjNm=&tj=0&cnb=0&cn=9999999&srch_navi=1'
    
    #荒川区、１０分以内、所有権
    url = 'https://suumo.jp/jj/bukken/ichiran/JJ012FC001/?ar=030&bs=021&cn=9999999&cnb=0&et=10&fw2=&hb=0&ht=9999999&kb=1&kr=A&kt=9999999&sc=13118&scTemp=13118&ta=13&tb=0&tj=0&tt=9999999&pc=30&po=5&pj=1'

    #荒川区　新着
    #url = 'https://suumo.jp/jj/bukken/ichiran/JJ012FC001/?ar=030&bs=021&cn=9999999&cnb=0&ekTjCd=&ekTjNm=&hb=0&ht=9999999&kb=1&kt=9999999&sc=13118&ta=13&tb=0&tj=0&tt=9999999&pc=30&po=1&pj=2'

    #url = 'https://suumo.jp/jj/bukken/ichiran/JJ012FC001/?ar=030&bs=021&cn=9999999&cnb=0&hb=0&ht=9999999&kb=1&kt=9999999&pc=30&pj=2&po=1&sc=13118&ta=13&tb=0&tj=0&tt=9999999&nf=021001'

    #url = 'https://suumo.jp/jj/bukken/ichiran/JJ012FC001/?ar=030&bs=030&et=9999999&jk=2&kb=1&kj=9&km=1&kr=A&kt=9999999&pc=30&sc=13118&sc=13117&scTemp=13118&scTemp=13117&ta=13&tb=0&tj=0&tt=9999999&nf=030001'


    init(url)
    #read()


```