91524


seleniumを使って、
[駐車場一覧NAVITIME](https://www.navitime.co.jp/category/0805/13227/)のwebサイトから各ページのURLを抽出して  
spotのみのURL取得したいです。

**現在の結果**  
❶からURLを取得してから、❷spotのみのURL取得したいです。

❶while文から各ページ1,2,3,4...のURL取得  
各ページがありますので、URLは分割されてリストで表示されます。

[code]

    ['https://www.navitime.co.jp/poi?spot=60012-55019091', 'https://www.navitime.co.jp/poi?spot=60001-BUK0044576', 'https://www.navitime.co.jp/poi?spot=60007-REP0011524', 'https://www.navitime.co.jp/poi?spot=60001-BUK0036667', 'https://www.navitime.co.jp/poi?spot=60001-BUK0045563', 'https://www.navitime.co.jp/poi?spot=60007-REP0011405', 'https://www.navitime.co.jp/poi?spot=60012-55027976', 'https://www.navitime.co.jp/poi?spot=60048-310002727', 'https://www.navitime.co.jp/poi?spot=60048-310012280', 'https://www.navitime.co.jp/poi?spot=60001-BUK0031689', 'https://www.navitime.co.jp/poi?spot=60001-BUK0046029', 'https://www.navitime.co.jp/poi?spot=60001-BUK0049279', 'https://www.navitime.co.jp/poi?spot=60001-BUK0053461', 'https://www.navitime.co.jp/poi?spot=60001-BUK0055195', 'https://www.navitime.co.jp/poi?spot=60001-BUK0059337']
    4
    ['https://www.navitime.co.jp/poi?spot=60007-REP0013367', 'https://www.navitime.co.jp/poi?spot=60001-BUK0059411', 'https://www.navitime.co.jp/poi?spot=60007-REP0007349', 'https://www.navitime.co.jp/poi?spot=60007-REP0014044', 'https://www.navitime.co.jp/poi?spot=60007-REP0017340', 'https://www.navitime.co.jp/poi?spot=60007-REP0019251', 'https://www.navitime.co.jp/poi?spot=60007-REP0021939', 'https://www.navitime.co.jp/poi?spot=60007-REP0024783', 'https://www.navitime.co.jp/poi?spot=60007-REP0024801', 'https://www.navitime.co.jp/poi?spot=60007-REP0025235', 'https://www.navitime.co.jp/poi?spot=60014-734-3', 'https://www.navitime.co.jp/poi?spot=60018-A1583', 'https://www.navitime.co.jp/poi?spot=60036-87905', 'https://www.navitime.co.jp/poi?spot=60036-88101', 'https://www.navitime.co.jp/poi?spot=60036-91194']
    6
    ['https://www.navitime.co.jp/poi?spot=60034-28734', 'https://www.navitime.co.jp/poi?spot=60034-29371', 'https://www.navitime.co.jp/poi?spot=60034-1003', 'https://www.navitime.co.jp/poi?spot=60036-92084', 'https://www.navitime.co.jp/poi?spot=60038-0181', 'https://www.navitime.co.jp/poi?spot=60079-NRP00562', 'https://www.navitime.co.jp/poi?spot=60079-NRP00674', 'https://www.navitime.co.jp/poi?spot=60004-CTR00249', 'https://www.navitime.co.jp/poi?spot=60004-CTR00286', 'https://www.navitime.co.jp/poi?spot=60004-NTMR0486', 'https://www.navitime.co.jp/poi?spot=60004-SPT00021', 'https://www.navitime.co.jp/poi?spot=60071-1130522', 'https://www.navitime.co.jp/poi?spot=60034-28733', 'https://www.navitime.co.jp/poi?spot=60034-38930', 'https://www.navitime.co.jp/poi?spot=60034-38935']
    8
    ['https://www.navitime.co.jp/poi?spot=60034-52478']
    
[/code]

❷spotのURLのみ取得

[code]

    https://www.navitime.co.jp/poi?spot=60034-52478
    
[/code]

**実現したい内容**

❷spotのURLのみ取得  
❶で分割されている各ページのリストを結合して、下記のように  
繰り返しながら1ページのURLから最後の4ページのURLまで開きたいです。

[code]

    https://www.navitime.co.jp/poi?spot=60012-55019091
    https://www.navitime.co.jp/poi?spot=60001-BUK0044576
    https://www.navitime.co.jp/poi?spot=60007-REP0011524
    ・
    ・
    ・
    ・
    https://www.navitime.co.jp/poi?spot=60034-52478
    
[/code]

下記のコードで行いましたが、  
どのように各ページのリスト結合すれば良いか。まだ分からない状態です。

while文の中に全て繰り返してやった方が良いでしょうか。

それともリスト分割したもの結合させた方が良いでしょうか。

while文の中にtry catchして入れていますが、  
もし他の方法で各ページのULRを繰り返す方法ありましたら、教えていただけると幸いです。

コード

[code]

    from multiprocessing.dummy import Condition
    from selenium.webdriver.common.keys import Keys
    import time
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.support.select import Select  
    from selenium import webdriver
    from webdriver_manager.chrome import ChromeDriverManager
    from selenium.webdriver.common.keys import Keys
    from selenium.common.exceptions import NoSuchElementException
    import random
    import subprocess
    
    
    #headless background
    option = Options()
    #backgrand
    #option.add_argument('--headless')
    
    #ログイン情報を維持するための設定　
    # 参考→https://rabbitfoot.xyz/selenium-chrome-profile
    PROFILE_PATH ="C:\\Users\\users\\AppData\\Local\\Google\\Chrome\\User Data\\" # 変更
    option.add_argument('--user-data-dir=' + PROFILE_PATH)
    option.add_argument('--profile-directory=Default')
    #Getting Default Adapter failed error message
    option.add_experimental_option('excludeSwitches', ['enable-logging'])
    
    # ブラウザを開く。 #options=option background
    driver = webdriver.Chrome(executable_path=ChromeDriverManager().install() ,options=option)
    
    #駐車場一覧 - NAVITIME URL
    URL= "https://www.navitime.co.jp/category/0805/13227/"
    
    # URLを開く。
    driver.get(URL)
    
    #待機時間
    time.sleep(2)
    i=2
    #while文から各ページ1,2,3,4...のURL取得
    while True:
     try:
        
        #全てのURLを取得
        elements = driver.find_elements('xpath',"//a[@href]")
        #print(elements)
    
        new_list = []  #### 空のリストを定義して初期化
        for element in elements:
          list=element.get_attribute("href")
    
          #URLをリストとして作成
          data_list = list.splitlines()
          #print(data_list)
    
          #URLに含んでいるspot=URLのみ　出力
          l_in = [s for s in data_list if 'spot=' in s]
          #print(l_in)
    
          #spotを取得
          if l_in:
           new_list.append(l_in[0])  #### ループ内ではリストに追加するだけ
    
        print(new_list)
    
        #待機時間
        time.sleep(2)
    
       #次のボタンクリック
        button = driver.find_element('xpath','//*[@id="body-left"]/ul[1]/li['+str(i)+']/a')
        button.click()
    
        #ページ数
        i=2+i
        print(i)
    
     except NoSuchElementException:
       break
    
    
    #待機時間
    time.sleep(3)
    
    #取得したリストから1個ずつspot URLを開く
    for item in new_list:
        
        #spot URL
        URL=item
        print(URL)
    
        # spot URLを開く。
        driver.get(URL)
        
        time.sleep(2)
    
    
[/code]


CC BY-SA 4.0
2022-10-10T04:03:58.887
91523
2022-10-10T04:38:48.850
18859
question
python python3
PythonでURLのリスト分割してから全てのURLを繰り返す方法


`while True:`のループ内で`new_list = []`を行っているためにそのような状況になっていますね。

該当箇所を以下のように変更すればできるでしょう。(前後は省略します)

[code]

    #待機時間
    time.sleep(2)
    i=2
    new_list = []  #### ←←←ここに移動する
    #while文から各ページ1,2,3,4...のURL取得
    while True:
     try:
        
        #全てのURLを取得
        elements = driver.find_elements('xpath',"//a[@href]")
        #print(elements)
    
        #### →→→削除またはコメントアウトする new_list = []  #### 空のリストを定義して初期化
        for element in elements:
    
[/code]


CC BY-SA 4.0
2022-10-10T04:38:48.850
91524
2022-10-10T04:38:48.850
26370
91523
answer