Scrapy爬取温度返回\xa0而非6°C 编码问题如何解决
问题结论
这不是编码问题:你拿到的\xa0是HTML中 (不间断空格)解析后的标准Unicode字符,出现该问题的核心原因是目标站点的温度数据由JavaScript动态渲染生成,Scrapy默认仅请求静态HTML源码,此时你定位的td#mi1元素只有占位空格,还未被JS填充温度数值。
解决方案
方案1:直接抓后端数据接口(最高效)
打开浏览器开发者工具的「网络」面板,筛选「XHR/ Fetch」请求,刷新页面后找到返回温度数据的后端接口,直接请求该接口获取结构化JSON数据,无需解析前端页面。
方案2:对接无头浏览器渲染JS
推荐使用scrapy-playwright对接无头浏览器加载渲染页面,配置步骤如下:
- 安装依赖
pip install scrapy-playwright playwright install
- 在
settings.py中添加下载器配置
DOWNLOAD_HANDLERS = { "http": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler", "https": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler", } # 配置无头模式启动 PLAYWRIGHT_LAUNCH_OPTIONS = {"headless": True}
- 发起请求时添加meta参数触发渲染
yield scrapy.Request( url="你的目标页面地址", meta={"playwright": True} )
渲染完成后的response中即可通过你原有XPath//td[@id="mi1"]/text()提取到正确的温度数值。
可选编码配置(非当前问题核心,可用于避免后续乱码)
如果后续出现其他字符乱码问题,可在settings.py中添加全局编码配置:
FEED_EXPORT_ENCODING = 'utf-8'
内容的提问来源于stack exchange,提问作者Harsh Rao
相关产品推荐
相关产品推荐

