在Python中使用Selenium通过XPath获取innerHTML
我正在学习网页抓取,虽然我查看了文档中的例子和一些在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
要使用Selenium和Python来遍历网页并获取职位列表的文本,你需要使用WebDriverWait来确保所有元素都可见,接着你可以使用以下任意一种定位策略:
使用
CSS_SELECTOR
和get_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")))])
使用
XPATH
和text属性: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