吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6388|回复: 30
收起左侧

[已解决] 【pixivic.com】爬虫请求403如何解决

 关闭 [复制链接]
Zeaf 发表于 2020-6-11 23:20
本帖最后由 Zeaf 于 2020-6-12 11:01 编辑

原网址:https://pixivic.com/illusts/82140995?VNK=418eebdd(实际上VNK可不要,会自动生成)
找到第一张图的真实地址(即点击进入后图片的地址):https://original.img.cheerfun.dev/img-original/img/2020/06/07/00/00/13/82140995_p0.jpg(浏览器直接访问403)
通过网站访问可以获得,为什么直接访问不可?
相关信息如图(注意,之后进入会显示304什么的,各位自己看看)
我的代码(注意看下面那个user,我带了referer!!!):
[Python] 纯文本查看 复制代码
import requests  # 导入requests库
import re  # 导入正则表达式库
import os # 保存文件

os.system('title pixiv图片爬取@Zeaf')#设置窗口标题
if not os.path.exists('pixivimg'):  # 判断文件夹是否存在,如果不存在:
    os.mkdir('pixivimg')  # 创建一个文件夹
#artistid = input('请输入画师id:')
#VNK = input('请输入VNK:')
user = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36',
}


url='https://api.pixivic.com/ranks?page=1&date=2020-06-08&mode=day&pageSize=30'
response = requests.get(url,headers=user)#模拟访问
response.encoding = response.apparent_encoding#防止乱码
html = response.text  # 用文本显示访问网页得到的内容            
urls = re.findall('"original":"([url=https://i.pximg.net/img-original/img/..../../../../../../]https://i.pximg.net/img-original/img/..../../../../../../[/url][0-9]*?_p0.*?g")', html)  # 用正则表达式获得本页各网址
names = re.findall('"artistId":.*?,"title":"(.*?)","type"', html)
ids = re.findall('"original":"https://i.pximg.net/img-original/img/..../../../../../../([0-9]*?)_p0.*?g"', html)

url=urls[0]#这里获取到的url实际上就是下图的url,即是原图的真实地址
name=names[0]
id=ids[0]
user = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362',
    'Referer': 'https://pixivic.com/illusts/'+id+'?VNK=418eebdd',
    'Accept': 'image/png, image/svg+xml, image/*; q=0.8, */*; q=0.5',
    'Host': 'original.img.cheerfun.dev',
    'Cache-Control': 'max-age=0',
    'Accept-Encoding': 'gzip, deflate, br',
    'Connection': 'Keep-Alive',
    'Accept-Language': 'zh-CN'
}

response = requests.get(url,headers=user)#模拟访问
print(response.status_code)  
with open('pixivimg'+ '/' + name+'.jpg', 'wb') as f: 
    f.write(response.content) 


经过抓包分析,发现直接爬取的批量url不能直接用,前缀有问题,得换个前缀。。。那个i.pximg开头的网址有问题,根本无法访问(304)
简而言之:我通过爬取首页获得到的网址是https://i.pximg.net/img-original/img/...这种形式,但实际上我需要的是如下图的那种行使,即https://original.img.cheerfun.dev/img-original/img/...,网站偷换前缀我没发现。。。
一般而言,403都是由于没加referer,大家注意(当然,cookie等问题也有哦~主要是自己分析请求头看看需要什么)
以下为修复后的完整代码
[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-
"""
Created on Thu Jun 11 19:23:48 2020

@author: Zeaf
"""

import requests  # 导入requests库
import re  # 导入正则表达式库
import os # 保存文件
import threading    #导入多线程库

os.system('title pixiv图片爬取@Zeaf')#设置窗口标题
if not os.path.exists('pixivimg'):  # 判断文件夹是否存在,如果不存在:
    os.mkdir('pixivimg')  # 创建一个文件夹
#artistid = input('请输入画师id:')
#VNK = input('请输入VNK:')
user = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36',
}


