《错误集锦》:爬虫时遇到status_code为 412,怎么办

爬虫时遇到status_code为 412,怎么办

错误是什么:

HTTP 412错误,(Precondition failed),是HTTP协议状态码的一种,表示“未满足前提条件”。如果服务器没有满足请求者在请求中设置的其中一个前提条件时就会返回此错误代码。

412错误一般是由于要查看的网页设置了先决条件,一般是网页中有一个或多个请求标题字段中具有先决条件,这些字段经服务器测试后被认为是”FALSE”。客户端为当前资源的meta信息(头文件字段数据)设置了先决条件,以便防止请求的方法被用于指定资源外的其他资源,因此该请求无法完成而出现的错误。


412错误怎么解决:

一、尝试一:添加headers
判断出问题出在请求头上以后,下面我们尝试把网页的所有请求头都带上,注意:这里带的是全部字段,尤其是cookie字段。

添加cookie有2种方式:

    1. 添加在headers里
      在这里插入图片描述
  • 2.分开并单独添加cookie和headers
    在这里插入图片描述

这里我用的是第1种方法,感觉更方便一点,可以成功获得返回的200状态码。但现在有了新的问题:

这种方式请求只可以持续1-2分钟会返回200,然后又接着返回412,看来cookie的时效比较短,需要频繁更换。这里我又继续尝试了以下2种方法:

二、尝试二:使用selenium模拟
关于selenium的使用方法这里不详细介绍,模拟的时候碰到一个问题,因为我的页面是重定向跳转的,这里并没有成功打开,需要在driver里加一些选项,下面的这些选项可以应对大部分的网址:

def getDriver():
    options = webdriver.ChromeOptions()
    options.add_argument("--disable-extensions")
    options.add_argument("--disable-gpu")
    #options.add_argument("--no-sandbox") # linux only
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option("useAutomationExtension", False)
    driver = webdriver.Chrome(options=options)
    driver.execute_cdp_cmd("Network.enable", {})
    driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": {"User-Agent": "browserClientA"}})
    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": """
            Object.defineProperty(navigator, 'webdriver', {
                get: () => undefined
            })
        """
    })
    return driver

driver = getDriver()

然后就可以成功打开页面并获取页面内容了。
三、未尝试:结合使用selenium和requests
使用selenium模拟获取cookie保存为本地文件并不断更新,使用requests库爬取,调用本地cookie文件。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在编译x264,常常会遇到各种错误。下面是一些常见的错误及其解决方法: 1. 错误:error C2143: syntax error : missing ';' before 'type' 这个错误通常是由于缺少头文件引起的。可以尝试在源文件中添加以下头文件: ``` #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <stddef.h> #include <string.h> #include <assert.h> ``` 2. 错误:error C2065: 'AV_CODEC_FLAG_GLOBAL_HEADER' : undeclared identifier 这个错误通常是由于缺少FFmpeg库引起的。可以尝试在项目属性中添加FFmpeg库的路径。 3. 错误:error C2061: syntax error : identifier 'x264_t' 这个错误通常是由于缺少头文件引起的。可以尝试在源文件中添加以下头文件: ``` #include "x264.h" ``` 4. 错误:error C1083: Cannot open include file: 'stdint.h': No such file or directory 这个错误通常是由于缺少标准C库头文件引起的。可以尝试在源文件中添加以下头文件: ``` #include <stdint.h> ``` 5. 错误:error LNK2019: unresolved external symbol _x264_param_default referenced in function _main 这个错误通常是由于缺少x264库引起的。可以尝试在项目属性中添加x264库的路径。 6. 错误:error C2039: 'b_cabac_init' : is not a member of 'x264_t' 这个错误通常是由于x264库版本不一致引起的。可以尝试升级或降级x264库版本。 7. 错误:error C2275: 'x264_picture_t' : illegal use of this type as an expression 这个错误通常是由于缺少头文件引起的。可以尝试在源文件中添加以下头文件: ``` #include "common/common.h" ``` 这些错误可能只是编译过程中的一小部分,但是通过这些例子,相信读者已经对如何解决编译x264遇到错误有了一定的了解。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值