当前位置: 首页 > 知识库问答 >
问题:

python - 爬取apkpure网站,headers已经完全照搬浏览器数据requests发起请求为啥还是返回403?

禄豪
2023-07-01

代码如下,有无大佬解答 orz

import requests

url = 'https://d.apkpure.com/b/APK/tv.danmaku.bilibilihd?version=latest'
# url = 'https://apkpure.com/cn/bi-li-bi-li-hd/tv.danmaku.bilibilihd/download'
headers = {
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Mobile Safari/537.36',
    'Referer': 'https://apkpure.com/cn/bi-li-bi-li-hd/tv.danmaku.bilibilihd/download',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Cache-Control': 'max-age=0',
    'Connection': 'keep-alive',
    'Cookie': '_apk_uid=33BXPQ2B2D4dwk21M25xf5cBNyZmNZEb; apkpure__lang=cn; apkpure__country=SG; __gsas=ID=673f0f7a0a46f976:T=1682566363:S=ALNI_MaMd8xd1x6YMPK5-rwWI5cK-NBr8g; _qimei=attar72DjXiABtN49PwA89dnMC0Mm952; g_state={"i_p":1683345673685,"i_l":1}; apkpure__policy_review=20180525; recommend_id=; apkpure__sample=0.8095019481907848; _dt_sample=0.3399179836773658; _dt_referrer_fix=0.793447613425174; _tag_sample=0.9914902904015179; _home_article_entry_sample=0.3423054671955059; _related_recommend=0.7101508526816152; _download_detail_sample=0.1538198911838038; _f_sp=993198767; _gid=GA1.2.1389546599.1688103882; download_id=1086909951247822; m1=19539; m2=fdf23cba2c548d13a95bc4edd58f669c; apkpure__next=/cn/bi-li-bi-li-hd/tv.danmaku.bilibilihd/download; _usi=s:dd50b518b9000f69890b75e64f334863285493385f65340fb873b24922151af0.rjLEMaPiYFEdP54GVVtrXHzlxwG9uExUPxvMtBmjDh0; _user_tag=j:{"language":"cn","source_language":"zh-CN","country":"SG"}; __gpi=UID=00000be5e508338b:T=1682566355:RT=1688113399:S=ALNI_MZngMPfqB_NNxJHA02IooXEANtiYw; __gads=ID=ea35821c8c3a777a-22cec57fb5df0018:T=1682566355:RT=1688113399:S=ALNI_MbpNpIXZxmiNm7rAEaUjiI4ZV0HTw; translate-token=MTY4ODExMzQ3MjMxOQ==; FCNEC=[["AKsRol_AzE7pwI8N-CyJIojidVZomCi52Mou9SjVdhwFSzJxOmOGA2c9ayhF0z6XU9T8PpIp7khxOsFKiW3NcLztwBPwGK2ILwDWxQxJalAdGzEUJPXJS9TTaxJoRhh7xfztwGgw03SAR2ZEnnYuzqU32jipA4UlvA=="],null,[]]; _ga=GA1.2.1726778835.1682566355; _apk_sid=1.1.1688113397076.30.6.1688113488603.-480; _client_id=GA1.2.1726778835.1682566355; _ga_NT1VQC8HKJ=GS1.1.1688113399.31.1.1688113519.11.0.0',
    'Host': 'd.apkpure.com',
    'sec-ch-ua': '".Not/A)Brand";v="99", "Google Chrome";v="103", "Chromium";v="103"',
    'sec-ch-ua-mobile': '?1',
    'sec-ch-ua-platform': '"Android"',
    'Sec-Fetch-Dest': 'document',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-Site': 'same-site',
    'Upgrade-Insecure-Request': '1'
}

response = requests.get(url=url, headers=headers)
print(response.status_code)

共有1个答案

任元青
2023-07-01

