You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python网页爬取文本异常:首个元素输出空白的技术问询

解决Python爬虫文本提取空白问题

问题原因分析

  • 第一个li p元素在requests获取的静态HTML里本身就没有有效文本,可能只有换行、空格这类空白字符
  • 目标内容是通过JavaScript动态渲染的,requests只能拿到初始页面框架,抓不到JS加载后的内容
  • 选择器li p匹配到了不需要的空元素,而非你实际想要的目标内容

解决步骤

  1. 先排查静态页面真实结构
    把打印文本的代码改成打印整个元素,看看第一个li p的实际内容:

    print(soup.select('li p')[0])
    

    如果输出的元素里确实没文本,说明静态页面里这个位置本来就是空的;如果能看到文本但.text提取不出来,试试用.get_text(strip=True)自动去除空白字符:

    print(soup.select('li p')[0].get_text(strip=True))
    
  2. 处理动态加载的内容
    如果排查后发现静态页面里没有目标内容,说明是JS动态加载的。这时候要用selenium模拟浏览器渲染页面:
    先安装selenium:

    pip install selenium
    

    然后修改代码(注意Edge驱动要和浏览器版本匹配,路径根据你的实际情况调整):

    from selenium import webdriver
    from selenium.webdriver.edge.service import Service
    from bs4 import BeautifulSoup
    import time
    
    service = Service('msedgedriver.exe')
    driver = webdriver.Edge(service=service)
    driver.get("https://www.betexplorer.com/tennis/atp-singles/tokyo/mcdonald-mackenzie-uchida-kaichi/UivPCtWD/")
    time.sleep(2)  # 等待页面加载完成
    
    webpage = driver.page_source
    soup = BeautifulSoup(webpage, "html.parser")
    
    print(soup.select('li p')[0].get_text(strip=True))
    print(soup.select('li p')[1].get_text(strip=True))
    
    driver.quit()
    
  3. 优化选择器精准定位
    别用太宽泛的li p选择器,根据元素的class、id等属性缩小范围,比如检查页面里目标元素的class,改成类似soup.select('li.match-info p')[0]这样的选择器,减少匹配到空元素的概率。

内容的提问来源于stack exchange,提问作者NewGuy1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:20:37