码迷,mamicode.com
首页 > 其他好文 > 详细

爬取网易热评做成网易云热门截图形式(给自己看的很乱有待更改+)

时间:2017-09-22 15:24:41      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:div   safari   htm   span   src   需要   paste   param   hot   


# coding: utf-8



import requests, json, os, time, math, re
from PIL import Image, ImageDraw, ImageFont



# 字体区
nor_font = C:/windows/fonts/simsun.ttc
micro_font = C:/windows/fonts/msyh.ttc  # 微软雅黑
times_font = C:/windows/fonts/times.ttf  # times new Roman
huawen_font = C:/windows/fonts/STXINGKA.TTF  # 华文行楷
english_font = C:/windows/fonts/STXINGKA.TTF  # 英文的
fangsong_font = C:/windows/fonts/simfang.ttf  # 仿宋
consolab_font = C:/windows/fonts/consolab.ttf
webding_font = C:/windows/fonts/webdings.ttf
itckrist_font = C:/windows/fonts/ITCKRIST.TTF
simyou_font = C:/windows/fonts/SIMYOU.TTF


path_req_img = rC:\Users\HDWEN\Desktop\test\test1
path = rC:\Users\HDWEN\Desktop\test



def get_pic(user, url, comment, count, time_stamp, reply_user=None, reply_content=None):
    # 将头像图片都设置为固定大小(1024*1024)
    with open(os.path.join(path_req_img, os.path.basename(url)), wb) as f:
        f.write(requests.get(url).content)
    img1 = Image.open(os.path.join(path_req_img, os.path.basename(url)))
    img1 = img1.resize((1024, 1024), Image.ANTIALIAS)
    width1 = img1.size[0]
    height1 = img1.size[1]
    img1 = img1.crop((0, 0, width1, height1))
    # print(width1,height1)
    # 计算文字需要的行数

    if reply_user == None: reply_content =  ;reply_user = ‘‘
    # 评论区
    # comment
    ft = ImageFont.truetype("%s" % fangsong_font, 200)
    # 一行设置为50个字
    one_zh_width = ft.getsize()[0]
    width = 1500 * 8
    w1, h1 = ft.getsize(user + comment)
    w2, h2 = ft.getsize(reply_user + reply_content)
    line_w1 = math.ceil(w1 / (width - 1100)) + 1
    line_w2 = math.ceil(w2 / (width - 1400)) + 1
    line = line_w1 + line_w2
    height = (line + 5) * 250
    # print(line_w1,line_w2,height)
    # 创建空白图片
    image = Image.new(RGB, (width, height), (247, 238, 214))
    draw = ImageDraw.Draw(image)
    # 评论区

    text1 = user +  + comment
    ft = ImageFont.truetype(C:/windows/fonts/simfang.ttf, 200)
    all_h = []

    def multi_line(text, h=0):
        if width - 1100 > ft.getsize(text)[0]:
            draw.text((1100, h * 250 + 50), %s % text, fill=black, font=ft)
            all_h.append(0)
        else:
            for i in range(int((width - 1100) / 250), len(text) + 1):
                if width - 1100 - 250 < ft.getsize(text[:i])[0] < width - 1100:
                    draw.text((1100, h * 250 + 50), %s % (text[:i]), fill=black, font=ft)
                    h += 1
                    t = text[i:]
                    all_h.append(h)
                    multi_line(t, h)

    multi_line(text1)


    # 点赞区
    draw.text((width - 2200, height - 400), 点赞:( , font=ImageFont.truetype(fangsong_font, 200),
              fill=black)
    draw.text((width - 2200+ft.getsize(点赞:()[0], height - 400), %s % (count), font=ImageFont.truetype(times_font, 200),
              fill=gray)
    draw.text((width - 2200+ft.getsize(点赞:()[0]+ft.getsize(str(count))[0], height - 400), ")|回复", font=ImageFont.truetype(fangsong_font, 200),
              fill=black)

    # 时间区
    shift_time = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time_stamp))
    draw.text((width - 5000, height - 400), %s % shift_time, font=ImageFont.truetype(fangsong_font, 200), fill=gray)

    # 给自己Hdwen打一个水印及歌曲名
    draw.text((150,height - 400),song:,font=ImageFont.truetype(itckrist_font, 200), fill=gray)
    draw.text((150+ft.getsize(song:)[0]+150, height - 400),%s%song_name[0], font=ImageFont.truetype(itckrist_font, 200), fill=red)

    # draw.text((1100+ft.getsize(str(shift_time))[0]+ft.getsize(str(song_name[0]))[0]+2700, height - 350),‘??‘, font=ImageFont.truetype(webding_font, 150), fill=‘black‘)
    # draw.text((100, height - 450), ‘Hdwen‘, font=ImageFont.truetype(english_font, 250), fill=‘black‘)

    # 回复区
    image.save(os.path.join(path, os.path.basename(url)), jpeg)
    img3 = Image.open(os.path.join(path, os.path.basename(url)))
    img3.paste(img1, (50, 50))
    if reply_user != ‘‘:
        img = ImageDraw.Draw(img3)
        # 若是分行的话就要参照评论第二行的高度了

        h = max(all_h) + 3
        text2 = reply_user +  + reply_content

        def multi_line(text, h):
            if width - 1400 > ft.getsize(text)[0]:
                img.rectangle((1300, h * 250 + 20, width, (line) * 250), fill=(250, 240, 230))
                img.text((1400, h * 250 + 50), %s % text, fill=black, font=ft)
            for i in range(1, len(text) + 1):
                if width - 1400 - 250 < ft.getsize(text[:i])[0] < width - 1400:
                    img.rectangle((1300, h * 250-150 , width, (line ) * 250+150), fill=(250, 240, 230))
                    img.text((1400, h * 250 + 50), %s % (text[:i]), fill=black, font=ImageFont.truetype(fangsong_font, 200))
                    h += 1
                    t = text[i:]
                    all_h.append(h)
                    multi_line(t, h)

        multi_line(text2, h)
        # img.text((1400,650),‘%s:‘%(reply_user),font=ImageFont.truetype(nor_font, 250),fill=‘blue‘)
        # img.text((1400+ft.getsize(reply_user)[0]+ 250,650),‘%s‘%(reply_content),font=ImageFont.truetype(fangsong_font, 250),fill=‘black‘)
        # print(len(text),one_line_len)
    img3.show()
    img3.save(os.path.join(rC:\Users\HDWEN\Desktop\song_pic, os.path.basename(url)))




params = N/k4O/N6NXalQC6Rv9BW8PTzWfT5CNZadhKUGlbtvyv4Txkq6VA4hy9CsYGAukRmtMJ2fhEF0IuVTxYdrhmpkb6WkYO25h/RV0uDd6dC9W7wU8y1Jt3+HlIPnnqvZeEgUOM8DcUZKx6Br+YcWI6G3v7ZPSecMA90sWdNXb9DEZhtcZD+V2GCRQxp/vxFgepdy/KaT1P8mMZ4wNdW99PYWMVLNprGNuyc8/GgMnIYHWQ=
encSecKey = a1264cb1d89ebc410d9a6d7ebae75fd78798c66e17b05299fe7564b33edda38653454ee8ed240c1eb77b8d159478ff6d9cd3521943371a1dd682474a1218c30800090541d87f6cbde133c69158a4bf72141c48872ecd3248578079cc1be6e2fb6b0dc80749857d893eae0ab4f516794a11cc8e39210659e421a4a6f7a8f5cf4d
headers = {
    Cookie: appver=1.5.0.75771;,
    Referer: http://music.163.com/,
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36
}
data = {
    "params": params,
    "encSecKey": encSecKey
}
song_id = 35090300
url = http://music.163.com/weapi/v1/resource/comments/R_SO_4_{}?csrf_token=63c8e79f67b0ee78ce7f3d38a5081b2e.format(
    song_id)  # format里面填写的是歌曲的id
