async def getBukkensFromWEBSITE(future, ymlFileName, URL_GOODROOM_PRE, URL_GOODROOM_RSTORE, pageNum): #新規取得した物件情報を格納 bukkens = [] # 物件情報のDBIOインスタンスを作成 dbio = dbiomaker() # yamlファイル格納フォルダパス ROOT_PATH = os.path.dirname( os.path.abspath(__file__)) #このスクリプトがあるフォルダの絶対パス YAML_FOLDER_PATH = ROOT_PATH + "/../yml/" #yamlデータ取得 print("--yaml read start--") f = open(YAML_FOLDER_PATH + ymlFileName, 'r') yaml = yamllib.load(f) # 読み込む f.close() print("--yaml read end--") #物件情報削除 dbio.deleteBySite(yaml["website"]) # 物件サイトから情報を取得 for i in range(1, pageNum): url = URL_GOODROOM_PRE + str(i) + URL_GOODROOM_RSTORE print("---getting start " + url + "---") await getBukkensFromYamlInPage(yaml, url) #処理完了通知 future.set_result(True) print("---getting done " + url + "---")
async def getBukkensFromWEBSITE(future,ymlFileName,URL_GOODROOM_PRE,URL_GOODROOM_RSTORE,pageNum): #新規取得した物件情報を格納 bukkens=[] # 物件情報のDBIOインスタンスを作成 dbio = dbiomaker() # yamlファイル格納フォルダパス ROOT_PATH = os.path.dirname(os.path.abspath(__file__)) #このスクリプトがあるフォルダの絶対パス YAML_FOLDER_PATH=ROOT_PATH+"/../yml/" #yamlデータ取得 print("--yaml read start--") f = open(YAML_FOLDER_PATH+ymlFileName, 'r') yaml = yamllib.load(f) # 読み込む f.close() print("--yaml read end--") #物件情報削除 dbio.deleteBySite(yaml["website"]) # 物件サイトから情報を取得 for i in range(1,pageNum): url = URL_GOODROOM_PRE + str(i) + URL_GOODROOM_RSTORE print("---getting start "+ url +"---") await getBukkensFromYamlInPage(yaml,url) #処理完了通知 future.set_result(True) print("---getting done "+ url +"---")
def viewSelect(select): bukkens=[] # 物件情報のDBIOインスタンスを作成 dbio = dbiomaker() bukkens=dbio.selectWith(select) return bukkens
def viewAll(): bukkens=[] # 物件情報のDBIOインスタンスを作成 dbio = dbiomaker() bukkens=dbio.select() return bukkens
def viewAll(): bukkens = [] # 物件情報のDBIOインスタンスを作成 dbio = dbiomaker() bukkens = dbio.select() return bukkens
def viewSelect(select): bukkens = [] # 物件情報のDBIOインスタンスを作成 dbio = dbiomaker() bukkens = dbio.selectWith(select) return bukkens
async def getBukkensFromYamlInPage(yaml,pageUrl): # 物件情報のDBIOインスタンスを作成 dbio = dbiomaker() # webサイトから取得した物件リストを格納 bukkens = [] #開発環境と本番環境でPhantomJSの呼び出し方が異なるため、ホスト名で振り分け if os.uname()[1] == "kira-no-MacBook-Air.local": driver = webdriver.PhantomJS(executable_path='/Applications/phantomjs-1.9.2-macosx/bin/phantomjs') else: driver = webdriver.PhantomJS() # 新規タブをあけるキー操作を設定 newtab=Keys.CONTROL + 't' # Mac かどうかの判定、キーがMac だと違う if sys.platform == 'darwin': newtab=Keys.COMMAND + 't' #webサイトからデータ取得 print("start driver") #open tab #driver.find_element_by_tag_name('body').send_keys(newtab) driver.get(pageUrl) print("end driver") #HTMLは未使用にみえるが、文字列指定の形でevalで使用している HTML = lxml.html.fromstring(driver.page_source) #登録用物件辞書 bukkenDic={} bukkenSetter=BukkenSetter() #mainルーチン # g is GROUP # u is UNIT # pcs is UNIT item #共通情報設定 yamlid="website" bukkenDic.update({yamlid:yaml[yamlid]}) yamlid="websiteURL" bukkenDic.update({yamlid:yaml[yamlid]}) #print("G1 --YAML[GROUPS] => YAML[GROUP]--:YAMLファイルからGROUPの検索条件を取得") for g in yaml: if g == "GROUP": gp = yaml[g]["PROTOCOL"] gc = yaml[g]["COMMAND"] gs = yaml[g]["SELECTOR"] #print("G2 --YAML[GROUP] => HTML[GROUPS]--:GROUP検索条件よりHTMLのGROUP群を抽出") groups=eval("HTML"+"."+gp+'("'+gc+'")'+gs) #print("G3 --HTML[GROUPS] => HTML[GROUP]--:HTMLのGROUP群を1つづつループ処理") for group in groups: #print("U1 --YAML[GROUP] => YAML[UNIT]--:YAMLファイルからUNITの検索条件を取得") for u in yaml[g]: if u == "UNIT": up = yaml[g][u]["PROTOCOL"] uc = yaml[g][u]["COMMAND"] us = yaml[g][u]["SELECTOR"] #print("U2 --YAML[UNIT] => HTML[UNITS]--:UNIT検索条件よりHTMLのUNIT群を抽出") #<div class="article-box clearfix"> units=eval("group"+"."+up+'("'+uc+'")'+us) #print("U3 --HTML[UNITS] => HTML[UNIT]--:HTMLのUNIT群を1つづつループ処理") for unit in units: #print("UI1--YAML[UNIT] => YAML[UNITITEMS]--:YAMLファイルからUNITITEM群の検索条件を取得") for uis in yaml[g][u]: if uis =="UNITITEMS": #print("UI2--YAML[UNITITEMS] => YAML[UNITITEM]--:YAMLファイルからUNITITEMの検索条件を取得") for ui in yaml[g][u][uis] : if ui != "IGNORE": p = yaml[g][u][uis][ui]["PROTOCOL"] c = yaml[g][u][uis][ui]["COMMAND"] s = yaml[g][u][uis][ui]["SELECTOR"] h = yaml[g][u][uis][ui]["HEADER"] #print("UI3 --YAML[UNITITEM] => HTML[UNITITEM]--:UNITITEM検索条件よりHTMLのUNITITEM情報を抽出") #print(ui+":"+htmlItemSelector(unit,p,c,s)) #登録用物件辞書に追加 bukkenDic.update({ui:htmlItemSelector(unit,p,c,s,h)}) #物件情報設定 bukkeninfo = bukkenSetter.getBukkenInfoByDic(bukkenDic) bukkens.append(bukkeninfo) #️DBへ格納 dbio.insert(bukkens)
async def getBukkensFromYamlInPage(yaml, pageUrl): # 物件情報のDBIOインスタンスを作成 dbio = dbiomaker() # webサイトから取得した物件リストを格納 bukkens = [] #開発環境と本番環境でPhantomJSの呼び出し方が異なるため、ホスト名で振り分け if os.uname()[1] == "kira-no-MacBook-Air.local": driver = webdriver.PhantomJS( executable_path='/Applications/phantomjs-1.9.2-macosx/bin/phantomjs' ) else: driver = webdriver.PhantomJS() # 新規タブをあけるキー操作を設定 newtab = Keys.CONTROL + 't' # Mac かどうかの判定、キーがMac だと違う if sys.platform == 'darwin': newtab = Keys.COMMAND + 't' #webサイトからデータ取得 print("start driver") #open tab #driver.find_element_by_tag_name('body').send_keys(newtab) driver.get(pageUrl) print("end driver") #HTMLは未使用にみえるが、文字列指定の形でevalで使用している HTML = lxml.html.fromstring(driver.page_source) #登録用物件辞書 bukkenDic = {} bukkenSetter = BukkenSetter() #mainルーチン # g is GROUP # u is UNIT # pcs is UNIT item #共通情報設定 yamlid = "website" bukkenDic.update({yamlid: yaml[yamlid]}) yamlid = "websiteURL" bukkenDic.update({yamlid: yaml[yamlid]}) #print("G1 --YAML[GROUPS] => YAML[GROUP]--:YAMLファイルからGROUPの検索条件を取得") for g in yaml: if g == "GROUP": gp = yaml[g]["PROTOCOL"] gc = yaml[g]["COMMAND"] gs = yaml[g]["SELECTOR"] #print("G2 --YAML[GROUP] => HTML[GROUPS]--:GROUP検索条件よりHTMLのGROUP群を抽出") groups = eval("HTML" + "." + gp + '("' + gc + '")' + gs) #print("G3 --HTML[GROUPS] => HTML[GROUP]--:HTMLのGROUP群を1つづつループ処理") for group in groups: #print("U1 --YAML[GROUP] => YAML[UNIT]--:YAMLファイルからUNITの検索条件を取得") for u in yaml[g]: if u == "UNIT": up = yaml[g][u]["PROTOCOL"] uc = yaml[g][u]["COMMAND"] us = yaml[g][u]["SELECTOR"] #print("U2 --YAML[UNIT] => HTML[UNITS]--:UNIT検索条件よりHTMLのUNIT群を抽出") #<div class="article-box clearfix"> units = eval("group" + "." + up + '("' + uc + '")' + us) #print("U3 --HTML[UNITS] => HTML[UNIT]--:HTMLのUNIT群を1つづつループ処理") for unit in units: #print("UI1--YAML[UNIT] => YAML[UNITITEMS]--:YAMLファイルからUNITITEM群の検索条件を取得") for uis in yaml[g][u]: if uis == "UNITITEMS": #print("UI2--YAML[UNITITEMS] => YAML[UNITITEM]--:YAMLファイルからUNITITEMの検索条件を取得") for ui in yaml[g][u][uis]: if ui != "IGNORE": p = yaml[g][u][uis][ui]["PROTOCOL"] c = yaml[g][u][uis][ui]["COMMAND"] s = yaml[g][u][uis][ui]["SELECTOR"] h = yaml[g][u][uis][ui]["HEADER"] #print("UI3 --YAML[UNITITEM] => HTML[UNITITEM]--:UNITITEM検索条件よりHTMLのUNITITEM情報を抽出") #print(ui+":"+htmlItemSelector(unit,p,c,s)) #登録用物件辞書に追加 bukkenDic.update({ ui: htmlItemSelector( unit, p, c, s, h) }) #物件情報設定 bukkeninfo = bukkenSetter.getBukkenInfoByDic( bukkenDic) bukkens.append(bukkeninfo) #️DBへ格納 dbio.insert(bukkens)