如何使用Python Selenium抓取<li>标签内的子标签
用Selenium定位ScienceDirect搜索结果标签内的特定子元素
核心思路
先定位搜索结果对应的所有<li>容器,再在每个容器内定位目标子标签;或者直接使用后代选择器/XPath一步定位到目标元素。以下是具体实现方案(以Python为例):
1. 先获取所有
假设你的目标<li>有统一类名(需根据实际HTML调整),先批量获取所有结果容器,再逐个提取子元素:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 初始化Chrome浏览器 driver = webdriver.Chrome() driver.get("https://www.sciencedirect.com/search?qs=physics") # 等待搜索结果加载完成(替换为实际<li>容器的选择器) wait = WebDriverWait(driver, 10) result_items = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "li.result-list-item"))) # 遍历每个<li>,提取目标子元素 for item in result_items: # 示例:提取标题(假设标题是<li>下的h2>a标签) title = item.find_element(By.CSS_SELECTOR, "h2>a").text # 示例:提取作者(假设作者是<li>下的div.author-list span) authors = item.find_element(By.CSS_SELECTOR, "div.author-list span").text # 示例:提取摘要(假设摘要是<li>下的div.abstract-content) abstract = item.find_element(By.CSS_SELECTOR, "div.abstract-content").text print(f"标题:{title}\n作者:{authors}\n摘要:{abstract}\n---") driver.quit()
2. 直接用后代选择器定位目标子元素
如果不需要遍历整个<li>,可以直接通过CSS选择器或XPath定位到<li>内的特定子元素:
- CSS选择器:
li.result-list-item h2>a(直接定位所有<li>下的标题链接) - XPath:
//li[contains(@class, 'result-list-item')]/h2/a(效果同上)
示例代码:
# 直接获取所有标题元素 titles = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "li.result-list-item h2>a"))) for title in titles: print(title.text)
注意事项
- 替换选择器:根据实际HTML结构调整类名、标签层级,确保选择器能精准匹配目标元素。
- 处理动态加载:ScienceDirect搜索结果可能滚动加载,若需获取更多内容,需模拟滚动到底部并等待新结果加载。
- 规避反爬:避免过快请求,可添加合理等待时间,不要一次性抓取大量数据,防止IP被封禁。
内容的提问来源于stack exchange,提问作者Saanvi
相关产品推荐
相关产品推荐

