爱收集资源网

2021.3.12获取主播信息今天把django相关的书

网络整理 2024-01-29 12:06

# 输出快手ID和cookie
class userdetailLiveSpider():

    URL = "https://live.kuaishou.com/m_graphql"

    headers = {
        "accept": "*/*",
        "Content-Length": "",
        "Accept-Encoding": "gzip, deflate",
        "Connection": "keep-alive",
        "content-type": "application/json",
        # 我添加的时间属性Max-Age=8640000
        "Cookie": r'clientid=3;Max-Age=8640000; did=web_ec874916e390b9741609686125a0452e; didv=1613879531823; client_key=65890b29; kpn=GAME_ZONE; userId=427400950; kuaishou.live.bfb1s=7206d814e5c089a58c910ed8bf52ace5; userId=427400950; kuaishou.live.web_st=ChRrdWFpc2hvdS5saXZlLndlYi5zdBKgAYm9VZdJaOIjsJDqPoO-yLNw4ZuZul234nekkYMdMsNjIq-i5skiOlVnLhFSPv5PTbrQ45yitiFEkQMGUCDxpsbRcsDpHI0CDZfflQeD9Z14cuQ8x2YJORv-1Pz8JM4-_qmBhAxjVHJ8OSs4kMHRKpCvZja6UUYbXLunFhKT5fyhx1HViPCmuVjBcsSxZEtEpvponSa3DjtkZU2KQ3M9pUoaEm-zwBmcbUA4lm5ejQnh9kVjySIgjJsh3xaj6ckXgLNLF3iPjKs6sC7d1lWqH0SZbWeHTREoBTAB; kuaishou.live.web_ph=ed6156f0bc66780438d593dfc3b3f8fa6f63',
        "Host": "live.kuaishou.com",
        "Origin": "https://live.kuaishou.com",
        "Referer": "https://live.kuaishou.com/profile/LY7452065",
        "User-Agent": "PostmanRuntime/7.26.8"
    }

    payload = {"operationName": "publicFeedsQuery",
               "variables": {"principalId": "JTYYA13-", "pcursor": "", "count": 24},
               "query": "query publicFeedsQuery($principalId: String, $pcursor: String, $count: Int) {\n  publicFeeds(principalId: $principalId, pcursor: $pcursor, count: $count) {\n    pcursor\n    live {\n      user {\n        id\n        avatar\n        name\n        __typename\n      }\n      watchingCount\n      poster\n      coverUrl\n      caption\n      id\n      playUrls {\n        quality\n        url\n        __typename\n      }\n      quality\n      gameInfo {\n        category\n        name\n        pubgSurvival\n        type\n        kingHero\n        __typename\n      }\n      hasRedPack\n      liveGuess\n      expTag\n      __typename\n    }\n    list {\n      id\n      thumbnailUrl\n      poster\n      workType\n      type\n      useVideoPlayer\n      imgUrls\n      imgSizes\n      magicFace\n      musicName\n      caption\n      location\n      liked\n      onlyFollowerCanComment\n      relativeHeight\n      timestamp\n      width\n      height\n      counts {\n        displayView\n        displayLike\n        displayComment\n        __typename\n      }\n      user {\n        id\n        eid\n        name\n        avatar\n        __typename\n      }\n      expTag\n      isSpherical\n      __typename\n    }\n    __typename\n  }\n}\n"}

    def __init__(self,userId,myCookie):
        self.headers["Referer"] = "https://live.kuaishou.com/profile/"+userId
        self.payload["variables"]["principalId"] = userId
        self.headers["Cookie"] = myCookie

    def get_data(self):
        try:
            res = requests.post(self.URL, headers=self.headers, json=self.payload)
            res.encoding = "utf-8"
            m_json = res.json()  # 字典格式

            feeds_list = m_json["data"]["publicFeeds"]["list"]
            pcursor = m_json["data"]["publicFeeds"]["pcursor"]
            self.payload["variables"]["pcursor"] = pcursor
            # print(m_json)

            #-------------筛选数据---------------#
            result = {}
            for feeds in feeds_list:
                result["caption"] = feeds["caption"]
                # 播放量,点赞数,评论数
                result["displayView"] = feeds["counts"]["displayView"]
                result["displayLike"] = feeds["counts"]["displayLike"]
                result["displayComment"] = feeds["counts"]["displayComment"]
                # 相册,可能为空,可能为列表
                result["imgUrls"] = feeds["imgUrls"]
                result["liveID"] = feeds["id"]
                print(result)
        except:
            print("页面请求错误,请检查cookie是否过期,id是否正确")
if __name__ == "__main__":
    theCookie = "kpf=PC_WEB; kpn=KUAISHOU_VISION; clientid=3; clientid=3;Max-Age=8640000; did=web_ec874916e390b9741609686125a0452e; didv=1613879531823; client_key=65890b29; userId=427400950; kuaishou.server.web_st=ChZrdWFpc2hvdS5zZXJ2ZXIud2ViLnN0EqABQrFWsr52Mhp5GfcmignSLoddGbbCBCTAkyedrcLkHqxI9IIdilOuxFUWwhS41WnVKwFJ0Win96_M-frAXGNXXDx78d0FjGOylLgeVtcXUGsIkgyxVkopf2IR_Pvps61IaXw1XTHZOdTrwQkDIdwESPDssQTuW9XNIfjJK9e88ZgJYNJI5bK5n38Zm37kl8omE8R8E8ZhL87TgGpaRZq3XRoSTdCMiCqspRXB3AhuFugv61B-IiBO8gZCTy1dvCTjyGg0IEN6MrmkUACDgSB3T2BYkkBQ-SgFMAE; kuaishou.server.web_ph=dfcba445b9b7f619411fdced6b1e61d6f207"
    theUserID = "3xkm67762d5fwzc"

    test = userdetailLiveSpider(theUserID,theCookie)
    test.get_data()

之后写一下循环,再合并一下,或重新建立一个展示相册的页面。

整合过程中,假如live中的id存在video的视频id,怎说明整合,假如没有就是相册,则添加。

获取用户详尽信息userTitle表储存用户id和name以及创建时间,之前准备在创建userDetail,把userTitle当成字段,但其不是一对多的关系,还是降低数组。

似乎可以在model中添加执行动作的函数。

添加视频信息时,要通过用户id字段插口添加

观察须要提取的信息

ksID时一个很重要的信息,假如有须要再添加把。

好吧,还是恳求live开头的页面,把ksID也存上去

天秤和地址也存着把

建表的时侯添加一个数组,来表示一些状态。

我认为还是先学习一下model中写函数,等下便捷自己添加数据。

,这篇博客里面用到了多对多关系,使用

authors=models.ManyToManyField("Author")

还是歇一歇,瞧瞧书里面如何搞的,上次再干。2021.3.12获取主播信息

明天把django相关的书看了一下,之前表之间一对多,多对多里面有写道,可能自己之前没注意。之后,觉得对django了解得差不多了。看了一下笔试的题目,结果几乎不会,起码是通常书上是没有的。

