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

使用Python Requests和BeautifulSoup爬取网页文本失败的求助

解决JavaScript渲染页面的文本提取问题

你的当前代码依赖requests获取静态HTML,但很多招聘网站会用JavaScript动态生成内容,这类内容无法通过直接请求HTML获取,需要模拟浏览器执行JS后再提取文本。以下是两种可行的改进方案:

方案一:使用Selenium模拟浏览器

Selenium可以控制真实浏览器加载页面,等待JS执行完成后再提取内容。

  1. 先安装依赖:
pip install selenium

同时需要下载对应浏览器的驱动(比如ChromeDriver,要和你的Chrome版本匹配),并确保驱动路径能被Python找到。

  1. 改写后的代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup

def getTextFromWeb(url):
    # 初始化Chrome浏览器
    driver = webdriver.Chrome()
    try:
        driver.get(url)
        # 等待页面主体加载完成,可根据目标网站调整等待条件
        WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.TAG_NAME, "body"))
        )
        # 获取JS渲染后的页面源码
        page_source = driver.page_source
        soup = BeautifulSoup(page_source, "html.parser")
        
        # 过滤脚本、样式等无关标签的文本
        for script in soup(["script", "style", "noscript"]):
            script.extract()
        
        # 提取有效文本并过滤空行
        text = '\n'.join([line.strip() for line in soup.stripped_strings if line.strip()])
        return text
    finally:
        # 确保浏览器关闭
        driver.quit()

方案二:使用Playwright(更简洁的自动化工具)

Playwright是微软推出的自动化工具,自带浏览器驱动管理,使用更简便。

  1. 安装依赖:
pip install playwright
playwright install  # 自动下载适配的浏览器驱动
  1. 改写后的代码:
from playwright.sync_api import sync_playwright
from bs4 import BeautifulSoup

def getTextFromWeb(url):
    with sync_playwright() as p:
        # 启动无头模式浏览器(不显示界面),需可视化可去掉headless=True
        browser = p.chromium.launch(headless=True)
        page = browser.new_page()
        # 等待DOM加载完成后再获取内容
        page.goto(url, wait_until="domcontentloaded")
        
        # 获取渲染后的页面源码
        page_source = page.content()
        soup = BeautifulSoup(page_source, "html.parser")
        
        # 过滤无关标签
        for tag in soup(["script", "style", "noscript"]):
            tag.extract()
        
        # 提取并整理文本
        text = '\n'.join([line.strip() for line in soup.stripped_strings if line.strip()])
        
        browser.close()
        return text

额外优化建议

  • 针对招聘网站,可直接定位到招聘内容所在的特定标签(比如带job-description类名的div),提取该标签下的文本,减少冗余内容。
  • 添加异常处理逻辑,比如页面加载超时、网络错误等情况,提升程序健壮性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:01:17