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

使用BeautifulSoup爬取网页异常:返回大量随机字符串而非预期HTML

解决BeautifulSoup返回内容与浏览器不符的问题

你遇到的情况是网站反爬机制导致的:requests 默认发送的请求头带有明显爬虫标识(比如User-Agent: python-requests/xxx),网站会返回混淆后的内容或验证页面,而非真实的页面HTML。另外,该网站内容大概率通过JavaScript动态渲染,requests 只能获取初始静态HTML,无法执行JS加载后续内容。

下面是具体解决步骤:

1. 先尝试添加浏览器请求头伪装

给requests.get添加模拟浏览器的请求头,核心是设置User-Agent:

import requests
from bs4 import BeautifulSoup

URL = "https://www.mediaexpert.pl/"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

response = requests.get(URL, headers=headers).text
soup = BeautifulSoup(response, "html.parser")

print(soup.prettify())

如果添加后仍得到混淆内容,说明网站有更严格的反爬(比如Cloudflare验证),需要用能执行JavaScript的工具。

2. 使用Selenium模拟浏览器渲染

Selenium可以模拟真实浏览器行为,执行JS并获取渲染后的完整HTML:
先安装依赖:

pip install selenium

下载对应浏览器的驱动(比如Chrome的chromedriver,需与浏览器版本匹配),再编写代码:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup

URL = "https://www.mediaexpert.pl/"

# 配置Chrome选项,模拟正常浏览器
chrome_options = Options()
chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
chrome_options.add_argument("--headless=new")  # 无头模式,不显示浏览器窗口

driver = webdriver.Chrome(options=chrome_options)
driver.get(URL)

# 获取渲染后的HTML
page_source = driver.page_source
soup = BeautifulSoup(page_source, "html.parser")

print(soup.prettify())

driver.quit()

如果遇到Cloudflare人机验证,可使用undetected-chromedriver替代标准chromedriver,它专门用于绕过这类验证:

pip install undetected-chromedriver

代码示例:

import undetected_chromedriver as uc
from bs4 import BeautifulSoup

URL = "https://www.mediaexpert.pl/"

driver = uc.Chrome()
driver.get(URL)

page_source = driver.page_source
soup = BeautifulSoup(page_source, "html.parser")

print(soup.prettify())

driver.quit()

注意事项

  • 爬取前务必查看网站的robots.txt文件(https://www.mediaexpert.pl/robots.txt),确认允许爬取的内容,遵守网站规则。
  • 不要频繁发送请求,避免给服务器造成压力,建议添加请求间隔(比如time.sleep(2))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:25:38