明天原本依照思路写很顺利的,但开始就出现了问题:我即使是扫码登陆后查看live开头的主播页面,看不到作品,之后跑userdetailLiveSpider对象不成功,像是网路问题。

好吧,网页上可以访问了,瞧瞧我的这个对象有哪些问题,里面一个对象运行是成功的。

目前恐怕是cookie问题,live开头的cookie有效时间比较短,我尝试更换cookie。

不是cookie问题,我再去官网刷新没有数据,先不管了,写获取主播信息的逻辑

恳求头的信息相同,不同的就是payload,还是单独写个类

这个cookie和之前的不一样,要重新复制一个,不然显示为登陆。这是成功的信息

{'data': {'sensitiveUserInfo': {'kwaiId': 'synsyn520521', 'originUserId': '943759388', 'constellation': '双子座', 'cityName': '山东 济宁市', 'counts': {'fan': '115.8w', 'follow': '151', 'photo': '66', 'liked': None, 'open': 66, 'playback': 0, 'private': None, '__typename': 'CountInfo'}, '__typename': 'User'}}}

如今写提取信息的逻辑

代码。

class ksLiveSpider():
    URL = "https://live.kuaishou.com/m_graphql"

    headers = {
        "accept": "*/*",
        "Content-Length": "",
        "Accept-Encoding": "gzip, deflate",
        "Connection": "keep-alive",
        "content-type": "application/json",
        # 我添加的时间属性Max-Age=8640000
        "Cookie": r'clientid=3;Max-Age=8640000; did=web_ec874916e390b9741609686125a0452e; didv=1613879531823; client_key=65890b29; kpn=GAME_ZONE; userId=427400950; kuaishou.live.bfb1s=7206d814e5c089a58c910ed8bf52ace5; userId=427400950; kuaishou.live.web_st=ChRrdWFpc2hvdS5saXZlLndlYi5zdBKgAYm9VZdJaOIjsJDqPoO-yLNw4ZuZul234nekkYMdMsNjIq-i5skiOlVnLhFSPv5PTbrQ45yitiFEkQMGUCDxpsbRcsDpHI0CDZfflQeD9Z14cuQ8x2YJORv-1Pz8JM4-_qmBhAxjVHJ8OSs4kMHRKpCvZja6UUYbXLunFhKT5fyhx1HViPCmuVjBcsSxZEtEpvponSa3DjtkZU2KQ3M9pUoaEm-zwBmcbUA4lm5ejQnh9kVjySIgjJsh3xaj6ckXgLNLF3iPjKs6sC7d1lWqH0SZbWeHTREoBTAB; kuaishou.live.web_ph=ed6156f0bc66780438d593dfc3b3f8fa6f63',
        "Host": "live.kuaishou.com",
        "Origin": "https://live.kuaishou.com",
        "Referer": "https://live.kuaishou.com/profile/LY7452065",
        "User-Agent": "PostmanRuntime/7.26.8"
    }

    payload = {"operationName":"sensitiveUserInfoQuery","variables":{"principalId":"3xkm67762d5fwzc"},"query":"query sensitiveUserInfoQuery($principalId: String) {\n  sensitiveUserInfo(principalId: $principalId) {\n    kwaiId\n    originUserId\n    constellation\n    cityName\n    counts {\n      fan\n      follow\n      photo\n      liked\n      open\n      playback\n      private\n      __typename\n    }\n    __typename\n  }\n}\n"}
    def __init__(self,userId,myCookie):
        self.headers["Referer"] = "https://live.kuaishou.com/profile/"+userId
        self.payload["variables"]["principalId"] = userId
        self.headers["Cookie"] = myCookie
    def get_data(self):
        try:
            res = requests.post(self.URL, headers=self.headers, json=self.payload)
            res.encoding = "utf-8"
            m_json = res.json()  # 字典格式
            print(m_json)

            result = {}
            #---------提取有用数据--------#

            result["ksId"] = m_json["data"]["sensitiveUserInfo"]["kwaiId"]
            result["xinzuo"] = m_json["data"]["sensitiveUserInfo"]["constellation"]
            result["cityName"] = m_json["data"]["sensitiveUserInfo"]["cityName"]
            result["fan"] = m_json["data"]["sensitiveUserInfo"]["counts"]["fan"]
            result["follow"] = m_json["data"]["sensitiveUserInfo"]["counts"]["follow"]
            # 作品数
            result["photo"] = m_json["data"]["sensitiveUserInfo"]["counts"]["photo"]

            print(result)

        except:
            print("页面请求错误,请检查cookie是否过期,id是否正确")
if __name__ == "__main__":
    theCookie = "kpf=PC_WEB; kpn=KUAISHOU_VISION; clientid=3; clientid=3;Max-Age=8640000; did=web_ec874916e390b9741609686125a0452e; didv=1613879531823; client_key=65890b29; userId=427400950; kuaishou.server.web_st=ChZrdWFpc2hvdS5zZXJ2ZXIud2ViLnN0EqABQrFWsr52Mhp5GfcmignSLoddGbbCBCTAkyedrcLkHqxI9IIdilOuxFUWwhS41WnVKwFJ0Win96_M-frAXGNXXDx78d0FjGOylLgeVtcXUGsIkgyxVkopf2IR_Pvps61IaXw1XTHZOdTrwQkDIdwESPDssQTuW9XNIfjJK9e88ZgJYNJI5bK5n38Zm37kl8omE8R8E8ZhL87TgGpaRZq3XRoSTdCMiCqspRXB3AhuFugv61B-IiBO8gZCTy1dvCTjyGg0IEN6MrmkUACDgSB3T2BYkkBQ-SgFMAE; kuaishou.server.web_ph=dfcba445b9b7f619411fdced6b1e61d6f207"
    theUserID = "3xkm67762d5fwzc"
    ksCookie = "clientid=3; did=web_ec874916e390b9741609686125a0452e; didv=1613879531823; client_key=65890b29; kpn=GAME_ZONE; userId=427400950; userId=427400950; kuaishou.live.bfb1s=ac5f27b3b62895859c4c1622f49856a4; kuaishou.live.web_st=ChRrdWFpc2hvdS5saXZlLndlYi5zdBKgAfwzFw_Kb2uHnKBQgQQ9-nhGuO2rbpCerVYO54A3KmQUQ6JOiQO-mLFbcwABZ9A-Fl2X5WxQ9yuXHLsMV-RsuZygWUnugryt27cp6rgKzgLI7y6ar8R1RdP6CUPp1JTjbgZ6uzAdhQdayNbiM-isllV5Yyj9bb4IK_LPqzxYDjf_uy0QRa_YxWiMtTUPQd8CFinqBXb7gj-o9HNOZG_v1y0aEk2hY_LIikBot7IUVtJ3ydB6KCIgmvgxlD_4Ac99qgHpdvBfsxGugwTfosyEsfq-BaaFMG0oBTAB; kuaishou.live.web_ph=ae0615d67633a6c0debe8d4668be19e1d446"
    test = ksLiveSpider(theUserID,ksCookie)
    test.get_data()

