52 lines
2.1 KiB
Python
52 lines
2.1 KiB
Python
import argparse
|
|
import requests
|
|
from requests_toolbelt.adapters import host_header_ssl
|
|
from urllib.parse import quote as encodeURI
|
|
import os
|
|
|
|
ap = argparse.ArgumentParser()
|
|
ap.add_argument("tag", help="Pixiv tag(s) to search")
|
|
ap.add_argument("-p", dest="numpages", type=int, default=1, help="number of pages to download (default 1)")
|
|
ap.add_argument("-s", dest="startpagenum", type=int, default=1, help="page number to start at")
|
|
ap.add_argument("-r", action='store_true', help="include r18 posts")
|
|
args = ap.parse_args()
|
|
|
|
PHPSESSID = None
|
|
with open("PHPSESSID.txt", 'r') as f:
|
|
PHPSESSID = f.read()
|
|
|
|
rqs = requests.Session()
|
|
rqs.mount('https://', host_header_ssl.HostHeaderSSLAdapter())
|
|
|
|
download_count = 1
|
|
for i in range(args.startpagenum, args.numpages+1):
|
|
page_url = f"https://210.140.131.219/ajax/search/artworks/{encodeURI(args.tag, safe='')}?order=popular_d&mode={'all' if args.r else 'safe'}&p={i}"
|
|
print("get", page_url)
|
|
page_data = rqs.get(page_url, cookies={"PHPSESSID": PHPSESSID}, headers={"host":"www.pixiv.net"}).json()
|
|
if (page_data['error']):
|
|
print(page_data['message'])
|
|
exit(1)
|
|
for illust in page_data['body']['illustManga']['data']:
|
|
illust_r18 = bool(illust['xRestrict'])
|
|
illust_url = f"https://210.140.131.219/ajax/illust/{illust['id']}/pages"
|
|
print("get", illust_url)
|
|
illust_data = rqs.get(illust_url, headers={"host":"www.pixiv.net"}).json()
|
|
if (illust_data['error']):
|
|
print(illust_data['message'])
|
|
else:
|
|
for image in illust_data['body']:
|
|
image_url = image['urls']['original']
|
|
download_dir = f"download/{args.tag}/"
|
|
os.makedirs(download_dir, exist_ok=True)
|
|
download_filename = str(download_count) + '_' + ('x_' if illust_r18 else '') + image_url.split('/').pop()
|
|
download_path = download_dir + download_filename
|
|
if os.path.exists(download_path):
|
|
print(download_path, "already exists")
|
|
continue
|
|
print("get", image_url)
|
|
res = rqs.get(image_url, headers={'referer':'https://www.pixiv.net'})
|
|
with open(download_path, "wb") as f:
|
|
f.write(res.content)
|
|
print("saved", download_filename)
|
|
download_count = download_count + 1
|