検索

ホームページ  >  に質問  >  本文

HTML 要素を使用せずに Web サイトからデータをスクレイピングするにはどうすればよいですか?

次の Web サイトからデータを収集して、特定のケースの詳細を見つけるにはどうすればよいですか?

ケースの詳細を手動で検索する手順は次のとおりです:

  1. https://www.claytoncountyga.gov/government/courts/court-case-inquiry/
  2. に移動します。
  3. ケースの詳細をさらにドリルダウンできるボタン/入力を備えた JavaScript 読み込みフォームがあるようです - ケースを姓で検索するには「名前検索」を選択する必要があります - それをクリックしてください
  4. 次に、(2) と同じ要素に新しい画面が表示され、ユーザーがドロップダウン裁判所 (例: 治安判事裁判所) から選択し、自由形式のテキスト入力で姓名 (Smith John) を入力できるようになります。 。
  5. 「送信」をクリックしてすべてのケースを表示します
  6. ケースの詳細は、これまでのすべての手順と同様に、テーブル内の同じ要素に入力されている行の 1 つでケース番号をクリックすると表示できます。このページからデータを取得したいと考えています。

内部フォームはカプセル化されているように見えるため (おそらく JavaScript で実装されていると思います)、各入力が提供された後にレンダリングされる HTML 要素は表示されません。 Python を使用して自動化するにはどうすればよいですか?

P粉819533564P粉819533564330日前557

全員に返信(1)返信します

  • P粉458725040

    P粉4587250402024-03-21 09:39:39

    フォームは、ID「Clayton County」の iframe 内に含まれています。 Selenium がその中の要素と対話できるようにするには、まず EC.frame_to_be_available_and_switch_to_it メソッドを使用して Selenium に切り替える必要があります。

    次に、Select() を使用して、ドロップダウン メニューからオプションを選択できます。

    最後のページでは、すべてのケース番号の URL を取得して case_numbers_urls に保存します。これにより、それらをループして各ケースをロードし、情報を取得して次のケースに渡すことができます。

    Selenium インポート Web ドライバーから
    selenium.webdriver.common.by からインポート
    selenium.webdriver.support.ui からインポートを選択します
    selenium.webdriver.chrome.service インポート サービスから
    selenium.webdriver.support.ui から WebDriverWait をインポート
    selenium.webdriver.support から、expected_conditions を EC としてインポートします
    
    driver = webdriver.Chrome(service=Service(chromedriver_path))
    driver.get('https://www.claytoncountyga.gov/government/courts/court-case-inquiry/')
    
    # ページ1
    wait = WebDriverWait(ドライバー, 9)
    wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID, "クレイトン郡")))
    driver.find_element(By.XPATH, "//a[contains(.,'名前検索')]").click()
    
    # 2ページ
    ドロップダウン = wait.until(EC.element_to_be_clickable((By.ID, "ctt")))
    Select(ドロップダウン).select_by_value('M')
    lname = 'スミス'
    fname = 'ジョン'
    driver.find_element(By.NAME, 'lname').send_keys(lname)
    driver.find_element(By.NAME, 'fname').send_keys(fname)
    driver.find_element(By.ID, 'btnSrch').click()
    
    # 3ページ目
    case_numbers_urls = [c.get_attribute('href') for c in wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, '#myTable a[href]:not([rel])')))]
    case_numbers_urls の URL の場合:
        driver.get(url)
        #何かをする

    返事
    0
  • キャンセル返事