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

2023-10-20 20:20

本文主要是介绍爬取网易热评做成评论截图形式(给自己看的很乱有待更改),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

# coding: utf-8



import requests, json, os, datetime, 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' # 仿宋



path_req_img = r'C:\Users\HDWEN\Desktop\test\test1'
path = r'C:\Users\HDWEN\Desktop\test'



def get_pic(user, url, comment, count, time, 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)

# 给自己Hdwen打一个水印
draw.text((100, 1200), 'Hdwen', font=ImageFont.truetype(english_font, 250), fill='black')

# 点赞区
draw.text((width - 2200, height - 400), '点赞:(%s)|回复' % (count), font=ImageFont.truetype(fangsong_font, 200),
fill='blue')
# 时间区
dateArray = datetime.datetime.utcfromtimestamp(time)
shift_time = dateArray.strftime("%Y-%m-%d %H:%M:%S")
draw.text((1100, height - 400), '%s' % shift_time, font=ImageFont.truetype(fangsong_font, 200), fill='gray')
# 回复区
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) + 2
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 + 20, width, (line + 1) * 250), 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(r'C:\Users\HDWEN\Desktop\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 = '422428548'
url = 'http://music.163.com/weapi/v1/resource/comments/R_SO_4_{}?csrf_token=63c8e79f67b0ee78ce7f3d38a5081b2e'.format(
song_id) # format里面填写的是歌曲的id
res = requests.post(url, headers=headers, data=data)
dict = json.loads(res.content)
# print(dict)
dicts = dict['hotComments']
# print(dicts)
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 = int(str(i['time'])[:-3])
reply = i['beReplied']
if reply == []:
# pass
get_pic(user, url, str(comment), count, time)
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, 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))






转载于:https://www.cnblogs.com/hdwen/p/7554122.html

这篇关于爬取网易热评做成评论截图形式(给自己看的很乱有待更改)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/249488

相关文章

超强的截图工具:PixPin

你是否还在为寻找一款功能强大、操作简便的截图工具而烦恼?市面上那么多工具,常常让人无从选择。今天,想给大家安利一款神器——PixPin,一款真正解放双手的截图工具。 想象一下,你只需要按下快捷键就能轻松完成多种截图任务,还能快速编辑、标注甚至保存多种格式的图片。这款工具能满足这些需求吗? PixPin不仅支持全屏、窗口、区域截图等基础功能,它还可以进行延时截图,让你捕捉到每个关键画面。不仅如此

java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式在最下方 java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频) 停车管理信息系统是为了提升停车场的运营效率和管理水平而设计的综合性平台。系统涵盖用户信息管理、车位管理、收费管理、违规车辆处理等多个功能模块,旨在实现对停车场资源的高效配置和实时监控。此外,系统还提供了资讯管理和统计查询功能,帮助管理者及时发布信息并进行数据分析,为停车场的科学

QtC++截图支持窗口获取

介绍 在截图工具中你会发现,接触到窗口后会自动圈出目标窗口,个别强大一点的还能进行元素识别可以自动圈出元素,那么今天简单分析一下QTc++如何获取窗口并圈出当前鼠标下的窗口。 介绍1.如何获取所有窗口2.比较函数3.实现窗口判断 结尾 1.如何获取所有窗口 1.我们需要调用windows接口EnumWindowsProc回调函数来获取所有顶级窗口,需要包含windows.

通过Ajax请求后台数据,返回JSONArray(JsonObject),页面(Jquery)以table的形式展示

点击“会商人员情况表”,弹出层,显示一个表格,如下图: 利用Ajax和Jquery和JSONArray和JsonObject来实现: 代码如下: 在hspersons.html中: <!DOCTYPE html><html><head><meta charset="UTF-8"><title>会商人员情况表</title><script type="text/javasc

大厂算法例题解之网易2018秋招笔试真题 (未完)

1、字符串碎片 【题目描述】一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,“aaabbaaac” 是由下面碎片组成的:‘aaa’,‘bb’,‘c’。牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的 平均长度是多少。 输入描述: 输入包括一个字符串 s,字符串 s 的长度 length(1 ≤ length ≤ 50),s 只含小写字母(‘a’-‘z’) 输出描述

0基础学习爬虫系列:网页内容爬取

1.背景 今天我们来实现,监控网站最新数据爬虫。 在信息爆炸的年代,能够有一个爬虫帮你,将你感兴趣的最新消息推送给你,能够帮你节约非常多时间,同时确保不会miss重要信息。 爬虫应用场景: 应用场景主要功能数据来源示例使用目的搜索引擎优化 (SEO)分析关键词密度、外部链接质量等网站元数据、链接提升网站在搜索引擎中的排名市场研究收集竞品信息、价格比较电商网站、行业报告制定更有效的市场策略舆情

如何利用评论进行有效的 ASO

如何利用评论进行有效的ASO的问题的答案通常以“正面评论”一词开始。确实,这句话首先浮现在脑海中。但这个问题的答案包括负面评论、用户体验、提高知名度、评分、根据评论优化应用程序以及许多其他有趣的点。这里几乎没有无聊的统计数据,这些数字也不会让你眼花缭乱。处理评论需要与用户的沟通和互动,需要社交性,甚至需要一点心理学。在本文中,我们将讨论评论对应用程序的总体影响,以及它们对 ASO 优化的

java计算机毕设课设—企业员工信息管理系统(附源码、文章、相关截图、部署视频)

这是什么系统? 获取资料方式在最下方 java计算机毕设课设—企业员工信息管理系统(附源码、文章、相关截图、部署视频) 企业员工信息管理系统旨在为公司提供高效的员工信息管理解决方案。该系统的核心功能涵盖密码修改、员工管理、部门管理、出勤管理、工资管理、请假审核等方面,帮助企业优化人力资源管理流程。系统结构如下: (1)前端(员工端): 1.密码修改:员工可以修改自己的密码,提升账户的安全

python网络爬虫(五)——爬取天气预报

1.注册高德天气key   点击高德天气,然后按照开发者文档完成key注册;作为爬虫练习项目之一。从高德地图json数据接口获取天气,可以获取某省的所有城市天气,高德地图的这个接口还能获取县城的天气。其天气查询API服务地址为https://restapi.amap.com/v3/weather/weatherInfo?parameters,若要获取某城市的天气推荐 2.安装MongoDB

软文发稿相比其他广告形式有哪些持续性优势?

软文发稿在品牌宣发中具有显著的持续性优势,特别是在与其他广告形式的比较中更能体现这些特点。凭借其潜移默化的影响力、增强品牌权威性和公信力、持续性的曝光优势、精准触达目标受众的能力、强互动性与引导性,以及较高的性价比,已经成为品牌推广不可或缺的手段 一 长期存在与持续曝光 长时间的内容可见性     软文发表后,通常会长时间存在于各种平台上,无论是官网、博客、行业网站还是社交媒体帖子。读