Pixiv日榜爬虫的Python脚本和Mac os小程序
文章目录
- P站爬虫代码
- 将图片更新到Github
- 把代码变成Mac应用程序
- 1. Python代码 -> 脚本
- 2.制作新的应用图标
- 3.替换应用图标
- 参考
P站爬虫代码
实现方法:
首先在P站日榜页面找到每个图片的data-id,然后进入相应图片的页面,找到图源url爬取原图。
import urllib.request
import ssl
import requests
import re
import time
import os
dir = '/Users/doudou/Desktop/pixiv'def getPixiv():dir_content = os.listdir(dir) # 获取文件夹内容ssl._create_default_https_context = ssl._create_unverified_context # 解决不受信任SSL证书问题headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.2 Safari/605.1.15'} # 定义headersresponse_1 = requests.get("https://www.pixiv.net/ranking.php", headers=headers)daily_list = response_1.text # 获取pixiv日榜的html文字with open("daily.txt", "w") as f:f.write(daily_list)ID = re.findall('"data-type=".*?"data-id="(.*?)"',daily_list) #取括号内的片段#print(ID)#获取日榜图片的idpart = "https://www.pixiv.net/artworks/" # 定义除ID外的部分for site in ID:URL = part + str(site)#print(URL)opener = urllib.request.build_opener()opener.addheaders = [('Referer', URL)]response_2 = requests.get(URL,headers = headers) # 获取展示页面的html文字html = response_2.text # 得到文字with open("daily.txt", "w") as f:f.write(html)download_links = "".join(re.findall('"original":"(.*?)"}', html)) # 使用正则表达式得到下载链接download_name = "".join(re.findall('<title>#(.*?) - pixiv</title>', html))download_name = re.sub('[\\\/\*\?\"\:\<\>\|]', '_', download_name) + download_links[-4:] # 获取图片名字和格式#print(download_links)print(download_name)if download_name in dir_content:print('Image already exists.') # 本地文件夹中已存在的图片不再爬取continue urllib.request.install_opener(opener)time.sleep(5)'''增加重连的次数防止报错'''requests.DEFAULT_RETRIES = 100 # 增加重试连接次数s = requests.session()s.keep_alive = False # 关闭多余连接'''需要提前创建好文件夹'''urllib.request.urlretrieve(download_links, ("/Users/doudou/Desktop/pixiv/" + download_name)) # 将URL文件复制到本地
将图片更新到Github
图片存在本地有丢失的风险,而且存储量大了管理起来麻烦,于是写了一个python shell脚本即时将爬到的图片更新到Github。
实现方法:
使用os库中的os.system()方法,运行shell命令(我写的是Mac的终端命令,根据os不同需进行调整)。将本地Desktop/pixiv里的图片push到关联的远端仓库。
import os
import time
def push2git():cmd = 'cd;cd Desktop/pixiv;ls;git add .;git commit -m ' + '"' + time.strftime('%Y-%m-%d', time.localtime(time.time()))+ '"' +';git push'print(cmd)return os.system(cmd)
完整代码如下:
import urllib.request
import ssl
import requests
import re
import time
import os
dir = '/Users/doudou/Desktop/pixiv'def push2git():cmd = 'cd;cd Desktop/pixiv;ls;git add .;git commit -m ' + '"' + \time.strftime('%Y-%m-%d', time.localtime(time.time())) + \'"' + ';git push'print(cmd)return os.system(cmd)def getPixiv():dir_content = os.listdir(dir) # 获取文件夹内容ssl._create_default_https_context = ssl._create_unverified_context # 解决不受信任SSL证书问题headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.2 Safari/605.1.15'} # 定义headersresponse_1 = requests.get("https://www.pixiv.net/ranking.php", headers=headers)daily_list = response_1.text # 获取pixiv日榜的html文字with open("daily.txt", "w") as f:f.write(daily_list)ID = re.findall('"data-type=".*?"data-id="(.*?)"',daily_list) #取括号内的片段#print(ID)#获取日榜图片的idpart = "https://www.pixiv.net/artworks/" # 定义除ID外的部分for site in ID:URL = part + str(site)#print(URL)opener = urllib.request.build_opener()opener.addheaders = [('Referer', URL)]response_2 = requests.get(URL,headers = headers) # 获取展示页面的html文字html = response_2.text # 得到文字with open("daily.txt", "w") as f:f.write(html)download_links = "".join(re.findall('"original":"(.*?)"}', html)) # 使用正则表达式得到下载链接download_name = "".join(re.findall('<title>#(.*?) - pixiv</title>', html))download_name = re.sub('[\\\/\*\?\"\:\<\>\|]', '_', download_name) + download_links[-4:] # 获取图片名字和格式#print(download_links)print(download_name)if download_name in dir_content:print('Image already exists.') # 本地文件夹中已存在的图片不再爬取continue urllib.request.install_opener(opener)time.sleep(5)'''增加重连的次数防止报错'''requests.DEFAULT_RETRIES = 100 # 增加重试连接次数s = requests.session()s.keep_alive = False # 关闭多余连接'''需要提前创建好文件夹'''urllib.request.urlretrieve(download_links, ("/Users/doudou/Desktop/pixiv/" + download_name)) # 将URL文件复制到本地if push2git() == 0:print('----FINISH----')if __name__ == "__main__":getPixiv()
把代码变成Mac应用程序
每天爬取日榜都要运行.py很麻烦,就想着把它弄成一个Mac上的可执行脚本。对应Windows的.exe文件。
1. Python代码 -> 脚本
打开Mac自带的脚本编辑器
新建脚本写下以下代码:
tell application "Terminal"do script with command "python3 /path/to/your/script.py"
end tell
把/path/to/your/script.py替换成自己写的python代码的绝对路径。
然后储存脚本为应用程序
,即可在桌面上找到了。
2.制作新的应用图标
虽然应用程序做好了,也可以直接执行了,但是Mac的默认图标很丑,于是决定替换成刚爬下来了パワー小姐~
首先找一个心仪的图片如下:
裁剪成1:1的正方形,分辨率调成1024,另存为pic.png
:
呼出终端,新建临时文件夹$ mkdir tmp.iconset
,并依次执行如下指令,基于pic.png生成10个不同大小的图片:
sips -z 16 16 pic.png --out tmp.iconset/icon_16x16.png
sips -z 32 32 pic.png --out tmp.iconset/icon_16x16@2x.png
sips -z 32 32 pic.png --out tmp.iconset/icon_32x32.png
sips -z 64 64 pic.png --out tmp.iconset/icon_32x32@2x.png
sips -z 128 128 pic.png --out tmp.iconset/icon_128x128.png
sips -z 256 256 pic.png --out tmp.iconset/icon_128x128@2x.png
sips -z 256 256 pic.png --out tmp.iconset/icon_256x256.png
sips -z 512 512 pic.png --out tmp.iconset/icon_256x256@2x.png
sips -z 512 512 pic.png --out tmp.iconset/icon_512x512.png
sips -z 1024 1024 pic.png --out tmp.iconset/icon_512x512@2x.png
然后输入$ iconutil -c icns tmp.iconset -o applet.icns
生成一个.icns应用图标。
3.替换应用图标
获得图标以后就可以进行替换了,方法如下:
- 右击之前生成好的python应用,点击
显示包内容
,进入文件夹。 - 寻到
Contents/Resources
,将其中的applet.icns
替换成我们新做好的。 - 再次用
脚本编辑器
打开该应用,什么都不做点击存储,会发现桌面上的应用图标改变了!
这样一来就可以每天愉快地欣赏P站日榜了~
参考
灵感来源这里
爬虫代码基本参考这里
另一处爬虫参考
一个P站爬虫错误的解决方法
Mac图标生成参考
Mac应用程序生成参考
Pixiv日榜爬虫的Python脚本和Mac os小程序相关推荐
- 记一次对Pixiv日榜的爬虫
Pixiv爬虫 Pixiv是个啥 爬虫过程 Pixiv是个啥 pixiv是一个以插图.漫画和小说.艺术为中心的社交网络服务里的虚拟社区网站.于2007年9月10日推出第一个测试版.公司总部位于日本东京 ...
- Python爬虫系列之爬取某奢侈品小程序店铺商品数据
Python爬虫系列之爬取某奢侈品小程序店铺商品数据 小程序爬虫接单.app爬虫接单.网页爬虫接单.接口定制.网站开发.小程序开发> 点击这里联系我们 < 微信请扫描下方二维码 代码仅供学 ...
- python做出来的小程序、可以在win10上面运行_超详细,手把手教你用20行Python代码制作飞花令小程序!...
原标题:超详细,手把手教你用20行Python代码制作飞花令小程序! 来源:早起Python 作者:陈熹 飞花令是古时候人们经常玩一种"行酒令"的游戏,是中国古代酒令之一,属雅令. ...
- 计算机毕业设计Python+uniapp音乐播放微信小程序LW(小程序+源码+LW)
计算机毕业设计Python+uniapp音乐播放微信小程序LW(小程序+源码+LW) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ py ...
- python做小程序-【实战案例】利用Python做出趣味版防沉迷小程序
今天带领大家利用Python做出趣味版防沉迷小程序 查询电脑的所有进程 用Python循环检测电脑软件的运行情况,当发现游戏软件时弹出警告窗口,并截图保存.学会这项技能,就再也不怕孩子偷偷打游戏了.下 ...
- 微信 小程序 python 渲染_干货 | 微信小程序自动化测试最佳实践(附 Python 源码)...
本文为霍格沃兹测试学院测试大咖公开课<微信小程序自动化测试>图文整理精华版,进阶学习文末加群! 随着微信小程序的功能和生态日益完善,很多公司的产品业务形态逐渐从 App 延升到微信小程序. ...
- 计算机毕业设计Python+uniapp学生考勤系统小程序(小程序+源码+LW)
计算机毕业设计Python+uniapp学生考勤系统小程序(小程序+源码+LW) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ pyth ...
- 计算机毕业设计Python+uniapp校园服务微信小程序(小程序+源码+LW)
计算机毕业设计Python+uniapp校园服务微信小程序(小程序+源码+LW) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ pyth ...
- 计算机毕业设计Python+uniapp学生课堂考勤小程序(小程序+源码+LW)
计算机毕业设计Python+uniapp学生课堂考勤小程序(小程序+源码+LW) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ pyth ...
最新文章
- 'unicodeescape' codec can't decode bytes in position 16-17: malformed \N character escape
- 8.程序什么时候应该使用线程,什么时候单线程效率高?
- 交换机怎么使用vtp
- 图解 Java 线程的生命周期,看完再也不怕面试官问了
- 信息加密之信息摘要加密MD2、MD4、MD5
- webapi部署到IIS 404错误
- windows修改右键菜单显示内容(非所有菜单适用)
- canny算子_Canny边缘检测算法
- EasyPermisson 动态权限使用例子
- 二叉树求到某一个节点路径
- 让Windows 2003 Server支持ASP程序
- 如何用Carbon Copy Cloner把macOS系统旧硬盘备份到新硬盘上?
- Eucalyptus云之面纱
- uniapp项目使用mescroll中mescroll-body组件记录
- python爬取网页数据(例如淘宝)
- Windows下搭建IOS开发环境
- 本周最新文献速递20211212
- java 将fileoutputstream 文件流保存为文件_Java输出流FileOutputStream使用详解
- leetcode 5607. 生成平衡数组的方案数 前缀和
- 调用baidu aip