Python简易网页抓取无法获取目标表格行内容问题求助
解决网页内容提取为空的问题
看起来你在尝试用Selenium提取网页里的海报会话标题,但遇到了提取结果为空的情况,我帮你梳理下代码里的问题和修复方案:
代码里的核心问题
- 冗余且冲突的请求方式:你先用Selenium的
driver.get(url)加载了页面,又用requests.get(url)单独发了一次请求——这个请求拿到的是静态HTML,和Selenium渲染后的页面完全没关系,而且你也没用到这个page_source变量,完全可以删掉这两行。 - 过时的元素定位方法:
find_elements_by_xpath在Selenium 4+版本里已经被弃用了,现在需要导入By模块来调用新的定位方法。 - 不充分的等待策略:固定的
time.sleep(3)有时候不够,尤其是页面滚动后元素可能还在加载,最好用显式等待来确保元素加载完成。 - 可能不准确的XPath定位:你用的
".//tr[@class='normaltext']"可能没匹配到实际元素,建议检查页面的真实DOM结构,确认目标元素的class或其他属性。
修正后的代码
import time 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 driver = webdriver.Chrome() bracket = [] url = 'https://www.sabcs.org/Program/Poster-Sessions/Poster-Session-1' try: driver.get(url) # 滚动到页面底部,触发内容加载 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 显式等待目标元素加载完成,最多等10秒 WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.XPATH, ".//tr[@class='normaltext']")) ) # 用新的方式定位元素 each_field = driver.find_elements(By.XPATH, ".//tr[@class='normaltext']") for item in each_field: title_text = item.text.strip() if title_text: # 过滤空内容 print(title_text) bracket.append(title_text) finally: driver.quit() # 确保浏览器关闭
额外的排查建议
- 如果还是提取不到内容,打开浏览器的开发者工具(F12),用元素选择器定位目标标题,确认XPath是否正确。比如可能目标文本在
tr下的某个td标签里,这时候XPath需要调整为".//tr[@class='normaltext']/td"。 - 有些网站会用动态加载(比如懒加载),可能需要多次滚动或者等待更长时间,你可以在滚动后再加一次等待,或者循环滚动直到页面不再加载新内容。
内容的提问来源于stack exchange,提问作者Age
相关产品推荐
相关产品推荐