更改model接出来更改model中的数组。这是之前数组

class UserTitle(models.Model):
    userID = models.CharField(max_length=256,unique=True,verbose_name="用户id")
    userName = models.CharField(max_length=256,verbose_name="用户名")
    createTime = models.DateTimeField(default=datetime.now,verbose_name="创建时间")

着重要添加一个状态数组。

想起了头像地址数组,须要再viedo页面获取

好吧,live开头恳求的数据连caption都没有,还是打算再爬取video用户界面的信息

筛选吧。写吐了,明天上了软件工程,看来真的很重要。

{'data': {'visionProfile': {'result': 1, 'hostName': 'webservice-bjxy-rs9150.idcyz.hb1.kwaidc.com', 'userProfile': {'ownerCount': {'fan': '128.9w', 'photo': None, 'follow': 438, 'photo_public': 68, '__typename': 'VisionUserProfileOwnerCount'}, 'profile': {'gender': 'F', 'user_name': '南希阿-', 'user_id': '3xcidpetejrcagy', 'headurl': 'https://tx2.a.yximgs.com/uhead/AB/2020/08/17/09/BMjAyMDA4MTcwOTM2MDNfMjQ0NzAyMDZfMV9oZDM4Nl8xODU=_s.jpg', 'user_text': '谢谢你在世界的角落里找到我', 'user_profile_bg_url': '//s2-10623.kwimgs.com/kos/nlav10623/vision_images/profile_background.5bc08b1bf4fba1f4.svg', '__typename': 'VisionUserProfileUser'}, 'isFollowing': True, '__typename': 'VisionUserProfile'}, '__typename': 'VisionProfileResult'}}}

代码

# 获取video页面的主播信息
class ksVideoSpider():
    URL = "https://video.kuaishou.com/graphql"

    # header中需要更改cookie和Referer
    headers = {
        "accept": "*/*",
        "Content-Length": "",
        "Accept-Encoding": "gzip, deflate",
        "Connection": "keep-alive",
        "content-type": "application/json",
        # 我添加的时间属性Max-Age=8640000
        "Cookie": r'kpf=PC_WEB; kpn=KUAISHOU_VISION; clientid=3;Max-Age=8640000; did=web_ec874916e390b9741609686125a0452e; didv=1613879531823; client_key=65890b29; userId=427400950; kuaishou.server.web_st=ChZrdWFpc2hvdS5zZXJ2ZXIud2ViLnN0EqABQrFWsr52Mhp5GfcmignSLoddGbbCBCTAkyedrcLkHqxI9IIdilOuxFUWwhS41WnVKwFJ0Win96_M-frAXGNXXDx78d0FjGOylLgeVtcXUGsIkgyxVkopf2IR_Pvps61IaXw1XTHZOdTrwQkDIdwESPDssQTuW9XNIfjJK9e88ZgJYNJI5bK5n38Zm37kl8omE8R8E8ZhL87TgGpaRZq3XRoSTdCMiCqspRXB3AhuFugv61B-IiBO8gZCTy1dvCTjyGg0IEN6MrmkUACDgSB3T2BYkkBQ-SgFMAE; kuaishou.server.web_ph=dfcba445b9b7f619411fdced6b1e61d6f207',
        "Host": "video.kuaishou.com",
        "Origin": "https://video.kuaishou.com",
        "Referer": "https://video.kuaishou.com/profile/3xcidpetejrcagy",
        "User-Agent": "PostmanRuntime/7.26.8"
    }
    # 这里的userID也要更改
    payload = {"operationName":"visionProfile","variables":{"userId":"3xcidpetejrcagy"},"query":"query visionProfile($userId: String) {\n  visionProfile(userId: $userId) {\n    result\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"}
    def __init__(self, userID, myCookie):
        userdetailSpider.headers["Referer"] = "https://video.kuaishou.com/profile/"+userID
        userdetailSpider.payload["variables"]["userId"] = userID
        userdetailSpider.headers["Cookie"] = myCookie

    def get_data(self):
        try:
            res = requests.post(self.URL, headers=self.headers, json=self.payload)
            res.encoding = "utf-8"
            m_json = res.json()  # 字典格式
            print(m_json)

            result = {}
            #---------提取有用数据--------#
            result["user_text"] = m_json["data"]["visionProfile"]["userProfile"]["profile"]["user_text"]
            result["gender"] = m_json["data"]["visionProfile"]["userProfile"]["profile"]["gender"]
            result["userImg"] = m_json["data"]["visionProfile"]["userProfile"]["profile"]["headurl"]

            print(result)

        except:
            print("页面请求错误,请检查cookie是否过期,id是否正确")
if __name__ == "__main__":
    theCookie = "kpf=PC_WEB; kpn=KUAISHOU_VISION; clientid=3; clientid=3;Max-Age=8640000; did=web_ec874916e390b9741609686125a0452e; didv=1613879531823; client_key=65890b29; userId=427400950; kuaishou.server.web_st=ChZrdWFpc2hvdS5zZXJ2ZXIud2ViLnN0EqABQrFWsr52Mhp5GfcmignSLoddGbbCBCTAkyedrcLkHqxI9IIdilOuxFUWwhS41WnVKwFJ0Win96_M-frAXGNXXDx78d0FjGOylLgeVtcXUGsIkgyxVkopf2IR_Pvps61IaXw1XTHZOdTrwQkDIdwESPDssQTuW9XNIfjJK9e88ZgJYNJI5bK5n38Zm37kl8omE8R8E8ZhL87TgGpaRZq3XRoSTdCMiCqspRXB3AhuFugv61B-IiBO8gZCTy1dvCTjyGg0IEN6MrmkUACDgSB3T2BYkkBQ-SgFMAE; kuaishou.server.web_ph=dfcba445b9b7f619411fdced6b1e61d6f207"
    theUserID = "3xkm67762d5fwzc"
    ksCookie = "clientid=3; did=web_ec874916e390b9741609686125a0452e; didv=1613879531823; client_key=65890b29; kpn=GAME_ZONE; userId=427400950; userId=427400950; kuaishou.live.bfb1s=ac5f27b3b62895859c4c1622f49856a4; kuaishou.live.web_st=ChRrdWFpc2hvdS5saXZlLndlYi5zdBKgAfwzFw_Kb2uHnKBQgQQ9-nhGuO2rbpCerVYO54A3KmQUQ6JOiQO-mLFbcwABZ9A-Fl2X5WxQ9yuXHLsMV-RsuZygWUnugryt27cp6rgKzgLI7y6ar8R1RdP6CUPp1JTjbgZ6uzAdhQdayNbiM-isllV5Yyj9bb4IK_LPqzxYDjf_uy0QRa_YxWiMtTUPQd8CFinqBXb7gj-o9HNOZG_v1y0aEk2hY_LIikBot7IUVtJ3ydB6KCIgmvgxlD_4Ac99qgHpdvBfsxGugwTfosyEsfq-BaaFMG0oBTAB; kuaishou.live.web_ph=ae0615d67633a6c0debe8d4668be19e1d446"
    test = ksVideoSpider(theUserID,ksCookie)
    test.get_data()

