Scrapy抓取接口中文数据显示问号问题

article/2025/9/21 8:39:08

scrapy.FormRequest抓取接口数据中文显示问号

  • 问题表象
  • 原因分析
  • 处理办法

问题表象

近期在抓取数据的时候,数据是用Js通过接口加载的,需要POST form-data数据过去抓取。

yield scrapy.FormRequest(url=url, method='POST',headers=self.headers, formdata=self.data,callback=self.parse,dont_filter=True, errback=self.errback)

这时候返回来的数据是,中文都是问号:在这里插入图片描述

原因分析

数据已经返回了,为啥中文是问号呢,还不是那种编码乱码,是问号,然后我就看到response回来的header里边是这样的数据:
在这里插入图片描述
Content-Type是’text/html; charset=utf-8’,而我自己写的抓取程序里的header是这样写的

    headers = {          'Cookie': 'JSESSIONID=2A152F94CADDCBD472F8F4B4BFC235D0; Hm_lvt_c08a19591b74fa5d84b25c45965983f9=1605776233; ''Hm_lpvt_c08a19591b74fa5d84b25c45965983f9=1605776239','Host': 'xxx.sss.com','Content-Type': 'application/x-www-form-urlencoded; charset=utf-8','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',"Accept-Language": 'zh-CN,zh;q=0.9'}

这时候回来的就是中文就是问号,然后我又看浏览器的Content-Type,是这样的,得到的数据就是正常的。
在这里插入图片描述
问题原因应该是Content_Type的问题,改成程序返回的类型。

处理办法

抓取程序的Header改成如下:

    headers = {'Accept': 'application/json, text/javascript, */*; q=0.01','Cookie': 'JSESSIONID=2A152F94CADDCBD472F8F4B4BFC235D0; Hm_lvt_c08a19591b74fa5d84b25c45965983f9=1605776233; ''Hm_lpvt_c08a19591b74fa5d84b25c45965983f9=1605776239','Host': 'xxx.sss.com','Content-Type': 'application/x-www-form-urlencoded; charset=utf-8','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',"Accept-Language": 'zh-CN,zh;q=0.9'}

增加’Accept’: 'application/json, text/javascript, /; q=0.01’问题就解决了。Header中Accept的介绍如下:

Accept
作用: 浏览器端可以接受的媒体类型,
例如: Accept: text/html 代表浏览器可以接受服务器回发的类型为 text/html 也就是我们常说的html文档,
如果服务器无法返回text/html类型的数据,服务器应该返回一个406错误(non acceptable)
通配符 * 代表任意类型
例如 Accept: / 代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)

以上记录在抓取过程中遇到的一个问题,希望能帮到遇到同样问题的人,欢迎指正。

PS:第一次用Markdown编写博客,排版还有点不适应。


http://chatgpt.dhexx.cn/article/kVtcnZjh.shtml

相关文章

centos 安装java11

直接执行 yum list|grep java-11输出结果如下 java-11-openjdk.i686 1:11.0.16.0.8-1.el7_9 updates java-11-openjdk.x86_64 1:11.0.16.0.8-1.el7_9 updates java-11-openjdk-demo.i686 1:11.0.1…

Java-1.11

