前言
今天的这个脚本,是一个别人发的外包,交互界面的代码就不在这里说了,但是可以分享下自动评论、自动点赞、自动关注、采集评论和视频的数据是如何实现的
开发环境
python 3.8 运行代码
pycharm 2021.2 辅助敲代码
requests 第三方模块
原理:
模拟客户端,向服务器发送请求
对于本篇文章有疑问的同学可以加【资料白嫖、解答交流群:753182387】
代码实现
1. 请求伪装
def __init__(self):
self.headers = {
\'content-type\': \'application/json\',
\'Cookie\': \'kpf=PC_WEB; kpn=KUAISHOU_VISION; clientid=3; did=web_ea128125517a46bd491ae9ccb255e242; client_key=65890b29; didv=1646739254078; _bl_uid=pCldq3L00L61qCzj6fytnk2wmhz5; userId=270932146; kuaishou.server.web_st=ChZrdWFpc2hvdS5zZXJ2ZXIud2ViLnN0EqABH2BHihXp4liEYWMBFv9aguyfs8BsbINQIWqgoDw0SimMkpXwM7PKpKdJcZbU12QOyeKFaG4unV5EUkkEswL0HnA8_A9z2ujLlKN__gRsxU2B5kIYgirTDPiVJ3uPN1sU9mqvog3auoNJxDdbKjVeFNK1wQ5HTM_yUvYvmWOx9iC8IKcvnmo9YnG_J9ske-t-wiCWMgSCA25HN6MRqCMxuhoSnIqSq99L0mk4jolsseGdcwiNIiC8rjheuewIA1Bk3LwkNIYikU2zobcuvgAiBbMnBuDixygFMAE; kuaishou.server.web_ph=55c7e6b2033ea94a3447ea98082642cd6f1a\',
\'Host\': \'www.ks.com\',
\'Origin\': \'https://www.ks.com\',
\'Referer\': \'https://www.ks.com/search/video?searchKey=%E9%BB%91%E4%B8%9D\',
\'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36\',
}
self.url = \'https://www.ks.com/graphql\'
2. 获取搜索内容的方法
def get_search(self, keyword, pcursor):
\"\"\"
:param keyword: 关键词
:param pcursor: 页码
:return: 搜索作品
\"\"\"
json = {
\'operationName\': \"visionSearchPhoto\",
\'query\': \"fragment photoContent on PhotoEntity {\\n id\\n duration\\n caption\\n likeCount\\n viewCount\\n realLikeCount\\n coverUrl\\n photoUrl\\n photoH265Url\\n manifest\\n manifestH265\\n videoResource\\n coverUrls {\\n url\\n __typename\\n }\\n timestamp \\n animatedCoverUrl\\n distance\\n videoRatio\\n liked\\n stereoType\\n profileUserTopPhoto\\n __typename\\n}\\n\\nfragment feedContent on Feed {\\n type\\n author {\\n id\\n name\\n headerUrl\\n following\\n headerUrls {\\n url\\n __typename\\n }\\n __typename\\n }\\n photo {\\n ...photoContent\\n __typename\\n }\\n canAddComment\\n llsid\\n status\\n currentPcursor\\n __typename\\n}\\n\\nquery visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\\n visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\\n result\\n llsid\\n webPageArea\\n feeds {\\n ...feedContent\\n __typename\\n }\\n searchSessionId\\n pcursor\\n aladdinBanner {\\n imgUrl\\n link\\n __typename\\n }\\n __typename\\n }\\n}\\n\",
\'variables\': {\'keyword\': keyword, \'pcursor\': pcursor, \'page\': \"search\"}
}
response = requests.post(url=self.url, json=json, headers=self.headers)
json_data = response.json()
print(json_data)
return json_data
3. 获取作品评论
def get_comments(self, photoId, pcursor):
\"\"\"
:param photoId: 作品id
:param pcursor: 页码
:return: 评论内容
\"\"\"
json = {
\'operationName\': \"commentListQuery\",
\'query\': \"query commentListQuery($photoId: String, $pcursor: String) { visionCommentList(photoId: $photoId, pcursor: $pcursor) {\\n commentCount\\n rootComments {\\n commentId\\n authorId\\n authorName\\n content\\n headurl\\n timestamp\\n likedCount\\n realLikedCount\\n liked\\n status\\n subCommentCount\\n subCommentsPcursor\\n subComments {\\n commentId\\n authorId\\n authorName\\n content\\n headurl\\n timestamp\\n likedCount\\n realLikedCount\\n liked\\n status\\n replyToUserName\\n replyTo\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n}\\n\",
\'variables\': {\'photoId\': photoId, \'pcursor\': pcursor}
}
response = requests.post(url=self.url, json=json, headers=self.headers)
json_data = response.json()
print(json_data)
return json_data
4. 自动评论
def post_comment(self, content, photoAuthorId, photoId):
\"\"\"
:param content: 评论内容
:param photoAuthorId: 该作品的作者id
:param photoId: 作品id
:return: 有没有成功
\"\"\"
json = {
\'operationName\': \"visionAddComment\",
\'query\': \"mutation visionAddComment($photoId: String, $photoAuthorId: String, $content: String, $replyToCommentId: ID, $replyTo: ID, $expTag: String) { (photoId: $photoId, photoAuthorId: $photoAuthorId, content: $content, replyToCommentId: $replyToCommentId, replyTo: $replyTo, expTag: $expTag) {\\n result\\n commentId\\n content\\n timestamp\\n status\\n __typename\\n }\\n}\\n\",
\'variables\': {
\'content\': content,
\'expTag\': \"1_a/2005158523885162817_xpcwebsearchxxnull0\",
\'photoAuthorId\': photoAuthorId,
\'photoId\': photoId
}
}
response = requests.post(url=self.url, json=json, headers=self.headers)
json_data = response.json()
print(json_data)
return json_data
5. 点赞操作
def is_like(self, photoId, photoAuthorId):
\"\"\"
:param photoId: 作品id
:param photoAuthorId: 该作品的作者id
:return: 有没有成功
\"\"\"
json = {
\'operationName\': \"visionVideoLike\",
\'query\': \"mutation visionVideoLike($photoId: String, $photoAuthorId: String, $cancel: Int, $expTag: String) {\\n visionVideoLike(photoId: $photoId, photoAuthorId: $photoAuthorId, cancel: $cancel, expTag: $expTag) {\\n result\\n __typename\\n }\\n}\",
\'variables\': {
\'cancel\': 0,
\'expTag\': \"1_a/2005158523885162817_xpcwebsearchxxnull0\",
\'photoAuthorId\': photoAuthorId,
\'photoId\': photoId
}
}
response = requests.post(url=self.url, json=json, headers=self.headers)
json_data = response.json()
print(json_data)
return json_data
6. 关注操作
def is_follow(self, touid):
\"\"\"
:param touid: 用户id
:return:
\"\"\"
json = {
\'operationName\': \"visionFollow\",
\'query\': \"mutation visionFollow($touid: String, $ftype: Int, $followSource: Int, $expTag: String) {\\n visionFollow(touid: $touid, ftype: $ftype, followSource: $followSource, expTag: $expTag) {\\n followStatus\\n hostName\\n error_msg\\n __typename\\n }\\n}\\n\",
\'variables\': {
\'expTag\': \"1_a/2005158523885162817_xpcwebsearchxxnull0\",
\'followSource\': 3,
\'ftype\': 1,
\'touid\': touid
}
}
response = requests.post(url=self.url, json=json, headers=self.headers)
json_data = response.json()
print(json_data)
return json_data
7. 获取创作者信息
def get_userInfo(self, userId):
\"\"\"
:param userId: 用户ID
:return: 用户信息
\"\"\"
json = {
\'operationName\': \"visionProfile\",
\'query\': \"query visionProfile($userId: String) {\\n visionProfile(userId: $userId) {\\n hostName\\n userProfile {\\n ownerCount {\\n fan\\n photo\\n follow\\n photo_public\\n __typename\\n }\\n profile {\\n gender\\n user_name\\n user_id\\n headurl\\n user_text\\n user_profile_bg_url\\n __typename\\n }\\n isFollowing\\n __typename\\n }\\n __typename\\n }\\n}\\n\",
\'variables\': {\'userId\': userId}
}
response = requests.post(url=self.url, json=json, headers=self.headers)
json_data = response.json()
print(json_data)
return json_data
8. 获取创作者视频
def get_video(self, userId, pcursor):
\"\"\"
:param userId: 用户id
:param pcursor: 页码
:return: 作品
\"\"\"
json = {
\'operationName\': \"visionProfilePhotoList\",
\'query\': \"fragment photoContent on PhotoEntity {\\n duration\\n caption\\n likeCount\\n viewCount\\n realLikeCount\\n coverUrl\\n photoUrl\\n photoH265Url\\n manifest\\n manifestH265\\n videoResource\\n coverUrls {\\n url\\n __typename\\n }\\n timestamp\\n expTag\\n animatedCoverUrl\\n distance\\n videoRatio\\n liked\\n stereoType\\n profileUserTopPhoto\\n __typename\\n}\\n\\nfragment feedContent on Feed {\\n type\\n author {\\n id\\n name\\n headerUrl\\n following\\n headerUrls {\\n url\\n __typename\\n }\\n __typename\\n }\\n photo {\\n ...photoContent\\n __typename\\n }\\n canAddComment\\n llsid\\n status\\n currentPcursor\\n __typename\\n}\\n\\nquery visionProfilePhotoList($pcursor: String, $userId: String, $page: String, $webPageArea: String) {\\n visionProfilePhotoList(pcursor: $pcursor, userId: $userId, page: $page, webPageArea: $webPageArea) {\\n result\\n llsid\\n webPageArea\\n feeds {\\n ...feedContent\\n __typename\\n }\\n hostName\\n pcursor\\n __typename\\n }\\n}\\n\",
\'variables\': {\'userId\': userId, \'pcursor\': pcursor, \'page\': \"profile\"}
}
response = requests.post(url=self.url, json=json, headers=self.headers)
json_data = response.json()
print(json_data)
return json_data
9. 调用函数
if __name__ == \'__main__\':
kuaishou = KuaiShou()
# 获取评论
kuaishou.get_comments(\'3xzry7secwhunai\', \'\')
# 发布评论
kuaishou.post_comment(\'爱你\', \'3xgz9zaku7hig96\', \'3xydesqbvtrvcuq\')
# 点赞
kuaishou.is_like(\'3xydesqbvtrvcuq\', \'3xgz9zaku7hig96\')
# 关注
kuaishou.is_follow(\'3xxhfqquuachnje\')
# 创作者信息
kuaishou.get_userInfo(\'3xxhfqquuachnje\')
# 获取创作者作品
kuaishou.get_video(\'3xxhfqquuachnje\', \'\')
来源:https://www.cnblogs.com/qshhl/p/16323888.html
本站部分图文来源于网络,如有侵权请联系删除。