目前写了四个类了,相互补充可以得出完整的主播信息,把数据库数组填写完成。

class UserTitle(models.Model):
#女为F,男为M
    GENDER = [
        (0,"未知"),
        (1,"男"),
        (2,"女")
    ]

    STATE = [
        (0,"初次爬取"),
        (1,"测试")
    ]

    USERIMG = "https://tx2.a.yximgs.com/uhead/AB/2020/08/17/09/BMjAyMDA4MTcwOTM2MDNfMjQ0NzAyMDZfMV9oZDM4Nl8xODU=_s.jpg"
    userID = models.CharField(max_length=256,unique=True,verbose_name="用户id")
    userName = models.CharField(max_length=256,verbose_name="用户名")
    createTime = models.DateTimeField(default=datetime.now,verbose_name="创建时间")


    stateUser = models.IntegerField(choices=STATE,verbose_name="用户信息状态",default=0)

    ksID = models.CharField(max_length=128,verbose_name="快手id",default="xxxxxxxxxxxxxx")
    user_text = models.CharField(max_length=2560,verbose_name="用户简述",default="xxxxxxxxxxxxx")
    gender = models.IntegerField(choices=GENDER,verbose_name="性别",default=0)
    fan = models.CharField(max_length=32,verbose_name="粉丝数",default="-1")
    xinzuo = models.CharField(max_length=32,verbose_name="星座",default="未知")
    cityName = models.CharField(max_length=32,verbose_name="地址",default="未知")
    follow = models.CharField(max_length=32,verbose_name="关注的数量",default="-1")
    photo = models.CharField(max_length=32,verbose_name="作品数量",default="-1")
    userImg = models.CharField(max_length=256,verbose_name="图片地址",default=USERIMG)


    def __str__(self):
        return self.userName

    class Mate:
        verbose_name = verbose_name_plural = "用户ID和名字"

刚开始把ksID设置了uinque=True,结果migrate的时侯报错,改回去了makemigrations再migrate还是保存,我把app01中的3.12创建的几个文件删掉了网页点赞,再执行命令一遍就成功了。要是曾经碰到这样的问题,可能是删掉数据库了。

这个博客讲解了给admin添加动作:

完成了简单的测试,如今可以把对象加入到其中了。

from django.contrib import admin

# Register your models here.
from .models import UserTitle

class UserTitleAdmin(admin.ModelAdmin):
    # 显示的字段
    list_display = ["userName","stateUser"]
    # 过滤器
    list_filter = ["stateUser"]
    # 搜索器
    search_fields = ["userName"]
    # 分页
    list_per_page = 50

    # 执行的动作需要这两个参数,第二个为.query.QuerySet对象,就是选中的数据,通过for循环,通过.调用属性
    def mytest(self,request,queryset):
        for qu in queryset:
            print(qu.userName)
        print(request,type(queryset))

    mytest.short_description = "测试"

    actions = [mytest,]

    # Action选项都是在页面上方显示
    actions_on_top = True
    # Action选项都是在页面下方显示
    actions_on_bottom = False

    # 是否显示选择个数
    actions_selection_counter = True

admin.site.register(UserTitle,UserTitleAdmin)

我再setting文件中创建了一个类,来储存cookie信息,以便更改和使用。弥补信息类的输出

{'ksId': 'synsyn520521', 'xinzuo': '双子座', 'cityName': '山东 济宁市', 'fan': '115.9w', 'follow': '151', 'photo': '65'}

{'user_text': '谢谢你在世界的角落里找到我', 'gender': 'F', 'userImg': 'https://tx2.a.yximgs.com/uhead/AB/2020/08/17/09/BMjAyMDA4MTcwOTM2MDNfMjQ0NzAyMDZfMV9oZDM4Nl8xODU=_s.jpg'}

状态设置state描述

初次爬取,只有username和userid

ksvideo

kslive

ksvideo+kslive

目前状态相关的逻辑不完美,例如为3执行ksvideo就弄成了状态1,代表还要进行kslive,然而kslive数组早已添加了,使用时注意没必要给状态3执行动作。

两个逻辑我是这样写的,而且这样似乎不能改变数据库中相关的数据

 # 执行的动作需要这两个参数,第二个为.query.QuerySet对象,就是选中的数据,通过for循环,通过.调用属性
    def myksVideo(self,request,queryset):
        cData = currentData()
        for qu in queryset:
            ksVideo = ksVideoSpider(qu.userID,cData.ksCookie)
            result = ksVideo.get_data()
            #-----填写数据-------------#
            qu.user_text = result["user_text"]
            if result["gender"] == "F":
                qu.gender = 2
            elif result["gender"] == "M":
                qu.gender = 1
            else:
                qu.gender = 0
            qu.userImg = result["userImg"]
            #---------完成----------#
            if qu.stateUser == 2:
                qu.stateUser = 3
            else:
                qu.stateUser = 1
            # print(result)

        #print(request,type(queryset))
    myksVideo.short_description = "添加ksVideo字段"

    def myksLive(self,request,queryset):
        cData = currentData()
        for qu in queryset:
            ksLive = ksLiveSpider(qu.userID,cData.ksCookie)
            result = ksLive.get_data()
            #-----填写数据-------------#
            qu.ksID = result["ksID"]
            qu.xinzuo = result["xinzuo"]
            qu.cityName = result["cityName"]
            qu.fan = result["fan"]
            qu.follow = result["follow"]
            qu.photo = result["photo"]

            #---------完成----------#
            if qu.stateUser == 1:
                qu.stateUser = 3
            else:
                qu.stateUser = 2
            # print(result)

        #print(request,type(queryset))
    myksLive.short_description = "添加ksLive字段"

我分别再函数中调用model筛选和更新数据的函数,成功实现功能

UserTitle.objects.filter(userID=qu.userID).update(user_text=qu.user_text,gender=qu.gender,userImg=qu.userImg,stateUser=qu.stateUser)

UserTitle.objects.filter(userID=qu.userID).update(ksID=qu.ksID,
                                                  xinzuo=qu.xinzuo,
                                                  cityName=qu.cityName,
                                                  fan=qu.fan,
                                                  follow=qu.follow,
                                                  photo=qu.photo,
                                                  stateUser=qu.stateUser)

网页点赞_整理房间日记200_给网站点赞会记录吗

