python3.6 涂鸦王国-图片-爬虫笔记

python3.6 涂鸦王国-图片-爬虫笔记
打开第一个链接,查看详细信息
python3.6 涂鸦王国-图片-爬虫笔记

关键点在于
前一个.jpg是原图,可以通过操作字符串的方式改写得到原链接

更早时候发布的图片,链接方式不一样
python3.6 涂鸦王国-图片-爬虫笔记
这里写一个判断获取的src是否为空就可以区分

关键问题解决,整理下思路
1.https://www.gracg.com/p599367964217379?page=1
改变“page=x”可以得到所有的图片的目录列表------format可以操作
2.xpath得到每个缩略图所指向的图片单独链接

def get_infos(url):
    res=requests.get(url,headers=headers)
    selector=etree.HTML(res.text)

    pic_urls=selector.xpath('//div[@class="imgbox"]/a/@href')
    for pic_url in pic_urls:
        print(pic_url)
        get_pictures(pic_url)
        time.sleep(1)

3.得到单独一个图片链接之后,区分新旧网页的代码,构造下载链接

def get_pictures(url):
    res=requests.get(url,headers=headers)
    selector=etree.HTML(res.text)
    #获取图片的名字
    pic_name=selector.xpath('/html/body/div[1]/div[2]/div[1]/div/div[2]/text()')
    name=pic_name[0].strip().replace('\n','')#去除空格回车这些乱七八糟的
    print(name)
    #获取图片的下载链接
    pic_url=selector.xpath('//div[@class="workPage-images"]/img/@src')
    # print(pic_url)
    if len(pic_url):
        # 如果不只有一张图片,图片名字后面加数字
        if len(pic_url)==1:
            downloadurl = pic_url[0].split('!')[0]
            data = requests.get(downloadurl, headers=headers)
            fp = open(downloadpath + name + '.jpg', 'wb')
            fp.write(data.content)
            fp.close()
        else:
            num=1
            for pic_u in pic_url:
                downloadurl=pic_u.split('!')[0]
                data=requests.get(downloadurl,headers=headers)
                fp=open(downloadpath+name+'__'+num.__str__()+'.jpg','wb')
                num+=1
                fp.write(data.content)
                fp.close()

            # print(downloadurl)
    else:
        pic_url=selector.xpath('//div[@class="workPage-images"]/a/@href')
        #如果不只有一张图片,图片名字后面加数字
        if len(pic_url)==1:
            downloadurl=pic_url[0]
            data = requests.get(downloadurl, headers=headers)
            fp = open(downloadpath + name + '.jpg', 'wb')
            fp.write(data.content)
            fp.close()
        else:
            num = 1
            for pic_u in pic_url:
                downloadurl = pic_u.split('!')[0]
                data = requests.get(downloadurl, headers=headers)
                fp = open(downloadpath + name + '__' + num.__str__() + '.jpg', 'wb')
                num += 1
                fp.write(data.content)
                fp.close()

4.最后写个主程序进入就行了,再把该导入的包,访问头补一下就行

if __name__=='__main__':
    downloadpath='E:/spider_pictures/小归mist_20190505/'
    urls=['https://www.gracg.com/p599367964217379?page={}'.format(num) for num in range(7,27)]
    for url in urls:
        get_infos(url)