url='https://api.pixivic.com/ranks?page=1&date=2020-06-08&mode=day&pageSize=30'
response = requests.get(url,headers=user)#模拟访问
response.encoding = response.apparent_encoding#防止乱码
html = response.text  # 用文本显示访问网页得到的内容            
urls = re.findall('"original":"https://i.pximg.net/img-original/img/(..../../../../../../[0-9]*?_p0.*?g)"', html)  # 用正则表达式获得本页各网址
names = re.findall('"artistId":.*?,"title":"(.*?)","type"', html)
ids = re.findall('"original":"https://i.pximg.net/img-original/img/..../../../../../../([0-9]*?)_p0.*?g"', html)

for name,url,id in zip(names,urls,ids):
    user = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362',
    'Referer': 'https://pixivic.com/illusts/'+id+'?VNK=418eebdd',
    'Accept': 'image/png, image/svg+xml, image/*; q=0.8, */*; q=0.5',
    'Host': 'original.img.cheerfun.dev',
    'Cache-Control': 'max-age=0',
    'Accept-Encoding': 'gzip, deflate, br',
    'Connection': 'Keep-Alive',
    'Accept-Language': 'zh-CN'
}
    url = 'https://original.img.cheerfun.dev/img-original/img/'+url
    try:
        name = name.replace('\\','_')
    except:
        name = name
    response = requests.get(url,headers=user)#模拟访问
    print(response.status_code)
    with open('pixivimg'+ '/' + name+'.jpg', 'wb') as f: 
        f.write(response.content)   
test.png

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Zeaf 发表于 2020-6-12 00:19
在线小学生 发表于 2020-6-12 00:17
还有,我试了你的url,咱俩的url不一样,但是请求到的是同一张图片.但是我的那个url速度比你的快.
你的应该 ...

你得看我下面那个url。。。
我就是你这样找的。。
第一个url我是用来获取所有图片的进入链接的

你那个url画质好像不对啊
我是要原画质,需要点击进去后再去看地址
你可以看我帖子里的那张图,就是我找到的
xiao智可以不帅 发表于 2020-6-11 23:27
yyebuxiu 发表于 2020-6-11 23:44
涛之雨 发表于 2020-6-11 23:45
请求过快吧。。。
用fakeua库或是搞个{ip带礼},
应该是请求过于频繁吧,你连续按f5刷新也会被拒绝
yyebuxiu 发表于 2020-6-11 23:47
yyebuxiu 发表于 2020-6-11 23:44
带上referer访问图片

呃 无视我 刚刚没看代码 我手动测试可以来着
 楼主| Zeaf 发表于 2020-6-11 23:48
涛之雨 发表于 2020-6-11 23:45
请求过快吧。。。
用fakeua库或是搞个{ip带礼},
应该是请求过于频繁吧,你连续按f5刷新也会被拒绝

我直接访问都不行啊,我代码又没有循环,哪来的访问过快
 楼主| Zeaf 发表于 2020-6-11 23:48
yyebuxiu 发表于 2020-6-11 23:47
呃 无视我 刚刚没看代码 我手动测试可以来着

手动测试可以 直接打开???(建议刷新一下)
是我网络问题吗
在线小学生 发表于 2020-6-11 23:57
一般图片网站,都会需要携带"Referer",来防止别的网站进行外链.
"Referer" 表示请求是从哪个url跳转过来的.
[Python] 纯文本查看 复制代码
import requests

url = "https://img.cheerfun.dev:233/c/540x540_70/img-master/img/2020/06/07/00/00/13/82140995_p0_master1200.jpg"
payload = {}
headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
  'Referer': 'https://pixivic.com/illusts/82140995?VNK=418eebdd'
}
response = requests.request("GET", url, headers=headers, data = payload)
name = '123'
print(response.status_code)
with open('pixivimg' + '/' + name + '.jpg', 'wb') as f:
    f.write(response.content)

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Zeaf + 1 + 1 我很赞同!

查看全部评分

熊仔007 发表于 2020-6-11 23:59
403一般是请求头的问题
 楼主| Zeaf 发表于 2020-6-11 23:59
在线小学生 发表于 2020-6-11 23:57
一般图片网站,都会需要携带"Referer",来防止别的网站进行外链.
"Referer" 表示请求是从哪个url跳转过来的. ...

我带了~~~
你这个能成功?我觉得我的referer和你一样啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 15:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表