测试成功,而且我有的个数据添加live不成功,报错没有ksID数组。但不影响其他数据的添加。

            if qu.ksID == None:
                qu.ksID = "无法获取ksID"
            UserTitle.objects.filter(userID=qu.userID).update(ksID=qu.ksID,
                                                              xinzuo=qu.xinzuo,
                                                              cityName=qu.cityName,
                                                              fan=qu.fan,
                                                              follow=qu.follow,
                                                              photo=qu.photo,
                                                              stateUser=qu.stateUser)

6明天就到这了,今天和同事一起去景点旅游。

今天把功能录一个演示视频。

实现前端功能,是通过按键触发js的函数,之后想前端的插口post实现相应的功能。这是再《跟老齐学django》上见到的。

2021.3.13

明天下雪了,不出去玩了

IP问题我晚上跑了一下userdetailSpider(theUserID,theCookie),刚开始是好的,之后就返回None之后我就去浏览器总刷新,刷新不下来视频。我怀疑是因为访问得太快,暂时的封锁了IP还有None问题,假若不处理才会始终恳求而且返回None。这个问题就是我之前提到的result,为1代表成功果然是暂时性的,我没有修改cookie,再去怕代码成功了,但还是要加上延时函数。这叫恳求太快,亲求失败吧。我把延时函数删掉了,跑了几次都是成功的,只得先这样写着。

            if m_json["data"]["visionProfilePhotoList"]["result"] == 1:
                print("请求成功,开始筛选数据")
            else:
                print("请求数据失败,无法筛选,程序终止")
                return -1

筛选数据这是视频信息

{'caption': '锦上添花我不需要 雪中送炭你做不到', 'coversUrl': 'https://tx2.a.yximgs.com/upic/2018/03/24/19/BMjAxODAzMjQxOTIyNDVfMTA1MjM4MjNfNTYwMzAxNTQwNF8xXzM=_B73ece8a2ba15635894bd1d22c88ab2ab.jpg?tag=1-1615596637-xpcwebprofile-0-c2teex2jjk-fe86cc6122e6e5cc&clientCacheKey=3xp87jw5zmeue69.jpg&di=75960068&bp=14734', 'videoID': '3xp87jw5zmeue69', 'videoPath': 'https://txmov2.a.yximgs.com/upic/2018/03/24/19/BMjAxODAzMjQxOTIyNDVfMTA1MjM4MjNfNTYwMzAxNTQwNF8xXzM=_b_B4e460c2dedc40be078e7a315389327f8.mp4?tag=1-1615596637-xpcwebprofile-0-nc4gujqkgj-65ff48b3ed0c2822&clientCacheKey=3xp87jw5zmeue69_b.mp4&tt=b&di=75960068&bp=14734', 'likeCount': '30', 'realLikeCount': 30, 'animatedCoverUrl': None}

网页上我要是开启代理刷新都会出现数据。live开头的恳求视频似乎会封锁ip,我打算再juoyterlab上试一下网页点赞,结果进去不了,可能是家里的旧笔记本又被如何了。整理。创建视频表。

class UserVideo(models.Model):
    STATE = [
        (1,"默认ksVideo"),
        (2,"ksLive"),
        (3,"ksVideo+ksLive")
    ]
    # 当被参照删除时,自己也被删除
    theUser = models.ForeignKey(UserTitle,on_delete=models.CASCADE)

    videoID = models.CharField(max_length=128,default="xxxxxxxxxxxxxx",verbose_name="视频id")
    caption = models.CharField(max_length=512,default="暂无",verbose_name="视频描述")
    coversUrl = models.CharField(max_length=512,default="xxxxxxxxxxx",verbose_name="视频封面")
    videoPath = models.CharField(max_length=512,default="xxxxxxxxxxxxx",verbose_name="视频地址")
    realLikeCount = models.CharField(max_length=64,default="xxxxxxxxxxx",verbose_name="具体点赞数量")
    animatedCoverUrl = models.CharField(max_length=512,default="xxxxxxxx",verbose_name="封面动画")

    stateVideo = models.IntegerField(choices=STATE,default=1,verbose_name="状态")

    displayView = models.CharField(max_length=64,default="-1",verbose_name="播放量")
    displayComment = models.CharField(max_length=64,default="-1",verbose_name="评论数")

之后改了一下类,把爬取到的数据以列表方式存取到endResult属性中。由于通常文件不能调用.model这个博客,演示了一对多如何添加数据:

            for result in results:
                UserTitle.objects.get(userId = qu.userID).theUser.objects.create(videoID = result["videoID"],
                                                                                 caption = result["caption"],
                                                                                 coversUrl = result["coversUrl"],
                                                                                 videoPath = result["videoPath"],
                                                                                 realLikeCount = result["realLikeCount"],
                                                                                 animatedCoverUrl=result["animatedCoverUrl"],
                                                                                 )

如今体验到了,网站数据一多,执行操作上去就很卡,删掉所有数据不是马上的事情。添加video动作遇见了animatedCoverUrl数组报错,添加一个判定就可以了

                if result["animatedCoverUrl"] == None:
                    result["animatedCoverUrl"] = "一直没有"

遇见状态没有改变的问题,把转台形参句子写在for外边

 def myvideoMP4(self,request,queryset):
        cData = currentData()
        for qu in queryset:
            thevideo = userdetailSpider(qu.userID,cData.theCookie)
            thevideo.start_spider()
            results = thevideo.endResult

            ttUser = UserTitle.objects.get(userID=qu.userID)
            for result in results:

                if result["animatedCoverUrl"] == None:
                    result["animatedCoverUrl"] = "一直没有"
                print(result["videoID"])
                time.sleep(1)
                temp = UserVideo.objects.create(videoID = result["videoID"],
                                        caption = result["caption"],
                                        coversUrl = result["coversUrl"],
                                        videoPath = result["videoPath"],
                                        realLikeCount = result["realLikeCount"],
                                        animatedCoverUrl=result["animatedCoverUrl"],

                                         theUser = ttUser)
                temp.save()
                del temp
            ttUser.stateUser = 4
            ttUser.save()
            del ttUser

就是这样把,还有个问题没解决。填入的数据又好多时重复的。我降低了一秒的延后还是不行如今去看一下原生的endResult的数值

对象输出的数据是重复的,是爬虫的问题

应当是我吧endResult属性写在了,__init__中,但是初始化为空列表。应当是这个地方逻辑的问题

 #-------------具体提取数据----------#写到这里想起了,我应该是通过live获取视频信息
            result = {}     #信息存储在字典中
            for feeds in feeds_list:
                result["caption"] = feeds["photo"]["caption"]
                result["coversUrl"] = feeds["photo"]["coverUrl"]
                result["videoID"] = feeds["photo"]["id"]
                result["videoPath"] = feeds["photo"]["photoUrl"]
                result["likeCount"] = feeds["photo"]["likeCount"]
                result["realLikeCount"] = feeds["photo"]["realLikeCount"]
                result["animatedCoverUrl"] = feeds["photo"]["animatedCoverUrl"]
                self.endResult.append(result)
                print(result)
                #-----------待会再这里编写存储到数据库的函数--------------