url1=http://music.163.com/song?id={}.format(song_id)
res = requests.post(url, headers=headers, data=data)
dict = json.loads(res.content)
print(dict)
dicts = dict[hotComments]
print(dicts)
res1=requests.get(url1).text
a=re.findall(<title>(.*?)</title>,res1)
song_name=a[0][:-12].split(-)
print(song_name:,song_name[0])
print(singer:,song_name[1])
for i in dicts:
    user = i[user][nickname]
    comment = ‘‘.join([t for t in i[content] if t not in {\n,  }])
    count = i[likedCount]
    url = i[user][avatarUrl]
    time_stamp = int(str(i[time])[:-3])
    reply = i[beReplied]
    print(i[time])
    if reply == []:
        # pass
        get_pic(user, url, str(comment), count, time_stamp)
        print(i[user][nickname], :, comment, *****Count:, i[likedCount], i[user][avatarUrl],
              int(str(i[time])[:-3]))

    else:
        reply_user = i[beReplied][0][user][nickname]
        reply_content = ‘‘.join([t for t in i[beReplied][0][content] if t not in {\n, }])
        get_pic(user, url, comment, count, time_stamp, reply_user, reply_content)
        # print(i[‘user‘][‘nickname‘], ‘:‘, i[‘content‘], ‘对于这个评论的回复:‘, i[‘beReplied‘][0][‘content‘], ‘Count:‘,
        #       i[‘likedCount‘])
        # print(list(i[‘beReplied‘][0][‘content‘]))
        # print(list(reply_content))

 

 

技术分享技术分享

爬取网易热评做成网易云热门截图形式(给自己看的很乱有待更改+)

标签:div   safari   htm   span   src   需要   paste   param   hot   

原文地址:http://www.cnblogs.com/hdwen/p/7574664.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!