python爬取花瓣最受欢迎图片并保存

思路:

1.https://huaban.com/search/?q=原画 搜索前一百个资源 根据采集次数排序取前10

2.根据拿到的pid 去 https://huaban.com/pins/ + pid + / 找到主图code

3.根据链接https://hbimg.huabanimg.com/ + code 下载主图片 保存下载的图片到本地

4.根据 用户名 种类 采集数,喜欢数 作为文件名保存

5.利用Pyinstaller 打包成exe文件,在桌面上点击程序图标,生成包含爬取图片的文件夹

import requests
import re
import os

# -*- coding: utf-8 -*-


def getHTMLText(url):
    try:
        r = requests.get(url)
        r.raise_for_status()
        return r.text
    except:
        return ''


def parsePid(html):
    '''
    拿出前100的 id 与 采集数
    取前10个放入list
    '''
    list_p = {}
    #前100个资源id
    idlist = re.findall(r'"pin_id":\d+', html)[:search_num]
    #前100个资源id的采集数
    picklist = re.findall(r'"repin_count":\d+', html)[:search_num]
    for i in range(0, len(idlist)):
        #将资源id与采集数放入字典
        list_p[idlist[i].split(':')[1]] = picklist[i].split(':')[1]
    #按采集数对字典数据排序
    list_p = sorted(list_p.items(), key=lambda item: int(
        item[1]), reverse=True)
    list_p = list_p[:10]
    return list_p


def writePicData(k):
    #拿到要下载图片的页面
    pic_url = 'https://huaban.com/pins/' + k + '/'
    html = getHTMLText(pic_url)
    # reg = re.compile(pid + r'.*?", "type"$')
    reg1 = re.compile(r'"pin_id":' + k + r'.*?", "urlname"')
    #用正则表达式截取需要的信息字符串
    str1 = reg1.search(html).group(0)
    #再用正则和分割保存各个数据
    repin = re.search(r'"repin_count":\d+', str1).group(0).split(':')[1]
    like = re.search(r'"like_count":\d+', str1).group(0).split(':')[1]
    leibie = re.search(r'"raw_text":"[^"]+', str1).group(0).split(':"')[1]
    name = re.search(r'"username":"[^"]+', str1).group(0).split(':"')[1]
    #print(repin, like, leibie, name)

    #通过两次分割拿到下载code 此处也可以用正则
    code = str1.split('"key":"')[1].split('", "type"')[0]
    #根据下载code得到图片下载地址
    down_url = 'https://hbimg.huabanimg.com/' + code
    r = requests.get(down_url)
    #根据用户名 种类 采集数,喜欢数 作为文件名保存
    path = '主题:' + leibie + '||画师:'+name+'||采集:' + repin+'||喜欢:' + like+'.png'
    path = re.sub(r'(?u)[^-\w.]', '_', path)
    # path = ("%d--" % score) + author_name + "--" + question_title + ("--%d" % seq) + ".jpg"
    #如果不存在指定文件夹就创建
    if not os.path.exists(dir):
        os.mkdir(os.getcwd() + '/' + dir)
    #保存图片
    with open(os.path.join(dir, path), 'wb') as f:
        f.write(r.content)


if __name__ == "__main__":
# 1.https://huaban.com/search/?q=原画 搜索前一百个资源 根据采集次数排序取前10
# 2.根据拿到的pid 去 https://huaban.com/pins/ + pid + /  找到主图code
# 3.根据链接https://hbimg.huabanimg.com/ + code  下载主图片  保存下载的图片到本地
# 4.根据  用户名 种类 采集数,喜欢数 作为文件名保存
    search_num = 100
    pick_num = 10
    pidlist = {}
    key_word = '动漫'
    dir = 'HuaBan_Pics/'

    # 每页最多拿100个 超过100会被限制成20
    start_url = 'https://huaban.com/search/?q='+key_word+'&per_page=100'
    html = getHTMLText(start_url)
    pidlist = parsePid(html)
    for k in pidlist:
        writePicData(k[0])

你可能感兴趣的:(python爬取花瓣最受欢迎图片并保存)