确实,改成这样就没问题了

            #-------------具体提取数据----------#写到这里想起了,我应该是通过live获取视频信息
            # result = {}     #信息存储在字典中
            for feeds in feeds_list:
                result = {}
                result["caption"] = feeds["photo"]["caption"]
                result["coversUrl"] = feeds["photo"]["coverUrl"]
                result["videoID"] = feeds["photo"]["id"]
                result["videoPath"] = feeds["photo"]["photoUrl"]
                result["likeCount"] = feeds["photo"]["likeCount"]
                result["realLikeCount"] = feeds["photo"]["realLikeCount"]
                result["animatedCoverUrl"] = feeds["photo"]["animatedCoverUrl"]
                self.endResult.append(result)
                print(result)
                del result
                #-----------待会再这里编写存储到数据库的函数--------------

打算录演示视频的,过程中有一个主播,出现视频没有爬取完全的问题测试爬取是完整的,可能是我在执行动作的时侯点击别的给终端了把。那种爬取全部视频的运行时间有些长,先不录视频了。建立Live对象

原本应当去做后台统计和获取热门页面的userid和name的,并且有些不甘愿,想把获取相册的对象写完整,这样就可以产看是否否获取到了全部作品了。

刷新了好几次页面,还是显示不了作品。之后尝试live+ksID,可以访问,这么,就须要调用库上面早已储存的ksID来进行相关逻辑的编撰。成功,这是不包含相册的一条数据

{'caption': '“留下来 或者我跟你走”', 'displayView': '903.6w', 'displayLike': '48.1w', 'displayComment': '1.3w', 'imgUrls': [], 'liveID': '3xb7betx499z9um'}

视频id和我从video界面获取的是一样的,假如每位都对比一下,会消耗性能,由于video界面可能不包含完整的live中的视频。(后期处理)

{'caption': '不知不觉又长大了一岁,生日快乐', 'displayView': '31w', 'displayLike': '1.1w', 'displayComment': '1949', 'imgUrls': ['http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzc1MTAzNjU0ODA=_0.webp', 'http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzc1MTAzNjU0ODA=_1.webp', 'http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzc1MTAzNjU0ODA=_2.webp', 'http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzc1MTAzNjU0ODA=_3.webp', 'http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzc1MTAzNjU0ODA=_4.webp', 'http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzc1MTAzNjU0ODA=_5.webp', 'http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzc1MTAzNjU0ODA=_6.webp', 'http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzc1MTAzNjU0ODA=_7.webp'], 'liveID': '3xmm5g93pqgd8tc'}

忘掉了播放量是个很重要的数据,还是要重新遍历一遍,之后添加数组

这篇博客介绍了储存链表:删掉了migrations上面的刚刚创建数据库迁移的文件,出现问题

django.db.utils.OperationalError: table "app01_userphoto" already exists

我创建的那种列表数组是填写数字的,没注意。我进源文件看了一下,似乎还可以添加多个图片

def get_available_image_extensions():
    try:
        from PIL import Image
    except ImportError:
        return []
    else:
        Image.init()
        return [ext.lower()[1:] for ext in Image.EXTENSION]


def validate_image_file_extension(value):
    return FileExtensionValidator(allowed_extensions=get_available_image_extensions())(value)

直接当做字符串存上去,也好分割成列表。这是创建的的model

class UserPhoto(models.Model):
    photoID = models.CharField(max_length=128,verbose_name="相册id",default="xxxxxxxx")
    caption = models.CharField(max_length=512,verbose_name="相册描述",default="暂无")
    displayView = models.CharField(max_length=32,verbose_name="播放量",default="-1")
    displayLike = models.CharField(max_length=32,verbose_name="点赞数",default="-1")
    displayComment = models.CharField(max_length=32,verbose_name="评论数",default="-1")



    imgUrls = models.CharField(max_length=5000,default=" ")


    def __str__(self):
        # print(self.videoID)
        return self.photoID

    class Mate:
        verbose_name = verbose_name_plural = "相册信息"

里面忘掉添加了字段,我添加后报错

django.db.utils.OperationalError: no such column: app01_userphoto.theUser_id

差点真的删掉或则迁移数据库,解决办法是添加数组,但这个很奇怪,不晓得如何添加。之后我注释字段数组,访问成功。原先上面还有条数据,恐怕就是这条数据没有外键造成报错。

还是报这个错误。

解决了,我之前这个数组是theUser,和前面的是相同的,改一下名子就好了。

    thephotoUser = models.ForeignKey(UserTitle,on_delete=models.CASCADE)

数据库上面添加数组,不须要使用延时

http://tx2.a.yximgs.com/ufile/atlas/9e53e8ba157f445c88009a4dce85fe16_0.webphttp://tx2.a.yximgs.com/ufile/atlas/9e53e8ba157f445c88009a4dce85fe16_1.webphttp://tx2.a.yximgs.com/ufile/atlas/9e53e8ba157f445c88009a4dce85fe16_2.webphttp://tx2.a.yximgs.com/ufile/atlas/9e53e8ba157f445c88009a4dce85fe16_3.webphttp://tx2.a.yximgs.com/ufile/atlas/9e53e8ba157f445c88009a4dce85fe16_4.webp

要添加分割符号,测试时侯才发觉的

photoUrl = ','.join(result["imgUrls"])

http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzE2NjAyMDc0NjI3XzE1NjYyODAxNTQ5MTc=_0.webp,http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzE2NjAyMDc0NjI3XzE1NjYyODAxNTQ5MTc=_1.webp,http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzE2NjAyMDc0NjI3XzE1NjYyODAxNTQ5MTc=_2.webp,http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzE2NjAyMDc0NjI3XzE1NjYyODAxNTQ5MTc=_3.webp,http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzE2NjAyMDc0NjI3XzE1NjYyODAxNTQ5MTc=_4.webp,http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzE2NjAyMDc0NjI3XzE1NjYyODAxNTQ5MTc=_5.webp,http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzE2NjAyMDc0NjI3XzE1NjYyODAxNTQ5MTc=_6.webp,http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzE2NjAyMDc0NjI3XzE1NjYyODAxNTQ5MTc=_7.webp,http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzE2NjAyMDc0NjI3XzE1NjYyODAxNTQ5MTc=_8.webp,http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzE2NjAyMDc0NjI3XzE1NjYyODAxNTQ5MTc=_9.webp,http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzE2NjAyMDc0NjI3XzE1NjYyODAxNTQ5MTc=_10.webp,http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzE2NjAyMDc0NjI3XzE1NjYyODAxNTQ5MTc=_11.webp,http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzE2NjAyMDc0NjI3XzE1NjYyODAxNTQ5MTc=_12.webp,http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzE2NjAyMDc0NjI3XzE1NjYyODAxNTQ5MTc=_13.webp,http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzE2NjAyMDc0NjI3XzE1NjYyODAxNTQ5MTc=_14.webp,http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzE2NjAyMDc0NjI3XzE1NjYyODAxNTQ5MTc=_15.webp,http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzE2NjAyMDc0NjI3XzE1NjYyODAxNTQ5MTc=_16.webp,http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzE2NjAyMDc0NjI3XzE1NjYyODAxNTQ5MTc=_17.webp,http://tx2.a.yximgs.com/ufile/atlas/MTI3MjAyMjYyXzE2NjAyMDc0NjI3XzE1NjYyODAxNTQ5MTc=_18.webp

