搜索

首页  >  问答  >  正文

如何在没有HTML元素的情况下从网站上进行数据爬取?

如何从以下网站抓取数据以查找特定案例详细信息?

以下是查找案例详细信息的手动步骤:

  1. 导航至 https://www.claytoncountyga.gov/government/courts/court-case-inquiry/
  2. 似乎可能有一个带有按钮/输入的 JavaScript 加载表单,可让您进一步了解案例详细信息 - 需要选择“姓名搜索”以按姓氏搜索案例 - 单击它
  3. 然后,在 (2) 的同一元素中会出现一个新屏幕,允许用户从下拉法院(例如治安法院)中进行选择,并通过自由格式文本输入来输入姓氏和名字(Smith John)。
  4. 点击“提交”即可查看所有案例
  5. 点击表中与所有先前步骤相同的元素中填充的行之一上的案例编号,即可查看案例详细信息 - 我想从此页面抓取数据。

因为内部表单似乎是封装的(我猜测是用 Javascript 实现的),所以我看不到提供每个输入后呈现的 HTML 元素。我如何使用 Python 实现自动化?

P粉819533564P粉819533564256 天前478

全部回复(1)我来回复

  • P粉458725040

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

    该表单包含在 ID 为“Clayton County”的 iframe 内。为了使 selenium 能够与其中的元素交互,我们首先必须使用 EC.frame_to_be_available_and_switch_to_it 方法切换到它。

    然后使用 Select() 我们可以从下拉菜单中选择一个选项。

    在最后一页中,我们获取所有案例编号 url 并将它们保存在 case_numbers_urls 中,以便我们可以循环它们,加载每个案例,获取信息并传递到下一个案例。

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import Select
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Chrome(service=Service(chromedriver_path))
    driver.get('https://www.claytoncountyga.gov/government/courts/court-case-inquiry/')
    
    # page 1
    wait = WebDriverWait(driver, 9)
    wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID, "Clayton County")))
    driver.find_element(By.XPATH, "//a[contains(.,'Name Search')]").click()
    
    # page 2
    dropdown = wait.until(EC.element_to_be_clickable((By.ID, "ctt")))
    Select(dropdown).select_by_value('M')
    lname = 'Smith'
    fname = 'John'
    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()
    
    # page 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])')))]
    for url in case_numbers_urls:
        driver.get(url)
        # do something

    回复
    0
  • 取消回复