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

Python requests获取的HTML与浏览器不一致,如何获取完全一致的HTML?

解决IMDb搜索页爬取HTML与浏览器不一致的问题

出现这种情况的核心原因是IMDb的反爬机制:默认的requests/urllib请求头会暴露爬虫身份,且部分页面内容是通过JavaScript动态渲染生成的,静态请求无法获取完整内容。以下是针对性的解决方法:

1. 模拟浏览器请求头

服务器会通过请求头识别访问来源,默认requests的User-Agent是python-requests/xxx,很容易被拦截。添加浏览器级别的请求头可以绕过基础反爬:

import requests

base_url = "https://www.imdb.com"
search_url = base_url + "/search/title/?"
params = {
    "title_type": "feature",
    "release_date": "2022-01-01,2022-12-31",
    "start": 1
}

# 模拟Chrome浏览器的请求头,可根据自己浏览器实际请求头调整
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",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Referer": "https://www.imdb.com/"
}

response = requests.get(search_url, params=params, headers=headers)
print(response.text)

2. 处理JavaScript动态渲染内容

如果添加请求头后仍无法获取和浏览器一致的HTML,说明页面核心内容是JS动态加载的,静态HTTP请求无法拿到渲染后的结果。此时需要用浏览器自动化工具模拟真实加载过程:

以Selenium为例(需提前安装selenium库和对应浏览器驱动):

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

base_url = "https://www.imdb.com"
search_url = base_url + "/search/title/?"
params = {
    "title_type": "feature",
    "release_date": "2022-01-01,2022-12-31",
    "start": 1
}

full_url = search_url + "&".join([f"{k}={v}" for k, v in params.items()])

# 配置无头模式(不弹出浏览器窗口),保留浏览器请求特征
chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--disable-gpu")
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")

driver = webdriver.Chrome(options=chrome_options)
driver.get(full_url)
# 等待页面JS加载完成,根据页面复杂度调整等待时间
time.sleep(3)
# 获取完全渲染后的页面源码
page_source = driver.page_source
print(page_source)
driver.quit()

3. 规避反爬封禁

  • 控制请求频率,添加随机延迟(比如time.sleep(random.uniform(1,3))),避免短时间内大量请求。
  • 若频繁被封,可使用代理IP池分散请求来源。
  • 遵守IMDb的robots.txt规则,不要爬取禁止索引的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:42:08