Python网页爬取文本异常:首个元素输出空白的技术问询
解决Python爬虫文本提取空白问题
问题原因分析
- 第一个
li p元素在requests获取的静态HTML里本身就没有有效文本,可能只有换行、空格这类空白字符 - 目标内容是通过JavaScript动态渲染的,requests只能拿到初始页面框架,抓不到JS加载后的内容
- 选择器
li p匹配到了不需要的空元素,而非你实际想要的目标内容
解决步骤
先排查静态页面真实结构
把打印文本的代码改成打印整个元素,看看第一个li p的实际内容:print(soup.select('li p')[0])如果输出的元素里确实没文本,说明静态页面里这个位置本来就是空的;如果能看到文本但
.text提取不出来,试试用.get_text(strip=True)自动去除空白字符:print(soup.select('li p')[0].get_text(strip=True))处理动态加载的内容
如果排查后发现静态页面里没有目标内容,说明是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()优化选择器精准定位
别用太宽泛的li p选择器,根据元素的class、id等属性缩小范围,比如检查页面里目标元素的class,改成类似soup.select('li.match-info p')[0]这样的选择器,减少匹配到空元素的概率。
内容的提问来源于stack exchange,提问作者NewGuy1
相关产品推荐
相关产品推荐

