Python 爬虫入门:根据Pixiv画师ID 下载图片作品(附完整代码)

简介

由于国内上Pixiv(P站)需要一些技术,不是很方便,我们可以通过其他方式来获得P站上的一些资源。画师通是一个画师分享作品平台。
根据画师的Pixiv ID可以在画师通网站上找到画师的众多作品:

Python 爬虫入门:根据Pixiv画师ID 下载图片作品(附完整代码)_第1张图片

这当然可以通过一个简单的爬虫来实现!

流程

输入:画师ID
首先判断该ID是否能找到画师,如果能找到就转到其主页,下载所有作品,保存到文件夹

实现结果

Python 爬虫入门:根据Pixiv画师ID 下载图片作品(附完整代码)_第2张图片

准备

为了运行代码,你需要一个cookie和user_agent。
爬虫系列之怎么找cookie以及user-Agent

代码

import requests
import os
from pyquery import PyQuery as pq
import re

#下载单张图片 
def save_image(img_src,name,main_path='save_img'):
    imgResponse = requests.get(img_src)
    if imgResponse.status_code==200:    
        if not os.path.exists(main_path):#如果路径不存在
            os.makedirs(main_path)        #创建文件夹
        with open(main_path+'/'+name+'.png','ab') as f:#以二进制追加模式打开,不清空
            f.write(imgResponse.content)
            f.close()
            
class Image_From_Pixiv_Painter_ID():
    def __init__(self,cookie,user_agent,painter_id='490219'):
        print('正在初始化...')
        self.basic_url = 'https://www.huashi6.com'        
        self.head1 = {'cookie': cookie,'user-agent': user_agent}
        self.painter_id = painter_id
        self.target_url = self.basic_url + '/search?searchText=' + self.painter_id        
        self.flag = self.find_painter()
                
    def find_painter(self):
        self.target_url_response = requests.get(self.target_url,headers=self.head1)
        if self.target_url_response.status_code==200:
            print('网站成功响应...')
            print('正在搜索画师ID...')
            find = re.findall('共有1个结果',self.target_url_response.text)
            if len(find)==0:
                print('未找到该画师.')
                return False
            else:
                print('已找到该画师,使用.download()方法保存图片到''/save_img''文件夹')
                return True
        else:
            print('网站未响应:'+str(self.target_url_response.status_code))
            return False
        
    def download(self):        
        if self.flag==False:
            print('未找到该画师.下载失败')
        doc = pq(self.target_url_response.text)
        s = doc('div.painter > a').attr('href')
        #####到达该画师的主页面
        new_url = self.basic_url + s
        new_url_response = requests.get(new_url,headers=self.head1)
        if new_url_response.status_code==200:
            print('成功响应...')
#            with open("newresult2.html",'w',encoding="utf-8") as f:#抓取的HTML界面
#                f.write(new_url_response.text) 
            text = new_url_response.text
            doc2 = pq(text)
            search = doc2('div.collection > div > div > a > div > div > div > img').items()
            print('下载中...')
            for i in search:
                img_title = i.attr('title')
                img_src = i.attr('src')          
                if img_title!=None:
                    print('图片名称',img_title)
                    save_image(img_src,img_title)
            print('下载完毕')
        else:
            print('网站未响应:'+str(new_url_response.status_code))
                            
###cookie,user_agent在页面——Network里
cookie = ''
user_agent = ''

model = Image_From_Pixiv_Painter_ID(cookie,user_agent,'483782')
model.download()

你可能感兴趣的:(python)