题目描述: 编写程序,显示未来五年每年的人口数。假设当前的人口数是312032486人,每年365天。每7秒有1人出生,每13秒有1人死亡,每45秒有人迁入。 代码: public class Population {public static void main…

Java11新特性(一)——JDK11新特性概述

序言 关于JDK11,自从去年也就是2018年9月份 Oracle 对外公布——JDK11正式发布以来,博主就跃跃欲试,但是由于项目周期时间紧,一直未果,今年,也就是2019年2月底系统正式上线,博主除了远程技术支持…

1-10java

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1-7天前言一.配置环境二.基本语法三.作业小结 1-7天 前言 为了复习java基础知识 一.配置环境 一般用java8二.基本语法 .2.1 加、减、乘、除、整除、取余.2.2 熟悉…

当老板让我从 Java8 升到 Java11

老板让我把一个项目从 Java 8 迁移到 Java 11,我该怎么办呢? 最简单的办法,当然是直接强行升级,遇到一个错就改一个错,别看它 low,但是对于一个小型且非核心的项目来说,已经足够了。 当然&…

java11初体验,8 个逆天新特性教你写出更牛逼的代码!

美国时间 09 月 25 日,Oralce 正式发布了 Java 11,这是据 Java 8 以后支持的首个长期版本。 为什么说是长期版本,看下面的官方发布的支持路线图表。 可以看出 Java 8 扩展支持到 2025 年,而 Java 11 扩展支持到 2026 年。 现在大…

一、Java11安装

一、安装 Java11 window64版本傻瓜式安装即可 二、环境变量 1. JAVA_HOME 变量名:JAVA_HOME 变量值:电脑上JDK安装的绝对路径 : C:\Program Files\Java\jdk-11.0.122. 新建/修改 CLASSPATH 变量 变量名:CLASSPATH 变量值&…

Linux下安装java11(亲测)

1.首先下载java11 yum search java-11-openjdk1.1 选择相应版本(本人是x86_64) (ps:如果不知道选择哪个版本可以输入 arch 或者 uname -a 命令查看系统版本信息) 1.2 进行下载 yum install java-11-openjdk.x86_64 -y2.查看ja…

JAVA 11.11

JAVA第二天 1.1java中的数据类型(b) java中的数据类型: 基本数据类型 和 对象类型java是一种强语言,严格遵循类型匹配原则。也就是说 我们存储数据的时候 什么样的数据就必须使用什么样的类型去接收。 ​ 对象类型: 无数种 基本数据类…

怎么从 Java8 升到 Java11?

把一个项目从 Java 8 迁移到 Java 11,我该怎么办呢? 最简单的办法,当然是直接强行升级,遇到一个错就改一个错,别看它 low,但是对于一个小型且非核心的项目来说,已经足够了。 当然,…

Java 11~~20

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言Day11——顺序表(一)顺序表是什么?Java复习:重写与重载1.重写(Override)2.重载(Overloading&#xf…

官网下载JAVA的JDK11版本(下载、安装、配置环境变量)

目录 前言必读: 一、下载JDK11 1.先去浏览器搜索 2.选择Products 3.Java 4.往下滑找到Oracle JDK,然后点击 5.往下滑找到Java11,再选择自己的操作系统 6.选择exe这个直接安装的后缀 7.跳出来的弹窗勾选,并点击 8.弹出来一个甲骨文…

Java11安装与配置环境变量保姆级教程

话不多说,我们以java11为例在windows10_X64系统中进行安装 java11下载地址: 链接:https://pan.quark.cn/s/fdf31b287749 提取码:2NNy 安装Java 直接下一步装就完事了 关闭 配置环境变量 找到jdk文件的路径;如图将路…

Java JDK11的下载与安装

前言 本篇文章是基于win10系统下载安装JDK11的教程。 1.下载Oracle JDK 进入Oracle 官网:https://www.oracle.com/java/technologies/downloads/#java11 选择Java11→Winodws→ .exe版本下载 点击下载之后,可能会出现登录界面,输入Oracle…

运用netty框架实现自定义协议并运用于简易聊天

1.什么是netty Netty 是由 JBOSS 提供的一个 Java 开源框架。Netty 提供异步的、基于事件驱动的网络应用程序框架,用以快速开发高性能、高可靠性的网络 IO 程序,是目前最流行的 NIO 框架,Netty 在互联网领域、大数据分布式计算领域、游戏行业、通信行业等…

netty框架的学习

netty框架的学习 1.netty环境的搭建2.netty的特点2.1什么是netty2.2为什么要使用netty3.netty框架的搭建3.1创建一个maven项目3.2导入依赖3.3搭建框架 之前几天的话开始稍微熟悉了一点maven和Springboot框架,从今天开始要正式的开始学习netty框架了。 1.netty环境的…

Netty框架之责任链模式及其应用

Netty框架之概述及基本组件介绍 Reactor网络编程模型解析 前言 在上篇博客介绍完netty框架的基本组件介绍和概述,也跟着代码看了下NioEventLoopGroup的启动过程,以及基于Reactor线程模型的解析,它是开发Netty的核心思想,也是整…

【初识Netty使用Netty实现简单的客户端与服务端的通信操作Netty框架中一些重要的类以及方法的解析】

一.Netty是什么? Netty 由 Trustin Lee(韩国,Line 公司)2004 年开发 本质:网络应用程序框架 实现:异步、事件驱动 特性:高性能、可维护、快速开发 用途:开发服务器和客户端 Netty的性能很高&#xff0…

Netty框架实现TCP/IP通信

项目中需要使用到TCP/IP协议完成数据的发送与接收。如果只是用以前写的简单的socket套接字方法,每次接收发送消息都会创建新的socket再关闭socket,造成资源浪费。于是使用netty框架完成java网络通信。 Netty框架的内容很多,这里只是代码…