首页 > 其他分享 >使用Py的多线程爬取P站,老司机慎入。

使用Py的多线程爬取P站,老司机慎入。

时间:2022-12-28 17:39:59浏览次数:61  
标签:name .. Py VNK 慎入 img https 多线程 response


hello呀,小伙伴们,今个给大家带来的是爬取P站的教程,别搞错,这个不是你想的那个p站。这样想肯定是你用黄黄的思想点进来的。众所周知,P站是个插画网站,也包含一些R18的插画。停停停!!!突然打脸了...

我说的是Pixiv这个网站,哎,真的不一样啊。这是只有插画没有视频的P站哦。搞错的同学可以不要看下去了~仅给有需要它的人观看~

Pixiv,是一个主要由日本艺术家所组成的虚拟社群,主体为由pixiv股份制有限公司所运营的为插画艺术特化的社交网络服务网站。新兴的日本同人画、插画作品分享站点。So,今天我们就拿他开刀了…

老套路,让我们首先输入网址:

​https://pixivic.com/,​

然后可以看到地址栏的网址链接直接变成:

​https://pixivic.com/?VNK=28072886,​

当然有的小伙伴的想法可能是上来就去获取元素标签,然后一通操作猛如虎,结果傻成二百五,碰到这种事,还是需要先看看网站的数据是怎么来的,F12审查元素,然后一直下拉获取数据,可以看出页面的数据是动态加载出来的。如图:

使用Py的多线程爬取P站,老司机慎入。_html

我们拿到请求的API地址后,先分析下数据,

​https://api.pixivic.com/ranks?page=1&date=2020-06-11&mode=day&pageSize=30,​

直接在浏览器中输入,然后找个 json美化工具,可以看出具体返回数据有哪些,通过和原网页进行比对可以得出如下结果:

使用Py的多线程爬取P站,老司机慎入。_数据_02

我们的目的就是为了拿到图片地址,然后下载图片,所以我们复制图片地址查看图片能否正常预览,结果我们发现:

使用Py的多线程爬取P站,老司机慎入。_vim_03

由此可以得出,该网站做了反爬措施,那该怎么办呢,首先让我们分析下:

页面正常打开没进行任何登陆操作,所以不存在时cookie这种问题,所以我们看下是不是请求头的原因,经分析和测试后发现,是需要添加refer,故在请求头中加入即可正常访问。如图:

使用Py的多线程爬取P站,老司机慎入。_数据_04

接下来,就进入敲代码的环节,如下:

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


os.system('title pixiv排行榜爬取') # 设置窗口标题
if not os.path.exists('pixivimg'): # 判断文件夹是否存在,如果不存在:
os.mkdir('pixivimg') # 创建一个文件夹
print('原网站:[url=https://pixivic.com/]https://pixivic.com/[/url],如无法爬取请尝试访问获取VNK')
print('因本人只看插画,所以为名字与插画对应,实际上获得的图片少于原页面上应有的图片。')
VNK = input('请输入VNK(可跳过):') # 获取VNK,虽然仍然不知道有什么用,不过是根据ua变化的VNK
if VNK == '':
VNK = 'dbcbfa01' # 默认的VNK
data = input('请输入爬取的日期(例如2020-06-12,最近的数据为三天前数据!):') # 获取爬取日期
pages = int(input('你想爬取的页数(1~18),每页大概30张图片:')) # 因为异步加载,所以实际上是多页




# 爬取单页的函数
def get_pixiv(page):
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',
} # 这里的ua随便写写就好,无限制
url = 'https://api.pixivic.com/ranks?page=' + str(
page) + '&date=' + data + '&mode=day&pageSize=30' # 异步加载接口,返回json数组
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) # 获取图片id,为后面referer做准备


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=' + VNK, # 缺少此将返回403
'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('\\', '_') # 防止创建文件时因名字问题失败
name = name.replace('?', '过滤')
except:
name = name
response = requests.get(url, headers=user) # 模拟访问
if response.status_code == 200: # 200即为成功
print('正在下载图片:' + name)
else:
print('错误代码' + response.status_code + '下载图片' + name + '失败!')
with open('pixivimg' + '/' + name + '.jpg', 'wb') as f: # 保存图片
f.write(response.content)




for page in [x for x in range(1, pages + 1)]: # 生成数字列表,便于循环爬取
threading.Thread(target=get_pixiv, args=(page,)).start() # 启动多线程

右击运行代码,输入你的想要爬取得内容,看到下图即代表程序执行成功

使用Py的多线程爬取P站,老司机慎入。_vim_05



标签:name,..,Py,VNK,慎入,img,https,多线程,response
From: https://blog.51cto.com/u_15924937/5975817

相关文章

  • Python批量下载公众号话题下音频文件
    宝宝喜欢听父母讲故事,年轻人喜欢听文章,年纪大的人喜欢听评书,很多人喜欢听不一样的东西,文案能够从文字转化成为语言说出去,那么效果肯定是大有不同。想必在日常生活中,大家都可......
  • Python 多进程下载站点所有小说
    小说,宅男必备,也是当今社会人们打发时间的一种方式。今天给大家分享的,喜欢看小说的同学可以收藏起来了!!目标站点:https://www.zhenhunxiaoshuo.com爬取思路:获取站点分类下的书......
  • 使用py一键获取所有必应壁纸图片
    Bing壁纸一直以来都是WIN7系统里的不可或缺的一道亮丽风景线,其高清、唯美、微妙镜头下的风景一直有着专业、不可比拟的称赞。Bing壁纸汇集了山水风景壁纸里各式各样的精华,再......
  • python版抖音短视频无水印下载
    如今,各类短视频应用已融入不少人的日常生活。短短几个镜头,可仰望浩瀚星空,也可俯瞰市井烟火;能近距离观察社会肌理,也能深度透视时代景深。点开视频,领略城乡风貌,了解风土人情,足......
  • 利用python爬取百思不得姐demo实例
    作为一个刚接触爬虫的小白,在学习了一定的语法后,第一个目标就是找一个适合初学者的网站来小试牛刀。一般来讲都会选择一个难度系数比较低的网站来进行爬取,这样不仅有助于我们......
  • 利用py实现邮件群发功能——办公必备利器
    作为一个不负责任的公号运营者,最近一直忙着搬砖,也没有太多时间来更新公众号,小编目前还是一个在惨遭社会蹂躏的低级码农,随随便便的一个高难度技术问题,仿佛就成了压死我的最后......
  • 利用py爬取生日的那天哈勃望远镜拍到了什么?
    于1990年4月发射升空的哈勃太空望远镜迎来了升空30周年纪念。为此,美国宇航局(NASA)近日在其官网上发起一项活动——“哈勃望远镜在你生日那天看到了什么?”NASA邀请大家搜索自......
  • 【Python 库】bs4的使用
    和lxml一样,BeautifulSoup也是一个HTML/XML的解析器,主要的功能也是如何解析和提取HTML/XML数据。BeautifulSoup,是一个第三方的库,所以使用之前需要安装,安装方法,输入cmd,调出......
  • python运行环境以及编辑器介绍
    Hello呀,EveryOne,在上次更新了第一篇的公众号推文后,小编也如约的和大家玩起了消失,但是工作还是要进行的,这不又乖乖的回来码字了,废话不再多说,今个带大家来敲下python编写的第......
  • Python爬取意林杂志所有期刊文章
    可能很多人对这个意林杂志比较陌生,但是对于小编来说,那可是满满的回忆。记得我们上中学那时候读过的意林,那可是一本接着一本,其中有很多令人感动的故事,一直被温暖,被治愈。接下......