如今思索问题,重复执行动作,会不会重复添加了数据,倘若是被覆盖了,也是会给数据库降低压力。后期假如数据不完整,须要重新爬取,须要一个判定操作。还有个问题,某些用户难以获取ksID,可能须要自己自动添加2021.3.19*添加静态问题问题

因为django在调试模式下不能加载静态文件,导出静态文件不能通常导出,可以使用外部链接。

STATICFILES_DIRS = [os.path.join(BASE_DIR,"static"),
]
STATIC_URL = '/static/'

{% load static %}
{% block title %}管理页面{% endblock title %}
{% block style %}{% endblock %}

2021.3.20*获取指定数组的全部数据

    allCover = UserVideo.objects.values("coversUrl")

参考博客:

继续

遇见了有的视频封面大小不一样的问题

观察了一下,live界面的视频左右两侧会有一些空白,vi'deo是恰好填充好,还是根据live页面的款式写吧。

获取图片原始规格:

再想想,live界面没有展示的视频,肯定是不好根据那个规格展示的视频

这么,还是先做主播主页的页面吧。

统计数据库中的video和photo统计每位用户的video数目

def showAdmin(request):
    allUser = UserTitle.objects.values("userName","userID")
    for uID in allUser:
        theUsr= UserTitle.objects.get(userID=uID["userID"])
        myVideo = UserVideo.objects.filter(theUser=theUsr.id)
        print(uID)
        print(len(myVideo))

    return render(request,'pages/showAdmin.html',{"result":allUser})

这种逻辑前面要使用插口触发,不然一进这个视图就触发一次,太消耗时间。

http://tx2.a.yximgs.com/ufile/atlas/NTE5MzQ5NDg0MTc0OTc3NzcxOV8xNjE1NjI4ODcwNjA0_0.webp,http://tx2.a.yximgs.com/ufile/atlas/NTE5MzQ5NDg0MTc0OTc3NzcxOV8xNjE1NjI4ODcwNjA0_1.webp,http://tx2.a.yximgs.com/ufile/atlas/NTE5MzQ5NDg0MTc0OTc3NzcxOV8xNjE1NjI4ODcwNjA0_2.webp,http://tx2.a.yximgs.com/ufile/atlas/NTE5MzQ5NDg0MTc0OTc3NzcxOV8xNjE1NjI4ODcwNjA0_3.webp,http://tx2.a.yximgs.com/ufile/atlas/NTE5MzQ5NDg0MTc0OTc3NzcxOV8xNjE1NjI4ODcwNjA0_4.webp,http://tx2.a.yximgs.com/ufile/atlas/NTE5MzQ5NDg0MTc0OTc3NzcxOV8xNjE1NjI4ODcwNjA0_5.webp,http://tx2.a.yximgs.com/ufile/atlas/NTE5MzQ5NDg0MTc0OTc3NzcxOV8xNjE1NjI4ODcwNjA0_6.webp,http://tx2.a.yximgs.com/ufile/atlas/NTE5MzQ5NDg0MTc0OTc3NzcxOV8xNjE1NjI4ODcwNjA0_7.webp

获取图片数目的时侯出现了多的,可能与爬虫逻辑有关

我查看了一下图片,名子和图片不匹配,确实是逻辑问题删掉储存图片的数据,重新执行动作,数据可以被重复添加。进一步处理爬虫类和状态表示

执行爬虫脚本失败要中止,数据库不能储存到数据库。设计一个状态表示,不能重复储存数据。脚本还是设置延时参数,可以调节。

我做了进一步的处理,恳请到result=0,可能不是爬取太快的问题,其他问题。假如reslut=0,再自己浏览器中多刷新几次,直至出现作品,再执行代码result=1.

爬取不完整就舍弃,或则多次爬取互相补充。前面数据更新了,自己也要对爬虫进行跟新。

如今要决定一下工作,简单的就是爬取到数据,最后自己写脚本把须要的数据下载到本地。复杂的是写可持续爬虫的代码,官网跟新不更改代码就可以直接爬取过来。假如要作为找工作的项目,就还须要加入用户注册登入系统,可以点赞,关注。再复杂的是评论,上传视频等,这样一做就要考虑其他问题,如doss功击,服务器显存等问题。代码逻辑新能问题就早已一团糟了。

延时设置为5秒,爬取一波是正常的。3秒也正常。之后设置爬取数据不完整,不储存到数据库。

userdetailLiveSpider()

这个类是获取live界面的视频信息,暂时测试延时可以不要。

我设置5状态可以转变为1或则2状态,假如这样回头再执行一遍,应当会出现重复的问题。确实有,还是入库前要判定一下。进行了处理,多次运行出现问题,获取Photo时侯获取不了,浏览器刷新也出现不了数据,使用IP代理就别了吧,实在不想就只要vide的视频。明天要处理的问题恐怕就没问题。重复运行提取数据就可以了,下一步做随机获取username和userID唉!真难,以为没有问题出现了死循环。我把傲游里面的cookie复制过来,可以后去photo随机获取userIDdict与json数据之间的转换:2021.3.21js发送post参考博客:之后我又找了个弹出框的插件,如今可以再弹出框填写数据,发送post恳求。

        $("#openDialog1").dialog({
            id: "superDialog", //必填,必须和已有id不同
            title: "我的标题", //对话框的标题 默认值: 我的标题
            type: 0, //0 对话框有确认按钮和取消按钮 1 对话框只有关闭按钮
            easyClose: true, // 点击遮罩层也可以关闭窗口,默认值false
            form: [{
                description: "用户名",
                type: "text",
                name: "username",
                value: "tom"
            }, {
                description: "密码",
                type: "text",
                name: "password",
                value: "123456"
            }, {
                description: "姓名",
                type: "text",
                name: "name",
                value: "tom"
            }, {
                description: "年龄",
                type: "text",
                name: "age",
                value: "18"
            }], //form 是填充表单的数据,必填
            submit: function (data) {
                //data是表单收集的数据
                console.log(data);

                $.ajax({url: 'http://127.0.0.1:8000/api/getUserRandom/3/',
                        type: 'POST',
                        {#dataType: 'json',#}
                        data:data,
                        beforeSend: function (xhr, setting) {
                            xhr.setRequestHeader("X-CSRFToken", "{{ csrf_token }}")},
                        success: function (msg) {
                            console.log(msg)},
                })
                //这个可自行删去
                if (true) {
                    alert("提交成功\n(你自己可以去掉这个alert)");
                    //清空表单数据 传递参数=上述指定的id值
                    clearAllData("superDialog");
                }

            }
        })

xhr.setRequestHeader("X-CSRFToken","{{csrf_token}}")},这一步很重要