先分享一共有意思的细节,在解答这个问题之前,习惯性的准备看看熟悉的apkpure官网最底部(本意目的是想看看网站的法律协议对于爬取规则是否有界定,比如说认为获取为非法行为),结果发现这个网站已经被和谐了。搜索结果也无法找到。这里分享两个搜索的截图。
图片.png
图片.png

因此,这是第一个可能存在的问题,第二个可能的问题我想可能是触发了反爬机制,比如说请求的次数多,请求的头部信息中包含的浏览器数据内容多,都可能是触发拦截。
所以爬虫上可以做一点改进:

import requests
import time
import random

url = 'https://d.apkpure.com/b/APK/tv.danmaku.bilibilihd?version=latest'
headers = {
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Mobile Safari/537.36',
    'Referer': 'https://apkpure.com/cn/bi-li-bi-li-hd/tv.danmaku.bilibilihd/download',
}

session = requests.Session()
session.headers.update(headers)

try:
    response = session.get(url)
    response.raise_for_status()
    print(response.status_code)
except requests.exceptions.RequestException as e:
    print("请求发生异常:", e)

# 添加随机延迟
time.sleep(random.uniform(0.5, 1))

解释一下,这段代码是在你的代码基础上修改的,其实是做的简化删减,只保留必要的User-Agent,简化了一部分header,同时在末尾的地方,加了 一个0.5秒到1秒的随机延迟,这一点其实不应该陌生,网站的反爬机制一般对于固定时间请求获取的都会有怀疑和拦截,这么做可以一定程度的绕过,当然,可以将时间范围调整更宽,频率更低。
最后一点,建议是在代理环境使用吧,如果你在当前环境使用,被ban掉访问的可能性很大。

 类似资料:
  • 本文向大家介绍使用Python爬虫库requests发送请求、传递URL参数、定制headers,包括了使用Python爬虫库requests发送请求、传递URL参数、定制headers的使用技巧和注意事项,需要的朋友参考一下 首先我们先引入requests模块 一、发送请求 二、传递URL参数 URL传递参数的形式为:httpbin.org/get?key=val。但是手动的构造很麻烦,这是可以

  • 我正在尝试使用以下凭据登录此网站(不用担心,它是匿名的): 用户='MattieBailey@mailinator.com'密码='thx9jD3SkrssPKY' 当我手动登录时,我看到Chrome inspector视图中有一个POST请求和一个GET请求。 然而,当我试图用python模拟这些请求时,我得到了400个POST请求的坏请求。GET请求返回200-OK,并向我发送登录网页的内容。

  • 最近试着爬一个网站,只要一对这个网站用request请求,网站立马封ip,这是怎么回事,是网站太严了还是代码的问题,代码如下,新手爬虫

  • 问题内容: 我正在使用$ .ajax发出ajax请求。响应具有标题集(我已经在Chrome开发工具中对此进行了验证)。但是,浏览器在收到响应后 不会 设置cookie!当我导航到域中的另一个页面时,不会发送cookie。(注意:我没有执行任何跨域ajax请求;该请求与文档位于同一域中。) 我想念什么? 编辑 :这是我的ajax请求的代码: 这是请求,如Chrome开发者工具所示: 响应: 问题答案

  • 本文向大家介绍基于Python模拟浏览器发送http请求,包括了基于Python模拟浏览器发送http请求的使用技巧和注意事项,需要的朋友参考一下 1.使用 urllib2 实现 2.使用 requests 模块 (1).get请求 (2).post请求 (3).使用session对象的写法 3.其他的一些请求方式 >>> r = requests.put("http://httpbin.org/

  • 本文向大家介绍python-requests POST请求,包括了python-requests POST请求的使用技巧和注意事项,需要的朋友参考一下 示例 POST请求是使用方法发出的。request.post() 如果您需要发送Web表单请求作为POST正文,请传入以键值对作为data参数的字典;requests会将它们编码为application/x-www-form-urlencoded模