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

VB.Net使用WebRequest抓取亚马逊页面间歇性乱码问题求解

问题根源

  • 没有处理HTTP响应的压缩内容:亚马逊服务端默认会对请求返回gzip/deflate格式的压缩数据流,你现有代码直接将压缩后的二进制数据按UTF-8文本读取,自然会出现乱码。
  • 未设置正常的请求头标识:你的WebRequest没有携带User-Agent等浏览器标准请求头,触发了亚马逊的反爬策略,首次请求会被返回特殊处理的拦截响应(内容异常、移除HEAD标签都属于反爬拦截的特征),短时间内第二次刷新时请求命中了节点临时缓存,才会返回正常内容。
  • 硬编码了文本编码为UTF-8,没有从响应头读取实际返回的编码格式,也存在小概率编码不匹配的问题。

修复后的代码

直接替换你test.aspx的内容即可:

<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Text" %>

<script language="VB" runat="server">
Sub Page_Load(Sender as Object, E as EventArgs)
    ' 统一设置当前页面输出的编码
    Response.ContentType = "text/html; charset=utf-8"
    Dim q As String 
    Randomize
    q= (Rnd).ToString()
    ' 声明HttpWebRequest方便设置专属属性
    Dim oRequest As HttpWebRequest = CType(WebRequest.Create("https://www.amazon.com/dp/0132350882/?" & q), HttpWebRequest)
    ' 开启自动解压缩,自动处理gzip/deflate格式的响应
    oRequest.AutomaticDecompression = DecompressionMethods.GZip Or DecompressionMethods.Deflate
    ' 设置正常的Chrome浏览器UA,绕过基础反爬校验
    oRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
    ' 补充其他标准请求头,进一步模拟真实浏览器行为
    oRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"
    oRequest.Headers.Add("Accept-Language", "en-US,en;q=0.5")
    
    Dim oResponse As HttpWebResponse = CType(oRequest.GetResponse(), HttpWebResponse)
    Dim oStream As Stream = oResponse.GetResponseStream()
    ' 优先从响应头取实际编码,无有效编码时用UTF-8兜底
    Dim responseEncoding As Encoding = Encoding.UTF8
    If Not String.IsNullOrEmpty(oResponse.CharacterSet) Then
        Try
            responseEncoding = Encoding.GetEncoding(oResponse.CharacterSet)
        Catch
        End Try
    End If
    Dim oStreamReader As New StreamReader(oStream, responseEncoding)
    Response.Write(oStreamReader.ReadToEnd())
    oStreamReader.Close()
    oResponse.Close()
End Sub
</script>

额外说明

  1. 你之前尝试在外层套HTML壳加meta编码标签的方案无法解决问题:首先乱码的根源是服务端返回的压缩流未被解压,和浏览器端的编码声明无关;其次亚马逊返回的本身就是完整的HTML文档,拼接你自己写的外层HTML会导致页面结构错乱。
  2. 如果你后续需要频繁抓取亚马逊的内容,还需要注意增加请求间隔、使用代理IP池、处理验证码等反爬规避措施,否则即使修改了请求头,还是会被亚马逊的反爬策略拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:48:02