Selenium网页爬虫无法抓取目标标签问题求助
问题:Selenium无法抓取WSJ文章段落标签,返回结果长度为0
我尝试抓取WSJ某篇文章中的段落标签,目标页面链接为https://www.wsj.com/articles/chinese-health-official-raises-covid-alarm-ahead-of-lunar-new-year-holiday-11672664635(需抓取的标签不在付费墙后),相关标签显示目标元素的类名为css-xbvutc-Paragraph e3t0jlg0。但执行以下Python代码后,paragraphs长度为0,无法正确获取目标标签:
from selenium import webdriver from selenium.webdriver.common.by import By url = 'https://www.wsj.com/articles/chinese-health-official-raises-covid-alarm-ahead-of-lunar-new-year-holiday-11672664635' driver = webdriver.Chrome() driver.get(url) paragraphs = driver.find_elements(By.CLASS_NAME, 'css-xbvutc-Paragraph e3t0jlg0') print(len(paragraphs)) # => prints 0
问题原因与解决办法
错误原因
By.CLASS_NAME仅支持传入单个类名,你传入的是两个类名(css-xbvutc-Paragraph和e3t0jlg0),Selenium会将整个字符串视为一个完整的类名去匹配,而页面中没有元素拥有这个复合类名,因此返回空列表。
解决办法
使用CSS选择器匹配多类元素
通过By.CSS_SELECTOR同时指定两个类名(类名间无空格,表示元素同时拥有这两个类):paragraphs = driver.find_elements(By.CSS_SELECTOR, '.css-xbvutc-Paragraph.e3t0jlg0')使用单个唯一类名
如果其中一个类名(比如css-xbvutc-Paragraph)足以唯一定位目标元素,直接用单个类名即可:paragraphs = driver.find_elements(By.CLASS_NAME, 'css-xbvutc-Paragraph')添加显式等待(推荐)
页面加载可能存在延迟,添加显式等待确保元素渲染完成,避免因加载未完成导致的抓取失败:from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待10秒,直到目标元素出现 paragraphs = WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.css-xbvutc-Paragraph.e3t0jlg0')) )
内容的提问来源于stack exchange,提问作者Gaurav Varma
相关产品推荐
相关产品推荐

