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'
    }  # 定义headers

    response_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)#获取日榜图片的id

    part = "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('#(.*?) - pixiv', 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'
    }  # 定义headers

    response_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)#获取日榜图片的id

    part = "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('#(.*?) - pixiv', 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

Pixiv日榜爬虫的Python脚本和Mac os小程序_第1张图片


呼出终端,新建临时文件夹$ 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/[email protected]
sips -z 32 32     pic.png --out tmp.iconset/icon_32x32.png
sips -z 64 64     pic.png --out tmp.iconset/[email protected]
sips -z 128 128   pic.png --out tmp.iconset/icon_128x128.png
sips -z 256 256   pic.png --out tmp.iconset/[email protected]
sips -z 256 256   pic.png --out tmp.iconset/icon_256x256.png
sips -z 512 512   pic.png --out tmp.iconset/[email protected]
sips -z 512 512   pic.png --out tmp.iconset/icon_512x512.png
sips -z 1024 1024   pic.png --out tmp.iconset/[email protected]

然后输入$ iconutil -c icns tmp.iconset -o applet.icns生成一个.icns应用图标。

3.替换应用图标

获得图标以后就可以进行替换了,方法如下:

  • 右击之前生成好的python应用,点击显示包内容,进入文件夹。
  • 寻到Contents/Resources ,将其中的applet.icns替换成我们新做好的。
  • 再次用脚本编辑器打开该应用,什么都不做点击存储,会发现桌面上的应用图标改变了!

Pixiv日榜爬虫的Python脚本和Mac os小程序_第2张图片


这样一来就可以每天愉快地欣赏P站日榜了~


参考

灵感来源这里

爬虫代码基本参考这里

另一处爬虫参考

一个P站爬虫错误的解决方法

Mac图标生成参考

Mac应用程序生成参考


Pixiv日榜爬虫的Python脚本和Mac os小程序_第3张图片

你可能感兴趣的:(python,爬虫,shell,脚本语言,macos)