处理一下返回的数据为json格式

def getUserRandom(request,counts):
    if request.method == 'POST':
        print("-----------")
        cDate = currentData()
        theGetScript = getUserIDRandom(cDate.theCookie)
        theGetScript.get_data()
        results = theGetScript.endResult
        messgae = json.dumps(results)
        # return render(request,results)
        myRes = json.dumps({"result":2})
        return HttpResponse(myRes)
    else:
        myRes = json.dumps({"result": 1})
        return HttpResponse(myRes)

出现上一次相应的数据也添加到下一次相应的数据中了。

我把result在函数外定义为全局变量还是不行。result每次的内容不会被清空,对象的endResult会被清空,我就直接把这个作为返回值

还是这个问题,我形参给返回值,把属性值都清空了都还是那样。又有问题获取精彩视频页面也会被限制,我去浏览器刷新也刷新不出视频。看来,看来一切不是这么如意。须要赶紧结束这个项目,展示页面就重新开启一个项目把。这个项目就拿来写爬虫,把数据储存到数据库。恐怕真的是要http代理了。尝试了一下,其实不是封锁ip的问题。确实不是,我联接手机热点还是那种样子。我发觉了,退出登陆,之后再访问就是正常的。而且我复制cookie,代码还是未能获取信息。真是搞不懂。可能是某个帐户对某个页面恳求的次数太多就出现问题把。问题是现今不晓得如何恢复,填上退出登入的cookie页不行。睡了午觉我去睡了午觉,睡醒后再去执行代码,成功可以获取信息。这么就可以继续进行了,其他获取不到数据可能也是这样就可以了,不是cookie问题,由于自己再下一次写代码的时侯,执行爬虫脚本开始都是成功的。尼玛!我再mytools中测试类成功得到数据,在前端执行动作老是不成功,cookie更换得也是一样的。还有最后一个头像地址,刚好听到一个错位的。真想舍弃,都做到这儿了。继续找缘由吧。我去吃了个饭,礼拜天上午的菜真的不行。点了两个肉菜,肉不好吃把上面的莴苣给吃了,还伴着油水把饭吃了。去买方便面的时侯迷糊地多付了一元钱,拿了两根棒棒糖。我上来在测试的时侯,后台动作添加video是成功的,觉得还好,我就感觉自己的代码写得没有问题,可能是测试的用户不同,添加photo有问题。使用result判定是否有数据出现错误,没有数据状态也改变了。直接使用厚度来判定。在setting中调用类中的ksCookie的问题,我在mytools中调用也是获取不到数据。可能是全局变量引入的形式,我get到了再__init__文件下边设置变量,这样引入就可以了

from app01 import KSCOOKIE

成功,前端执行不成功,就是导出变量的问题。其他发觉问题,获取photo的时侯,须要每次更新cookie,就是从成功恳求到数据的浏览器中获取。多降低一个用户都不行。

好吧,我说把kscookie复制到了THECOOKIE

我不晓得曾经是如何搞的,延时就可以使用一个cookie多次获取视频信息。

假如video+photo不等于应当作品数目,就须要再live界面获取视频,对比入库。这是可能碰到的问题,先写一下。

我观察了一下,每次就是cookie中这个参数改变了。

确实,还是要想办法获取cookie。我以为这个工程要烂尾了,由于cookie最后的一个值我没有对比到。并且,我把里面的最前面恳求的cookie复制过来还是可以运行。好吧,还是一次性的。我都怀疑自己之前是如何做到使用延后,可以多次复用。不行不行,还是对应恳求的cookie好用。确实好用,就是不晓得如何获取。变的就是最后面的那条数值我还是根据这篇博客一步步地做把,说不定成功了,博客:获取二维码成功,要不是博客中说要加data:image/png;base64,我估计如何也想不下来。这个信息填在这儿也幸好了这篇博客

扫描的结果中提取了登陆信息,响应后返回的是用户信息,之后携带登陆信息登入。

acceptResult恳求获取qrtoken

qrtoken的值再这个表单里被发送出去

之后就是这个GET恳求,携带的数据博客上面有解释

三个变动的参数,每次都要交替更换,通过这样一波操作来获取动态的cookie。

把这三个数组替换,之后作为下一次恳求个人信息的cookie才有效。用户界面剖析这是刷新一下,下降一下发送的数据

我猜想passToken和sts?依次更新了cookie,之后在恳求数据。下边第一个graphql是登陆用户的个人信息,第二个是第一页面视频列表,下边v?又跟新了依次cookie,之后用这个cookie就可以仍然获取视频列表了。

如今要晓得passToken中的cookie中的passToken参数值如何获取。

我如今晓得cookie是如何获取的了,不是自己建立,而是按照响应数据中set-Cookie参数设定的。之前健康打卡系统就是没有使用上一次生成的cookie而失败的,不能自己建立。

cookie肯定是get恳求获取的,由于我筛选的是XRH没有见到GET恳求。好吧,全部上面也没有,难以获取。我使用这个gra中的cookie,可以爬取一个完整用户的视频。这个cookie可以获取到。有的不能,可能是最后依次恳求到的数据为空,之后判定爬取信息不完整。

这样每次只能爬取一个用户的视频,之后再更新cookie。使用初次登陆后更新cookie就可以获取数据。也是一次性的。如今要晓得如何更新。psotman发觉我用post模拟,到passToken的模拟才有效,后面的是token错误的返回值。

ok,模拟passtoken得到响应的"kuaishou.server.web.at“的值,作为下一次sts的params,之后sts就可以成功返回须要跟新的cookie三个数组,再和cookie固定的值凭着,就可以生成一个有效的cookie爬取一个主播的用户全部视频信息。

ok,上次就就须要把cookie拼接上去,封装成类就可以了

2021.3.24updateCookie类jupyterlab的相关的文件置于notebook/01/passToken下测试好了,写类的时侯遇见一个问题,第一个替换我没有做处理,相关数组没有server.web_st=。并且替换另一个的时侯也每做处理,最后却添加了server.web_st=。结果是想要的,但不晓得为何

不好意思,是代码弄错了。

写好了,执行爬取video的时侯更新一下cookie打算体验一下成果的时侯,发觉失败,程序中止。回头看一下,原先是掉了分号

 "server.web_st="+st+";"

我都想好了等下测试成功了如何写哪些,并且失败了。我尝试了删掉类,每次恳求都更新依次cookie,但还是失败。不晓得为何,莫非恳求的cookie与动作有关,或则前后cookie是由关联的。好吧,我先暂停一下,好好整理一下爬虫相关的代码。既然不用持续更新视频,执行依次得到结果,这么就可以不把获取视频的代码写在工程上面了。

网页点赞