82252


Python3でselenium/BeautifulSoupを使って特定のWEBページでスクレイピング後、リスト文字データを抽出したいです。

そのWEBページには、class_で特定の文字データを取得できないので、リストにしてからデータを取得しています。

ご指導をお願いできますでしょうか。

取得前のリスト  
**elems**

[code]

    print(elems)
    
[/code]

[code]

    ['\n\n\n\nWi-FI L11\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n5G\nKDDI\n\n\n\n\n\n\n\n\n\xa0\nST\n\xa0\n\n\n\n\n\n\n\n0\n\n\n\n\n\n\n\n1\n\n100%\n\n\n\n\n\n\n\n\nヘルプ\n\nshutdown\nパスワードを変更\nログアウト\n\n日本語English\n\n\n\n\n\n\n\n\n\n\n\n\n接続中の端末\n\n\n0\xa0\n\n\n1\xa0\n\n\n\n\nルーター\n5G\n\n\n設定\n\nWi-Fi\n\n設定\n\n\n\n\n通 
    信ステータス\n\n\n未接続\n接続済み\n\n\n2.02Kb/s ↓\n5.96Kb/s ↑\n\n\n\n\n\n\n\n\n\ntraffic_data_plan\n\n\n\n\n\n\n\n\n\n使用\n\n\n\n\n\ntraffic_limit_data\n\n\ntraffic_not_set_limited\n\n\n\n\n\ntraffic_not_support\n\n\n\n\n\n\n\n\n推奨位置\n\n\n\n\n\n\n\nデータ通信量\n\n\n\n\n\n\n\n詳細設定\n\n\n\n\n\n\n\n端末情報\n\n\n\n電話番号\n0701232511\n\n\nIMEI\n812341050123456\n\n\nICCID\n81234560074626223089\n\n\nソフトウェアバージョン\n1.0.5_U\n\n\n詳細情報端末情報\n電話番号\n0701232511\n\n\nIMEI\n812341050123456\n\n\nICCID\n81234560074626223089\n\n\n5G SINR\n19.5 dB\n\n\n5G RSRP\n-102 dBm\n\n\nネットワーク名 （2.4GHz帯）\nTEST_L10_123ECF\n\n\nネットワーク名（5GHz帯）\nTEST_L12_234ECF_5G\n\n\n最大アク 
    セス数（5GHz帯メインSSID）\n30\n\n\n最大接続数\n40\n\n\nWi-Fiカバレッジ\n長距離モード\n\n\nIPアドレス\n192.111.1.1\n\n\nWAN側のIPアドレス\n11.211.13.121\n\n\nWAN側のIPv6アドレ 
    ス\n2111:0123:c123:1230:f4fc:12e3:1231:1b12\n\n\nソフトウェアバージョン\n1.0.5_U\n\n\nファームウェアバージョン\n— —\n\n\nハードウェアバージョン\nZTR01HW-1.0.0\n\n\n\n\n\n\n\n\n2.4GHz帯 Wi-Fi\n\n\n\n\n\n\n\n5GHz帯 Wi-Fi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n']
    
[/code]

取得した後の改行を削除しています。

[code]

    print(new_list)
    
[/code]

**new_list**

[code]

    ['Wi-FiI\xa0ST\xa001100%ヘルプshutdownパスワードを変更ログアウト日本語English接続中の端末0\xa01\xa0ルーター5G設定Wi-Fi設定通信ステータス未接続接続済み2.02Kb/s ↓21.65Kb/s ↑traffic_data_plan使用traffic_limit_datatraffic_not_set_limitedtraffic_not_support推奨位置データ通信量詳細設定端末情報電話番号0701232511IMEI812341050123456ICCID81234560074626223089ソフトウェアバージョン1.0.5_U詳細情報端末情報電話番号0701232511IMEI812341050123456ICCID812345600746262230895G SINR18.5 dB5G RSRP-102 dBmネットワーク名 （2.4GHz帯）TEST_L10_123ECFネットワーク名（5GHz帯）TEST_L12_234ECF_5G最大アクセス数（5GHz帯メインSSID）60最大接続数40Wi-Fiカバレッジ長距離モードIPアドレス192.111.1.1WAN側のIPアドレ
    ス11.211.13.121WAN側のIPv6アドレス2111:0123:c123:1230:f4fc:12e3:1231:1b12ソフトウェアバージョン1.0.5_Uファームウェアバージョン— —ハードウェアバージョンZ1234HW-1.0.02.4GHz帯 Wi-Fi5GHz帯 Wi-FI’]
    
[/code]

下記のように特定のデータをリストから出力したいです。  
※テストデータ  
**出力したい値(実現したい内容)**

[code]

    電話番号:0701232511
    IMEI:812341050123456
    ICCID:81234560074626223089
    ネットワーク名 （2.4GHz帯）:TEST_L10_123ECF
    ネットワーク名（5GHz帯）:TEST_L12_234ECF_5G
    最大アクセス数:40
    Wi-Fiカバレッジ:長距離モード
    IPアドレス:192.111.1.1
    WAN側のIPアドレス:11.211.13.121
    WAN側のIPv6アドレス:2111:0123:c123:1230:f4fc:12e3:1231:1b12
    ソフトウェアバージョン:1.0.5_U
    
[/code]

` pytorchの関数リスト` で特定の文字を抽出しましたが、上手く行かず  
outは上記のリストの結果のまま出力されます。

[code]

    #電話番号を取得 
    key = '電話番号'
    out =  [ s for s in news_list if key in s ]
    
    print(out)
    
[/code]

参考URL：[pythonのlistから特定文字列を含む要素を抽出](https://tzmi.hatenablog.com/entry/2020/03/28/190111)

CODE

[code]

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import time
    from selenium.webdriver.chrome.options import Options
    from datetime import datetime as dt, date, timedelta
    import pyautogui
    import pyperclip
    import requests
    from bs4 import BeautifulSoup
    from urllib.parse import urljoin
    import urllib3
    from torch import nn
    from urllib3.exceptions import InsecureRequestWarning 
    urllib3.disable_warnings(InsecureRequestWarning)
    import warnings
    warnings.filterwarnings("ignore", category=UserWarning, module='bs4')
    
    #headless background 
    option = Options()
    option.add_argument('--headless')
    
    #Getting Default Adapter failed error message
    option.add_experimental_option('excludeSwitches', ['enable-logging'])
    
    URL= "http://192.111.1.1/test.html"
    
    # ブラウザを開く。 #options=option background 
    driver = webdriver.Chrome(executable_path="C:\\Users\\test\\Documents\\python\\chromedriver.exe",options=option)
    
    # Googleの検索TOP画面を開く。
    driver.get(URL)
    # 3秒待機
    time.sleep(3)
    
    # パスワードを入力
    password = driver.find_element_by_name("txtPwd")
    password.send_keys("1234")
    
    #ログインボタンをクリック
    login = driver.find_element_by_xpath('//*[@id="btnLogin"]')
    login.click()
    
    time.sleep(3)
    #showDetailInfoボタンをクリック
    showDetailInfo = driver.find_element_by_xpath('//*[@id="showDetailInfo"]')
    showDetailInfo.click()
    
    
    time.sleep(3)
    # 検索先のページのHTMLを取得
    
    html = driver.page_source.encode('utf-8')
    
    soup = BeautifulSoup(html, 'lxml')
    elems = [tag.text for tag in soup]
    print(elems)
    
    #改行を削除
    news_list = []
    for elem in elems:
       news = elem.replace("\n","")
       news_list.append(news)
       print(news_list)
    
    #電話番号を取得
    #    
    key = '電話番号'
    out =  [ s for s in news_list if key in s ]
    
    print(out)
    
    
[/code]


CC BY-SA 4.0
2021-09-05T06:13:55.347
82249
2021-09-05T08:48:11.400
2021-09-05T07:35:13.033
18859
18859
question
python python3
Pythonリストから特定の文字を抽出したい


全体が単一の文字列になっているので、まずは
`\n+`(連続する改行コード)で分割します。次に、「詳細情報端末情報」の次から「ハードウェアバージョン」の次までの部分を取り出しています。最後に、電話番号などの項目名とその値を
key-value として dict 型インスタンス(`attr`)に格納しています。

[code]

    elems = [tag.text for tag in soup]
    print(elems)
    
    ## ここから
    import re
    lst = re.split(r'\n+', elems[0])
    lst = lst[lst.index('詳細情報端末情報')+1:lst.index('ハードウェアバージョン')+2]
    
    attr = dict()
    for key, val in zip(*[iter(lst)]*2):
      attr[key] = val
    
    for k, v in attr.items():
      print(k + ':' + v)
    
    # =>
    電話番号:0701232511
    IMEI:812341050123456
    ICCID:81234560074626223089
    5G SINR:19.5 dB
    5G RSRP:-102 dBm
    ネットワーク名 （2.4GHz帯）:TEST_L10_123ECF
    ネットワーク名（5GHz帯）:TEST_L12_234ECF_5G
    最大アクセス数（5GHz帯メインSSID）:30
    最大接続数:40
    Wi-Fiカバレッジ:長距離モード
    IPアドレス:192.111.1.1
    WAN側のIPアドレス:11.211.13.121
    WAN側のIPv6アドレス:2111:0123:c123:1230:f4fc:12e3:1231:1b12
    ソフトウェアバージョン:1.0.5_U
    ファームウェアバージョン:— —
    ハードウェアバージョン:ZTR01HW-1.0.0
    
[/code]


CC BY-SA 4.0
2021-09-05T08:17:14.843
82252
2021-09-05T08:48:11.400
2021-09-05T08:48:11.400
47127
47127
82249
answer