在Python中使用Selenium通过XPath获取innerHTML

0 投票
2 回答
4239 浏览
提问于 2025-06-18 04:03

我正在学习网页抓取,虽然我查看了文档中的例子和一些在StackOverflow上的问题,但我还是无法让我的代码正常工作。

我想抓取的网站有职位列表,但它的结构没有固定的模式或类,几乎每个元素都有自己的ID和独立的类。当我使用检查工具查找一个锚标签的内嵌HTML的XPath时,我得到了以下内容:

在Firefox中:

/html/body/div[1]/div/main/div[3]/div/div/section/ul/li[1]/article/header/div/div[1]/h2/a

在Brave浏览器中:

//*[@id="16542952"]/section/div/header/h2/a

同一个网址,和同一个元素,结果中的第一个职位名称。

网址

我想遍历这个页面,获取一些职位列表中元素的文本,比如职位名称、描述等等。

我正在使用Python和Firefox/geckodriver的selenium。

相关问题:

  • 暂无相关问题
暂无标签

2 个回答

0

一旦你有了一个元素 el,比如说你想获取它里面的 HTML 内容,你可以这样做:

el = driver.find_element('xpath', 'FULL XPATH (which FireFox gave you)')
el.get_property("innerHTML")

至于循环,我觉得你可以通过以下方式获取包含工作元素的父元素:

parent = driver.find_element('xpath', '/html/body/div[1]/article/section/ul') # the 'ul' which holds the jobs 'li' tags
jobs = driver.execute_script("return arguments[0].children", parent) # the parent variable will be replacing arguments[0]

for job in jobs:
    # do what you want to do to each element
0

要使用SeleniumPython来遍历网页并获取职位列表的文本,你需要使用WebDriverWait来确保所有元素都可见,接着你可以使用以下任意一种定位策略

  • 使用CSS_SELECTORget_attribute()

    driver.get('https://www.catho.com.br/vagas/data-scientist/?q=data%20scientist&page=1')
    print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "header>h2>a")))])
    
  • 使用XPATHtext属性:

    driver.get('https://www.catho.com.br/vagas/data-scientist/?q=data%20scientist&page=1')
    print([my_elem.text for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.XPATH, "//header/h2/a")))])
    
  • 控制台输出:

    ['Analista Data Science', 'Consultor de Data Science', 'Analista Big Data / Cientista de Dados', 'Cientista de Dados', 'Cientista de Dados', 'Cientista de Dados', 'Cientista de Dados', 'Cientista de Dados', 'Cientista de Dados', 'Cientista de Dados']
    
  • 注意:你需要添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

撰写回答