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

如何用Python抓取HTML?请求返回内容与浏览器不一致的解决方法

问题描述

我正在编写Python脚本抓取immobiliare.it房产列表页面的数据,写了如下脚本,但通过requests获取的HTML和浏览器显示的不一致,导致无法解析站点数据,该怎么解决?

import requests
from bs4 import BeautifulSoup
import lxml

url = 'https://www.immobiliare.it/search-list/?idContratto=1&idCategoria=1&criterio=prezzo&ordine=asc&__lang=it&raggio=300&centro=45.185878%2C9.156321&pag=1'

content = requests.get(url)
soup = BeautifulSoup(content.text, "lxml")

print(soup.prettify())

title_element = soup.find("div", class_="in-realEstateListHeader__title")
print(title_element)
解决方法

这种情况大多是网站用JavaScript动态渲染内容,或者你的请求被识别为爬虫触发了反爬机制,以下是几种可行的解决思路:

  • 添加请求头模拟浏览器
    网站会通过请求头判断访问来源,默认requests的请求头没有浏览器标识,容易被拦截。你可以在请求中加入User-Agent、Accept等常见浏览器头:

    import requests
    from bs4 import BeautifulSoup
    import lxml
    
    url = 'https://www.immobiliare.it/search-list/?idContratto=1&idCategoria=1&criterio=prezzo&ordine=asc&__lang=it&raggio=300&centro=45.185878%2C9.156321&pag=1'
    
    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': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Language': 'it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3'
    }
    
    content = requests.get(url, headers=headers)
    soup = BeautifulSoup(content.text, "lxml")
    
    title_element = soup.find("div", class_="in-realEstateListHeader__title")
    print(title_element)
    
  • 用浏览器自动化工具渲染动态内容
    如果页面内容是通过JavaScript加载的,requests只能拿到静态HTML,获取不到渲染后的内容。这时候可以用Selenium或Playwright这类工具:
    以Selenium为例,先安装依赖pip install selenium,再下载对应浏览器的驱动(比如ChromeDriver):

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from bs4 import BeautifulSoup
    
    url = 'https://www.immobiliare.it/search-list/?idContratto=1&idCategoria=1&criterio=prezzo&ordine=asc&__lang=it&raggio=300&centro=45.185878%2C9.156321&pag=1'
    
    # 配置无头模式,不弹出浏览器窗口
    chrome_options = Options()
    chrome_options.add_argument('--headless=new')
    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(url)
    
    # 获取渲染后的页面源码
    page_source = driver.page_source
    soup = BeautifulSoup(page_source, "lxml")
    
    title_element = soup.find("div", class_="in-realEstateListHeader__title")
    print(title_element)
    
    driver.quit()
    
  • 排查反爬限制
    部分网站会设置Cookie验证、IP限制或验证码。你可以先在浏览器里访问页面,复制请求中的Cookie,加到requests的请求参数里;如果遇到IP限制,可使用代理IP池;如果有验证码,可能需要借助打码服务或验证码识别工具。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:52:03