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

BeautifulSoup无法抓取页面标签,寻求非Selenium解决方案

问题排查与解决方法

以下是你用BeautifulSoup无法定位标签,但Selenium可以的常见原因及对应解决方案:

1. 页面内容由JavaScript动态生成

requests库获取的是服务器返回的初始静态HTML,而页面中的很多标签(比如你要找的h1)可能是浏览器加载后通过JavaScript动态渲染出来的,这部分内容不会出现在requests返回的响应里,自然用BeautifulSoup找不到。

解决办法:

  • 轻量替代方案:使用requests-html库,它可以模拟浏览器执行JS,获取渲染后的页面内容。示例代码:
from requests_html import HTMLSession
from bs4 import BeautifulSoup

session = HTMLSession()
url = 'https://dzen.ru/news/story/VMoskovskoj_oblasti_zapushhen_chat-bot_ochastichnoj_mobilizacii--b093f9a22a32ed6731e4a4ca50545831?lang=ru&from=reg_portal&fan=1&stid=fOB6O7PV5zeCUlGyzvOO&t=1664886434&persistent_id=233765704&story=90139eae-79df-5de1-9124-0d830e4d59a5&issue_tld=ru'
response = session.get(url)
response.html.render()  # 执行JS渲染页面
soup = BeautifulSoup(response.html.html, 'lxml')
print(soup.find_all('h1'))
  • 更高效的方案:打开浏览器开发者工具(F12),在Network面板中查找页面数据的API接口,直接请求接口获取结构化数据(比如JSON),比解析HTML更高效,也避免了渲染JS的开销。

2. 请求头缺失被网站反爬拦截

requests默认的请求头(比如User-Agent)会暴露它是爬虫程序,网站可能返回空白页、反爬验证页或错误内容,导致BeautifulSoup解析不到目标标签。

解决办法:

给requests添加模拟浏览器的请求头,示例代码:

import requests
from bs4 import BeautifulSoup

url = 'https://dzen.ru/news/story/VMoskovskoj_oblasti_zapushhen_chat-bot_ochastichnoj_mobilizacii--b093f9a22a32ed6731e4a4ca50545831?lang=ru&from=reg_portal&fan=1&stid=fOB6O7PV5zeCUlGyzvOO&t=1664886434&persistent_id=233765704&story=90139eae-79df-5de1-9124-0d830e4d59a5&issue_tld=ru'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36'
}
page = requests.get(url, headers=headers)
# 先打印page.text前500字符,确认是否返回了正确页面
print(page.text[:500])
soup = BeautifulSoup(page.text, 'lxml')
print(soup.find_all('h1'))

3. 需要Cookie验证才能访问内容

部分网站需要用户登录或携带特定Cookie才能返回完整页面内容,requests默认没有携带这些Cookie,导致返回的页面不包含目标标签。

解决办法:

  • 打开浏览器访问目标页面,在开发者工具的Application面板中复制Cookie,加到requests的请求里:
cookies = {
    'cookie_name1': 'cookie_value1',
    'cookie_name2': 'cookie_value2'
}
page = requests.get(url, headers=headers, cookies=cookies)
  • 注意:Cookie可能会过期,需要定期更新。

4. 目标标签位于iframe中

如果目标标签嵌套在页面的iframe里,BeautifulSoup直接解析主页面的HTML是找不到的,因为iframe的内容是单独的页面。

解决办法:

  • 先解析主页面,找到iframe的src属性值,再请求iframe页面解析:
import requests
from bs4 import BeautifulSoup

url = '你的目标URL'
headers = {'User-Agent': '你的浏览器UA'}
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.text, 'lxml')

# 查找iframe的src
iframe_tag = soup.find('iframe')
if iframe_tag:
    iframe_src = iframe_tag['src']
    # 处理相对路径,拼接完整URL
    if not iframe_src.startswith('http'):
        iframe_src = 'https://dzen.ru' + iframe_src
    # 请求iframe页面
    iframe_page = requests.get(iframe_src, headers=headers)
    iframe_soup = BeautifulSoup(iframe_page.text, 'lxml')
    print(iframe_soup.find_all('h1'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:25:25