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

如何用Python抓取iframe内数据?Google框架页面爬取求助

嘿,我来帮你搞定这两个Python爬取的问题!

如何用Python抓取iframe内部的数据?

iframe本质就是在当前页面嵌入了另一个独立的网页,核心思路是找到这个嵌入页面的真实地址,再去请求它。分两种情况处理:

静态iframe(src直接可见)

如果iframe的src属性直接写在HTML里,用requests+BeautifulSoup就能轻松搞定:

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin

# 替换成你要爬的原页面URL
original_page_url = "你的原页面地址"

# 第一步:获取原页面HTML,解析出iframe的src
resp = requests.get(original_page_url)
soup = BeautifulSoup(resp.text, "html.parser")

iframe_tag = soup.find("iframe")
if iframe_tag and "src" in iframe_tag.attrs:
    iframe_src = iframe_tag["src"]
    # 处理相对路径的情况,拼接成完整URL
    if not iframe_src.startswith(("http://", "https://")):
        iframe_src = urljoin(original_page_url, iframe_src)
    
    # 第二步:请求iframe对应的页面,拿到内部内容
    iframe_resp = requests.get(iframe_src)
    print("iframe内部内容:\n", iframe_resp.text)
else:
    print("页面里没找到有效的iframe标签哦")

动态加载的iframe(src由JS生成)

如果iframe的src是通过JavaScript动态渲染出来的,静态请求拿不到,这时候就得用无头浏览器模拟真实浏览器加载页面,比如selenium或者playwright。这里给个selenium的例子:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 初始化浏览器(需要提前对应好ChromeDriver版本)
driver = webdriver.Chrome()
driver.get("你的原页面地址")

try:
    # 等待iframe加载完成,切换到iframe上下文
    iframe = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.TAG_NAME, "iframe"))
    )
    driver.switch_to.frame(iframe)
    
    # 现在就能获取iframe内部的所有内容了
    iframe_content = driver.page_source
    print("iframe内部内容:\n", iframe_content)
finally:
    # 记得关闭浏览器
    driver.quit()
抓取jobbnorge.no链接内容遇到Google框架限制的解决方案

你说的“Google框架内”大概率是指页面用了Google的reCAPTCHA反爬验证,或者内容依赖Google的JavaScript渲染,导致静态请求拿不到数据。给你几个可行的方案:

用无头浏览器模拟真实访问

静态请求绕不开JS渲染和验证,用playwright(比selenium更省心,自动管理驱动)模拟浏览器加载,能解决大部分动态内容和基础反爬问题:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # 启动无头浏览器(headless=True就是不显示窗口,改成False可以看到浏览器操作)
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    # 设置真实的User-Agent,避免被识别为爬虫
    page.set_extra_http_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"
    })
    
    try:
        # 等待页面加载完成(networkidle表示网络请求稳定后再继续)
        page.goto("https://www.jobbnorge.no/en/available-jobs/job/148574/project-manager-researcher-translational-nk-cell-biology", wait_until="networkidle")
        
        # 这里可以根据页面结构提取具体内容,比如职位描述
        job_description = page.locator(".job-description").inner_text()
        print("职位描述:\n", job_description)
    except Exception as e:
        print(f"抓取出错啦:{str(e)}")
    finally:
        browser.close()

检查网站是否提供官方API

很多招聘网站会开放API接口,直接调用API获取数据不仅更稳定,还不会触发反爬。你可以去jobbnorge的robots.txt(访问网站根目录下的robots.txt文件)看看有没有API相关的说明,或者找找他们的开发者文档,说不定能直接拿到结构化的数据,比爬页面高效多了。

反爬注意事项

  • 别太频繁请求,每次请求后加个time.sleep(2-3),避免被封IP
  • 如果多次请求被限制,可以试试用代理IP分散请求来源
  • 尽量模拟真实用户的行为,比如随机的点击、滚动(用playwright可以实现),不要一上来就直接爬内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:52:07