【Python爬虫与数据分析】爬虫Json数据解析

2023-11-13

目录

一、Json文件数据解析

二、Json数据包解析获取图片资源

三、Json数据包解析获取视频资源


一、Json文件数据解析

json字符串:通常类似python数据类型中的列表和字典的结合,也可能是单独的列表或者字典格式,通常可以通过json模块的函数接口转换为python数据类型,也可将python中的数据类型转换成json字符串

json文件:后端通常将数据库的文件统一以json文件的格式传给前端,而前端在对json文件数据进行加工渲染,展示在前端页面。

很多时候,我们使用爬虫从前端页面获取的数据因为经过了加工渲染而并不完整,所以我们有时候需要通过获取后端的json文件数据包来获取数据

二、Json数据包解析获取图片资源

注:本代码仅供爬虫技术学习使用,无任何商业目的

上一篇文章中的王者荣耀英雄皮肤图片获取的途径是从前端代码中的url获取,一共只有93个英雄,获取得到的数据并不完整,而这次我们可以通过网络数据包中的json文件获取数据信息,再通过爬虫下载,一共有115个英雄,是游戏目前的全部英雄

找到网络数据包中的存放英雄信息的json文件数据包,在请求头中拿到json文件的url链接,然后下载得到json文件数据包。

下载王者荣耀全英雄皮肤图片代码:

import requests
import json
import os

url = "https://pvp.qq.com/web201605/js/herolist.json"
response = requests.get(url)    # 请求得到json包数据
# print(response.text)

# 此处的json文件格式是列表里面包含字典元素
heroList = json.loads(response.text)
# print(len(heroList))        # 114

for i in heroList:
    id = i['ename']
    name = i['cname']
    print(id, name)

    os.makedirs(f"./imag/{name}")   # 给每个英雄的皮肤单独创建目录

    # 找到英雄皮肤图片的url链接,对比观察寻找规律
    cnt = 1
    while True:
        try:
            url = f"https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{id}/{id}-bigskin-{cnt}.jpg"
            response = requests.get(url)
            if response.status_code != 200:
                break
            with open(f"./imag/{name}/skin-{cnt}.jpg", "wb") as f:
                f.write(response.content)
                cnt += 1
        except:
            print(Exception)
            break

三、Json数据包解析获取视频资源

 注:本代码仅供学习爬虫技术,无任何商业目的。

1. 首先打开抖音网页,搜索刘畊宏,进入刘教练的视频主页,选择检查,

想要爬取视频,有多种方式,可以通过you-get直接通过视频的网页链接进行下载,但是you-get在面对抖音的反爬机制的时候很多时候会失效,这时我们就要找到视频文件的数据包,直接通过网络请求获取视频文件。

在PC端选择网页,并刷新,查看网络数据包,寻找存放有视频的数据包,包名并没有统一的格式,需要逐一查找,这是一个依靠运气和经验的过程,也有可能根本找不到视频数据包。

查找数据包信息可以逐一查找,也可以按 ctrl F 进行关键字搜索再逐一查找带有关键字的数据包,两种方式都依靠经验和运气。

观察response(响应)里面的信息,一般视频文件前面都有“video”标签,而图片文件的链接会以p开头或者标签为img或p,这并不绝对,需要依靠经验判断。

2. 通过在PC端的数据包查找,我并没有找到存放视频文件的数据包,于是我们可以查找移动端的数据包,有可能能够找到,当然在移动端页面进行查找的前提是这个网页有移动端

通过video关键字的索引,在移动端的界面下,我找到一个包含video关键字的url,这里有3个url在url_list列表里,逐一进入这三个url,发现确实是我们需要的视频资源,而且这三个url是同一个视频。

3. 分析数据包里面的数据结构,我们打开一个叫sojson的工具,百度直接搜索就能用,进入后点击json在线解析,这个工具可以帮助我们整理字符串数据,将其转换为可以缩放的格式,方便我们观察数据包的整体结构

通过观察发现我们找到的第一个包含视频链接的url_list标签在play_addr标签下面,按 ctrl F 在sojson工具中对play_addr标签进行索引,找到第一个play_addr后对其他标签进行收缩,发现play_addr标签在video标签下,video标签的上一层是aweme_list标签。

4. 对aweme_list标签进行收缩,观察到里面有18条数据,代表aweme_list里面有18条视频数据

通过观察,这个数据包的结构是最外层为字典,'awere_list'关键字的value值是列表,列表里的元素都是字典,而字典的value值可能是字符串或者嵌套列表。

5. 获取请求数据包的url,在请求头里面可以找到url,请求方式为get,获取url的时候也可以从请求头里面获得user-agent、referer、cookied......信息

6. 获得响应信息response后,将之用json模块进行加载,json.loads(response.text),得到数据包的字典格式数据,然后再通过字典的关键字获得存放有视频信息的列表,再迭代遍历列表,获得每一个视频的文件url和标题 

直接对每一个视频文件的url进行网络请求,并将请求得到的数据以二进制格式写入.mp4后缀的文件中,即完成了下载,代码中存放视频的目录请自己定义

import requests
import json
import os

url = 'https://www.douyin.com/aweme/v1/web/aweme/post/?device_platform=webapp&aid=6383&channel=channel_pc_web&sec_user_id=MS4wLjABAAAASwhiL0bRi1X_zs7UhAIO2udbD1F_XKrsJMOaukl1Io4&max_cursor=1677067200000&locate_query=false&show_live_replay_strategy=1&count=18&publish_video_strategy_type=2&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1536&screen_height=864&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=113.0.0.0&browser_online=true&engine_name=Blink&engine_version=113.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7201915628194022912&msToken=KLZL7g62CU1OsQ9ZN6MP7VxpOUz2EiwBk1jNRlLoINJEUePgZg-aVWpPAL3LFGL31AYMV3qWtQTlqtxvHIp63YBHJKHELw_3qq0s6kaG6OG3bfqt2cN8Xg==&X-Bogus=DFSzKwVubWXANVl8tJhgWBt/pLvt'

header = {
    'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Mobile Safari/537.36',
    'referer': 'https://www.douyin.com/user/MS4wLjABAAAASwhiL0bRi1X_zs7UhAIO2udbD1F_XKrsJMOaukl1Io4',
    'cookie': 'ttwid=1%7CSfdsymdYx1QlfjQTR3xYeFSNa9O6q4f1wFp6BtrRqxs%7C1676826682%7C30e0eb856043a47a208c80c1af10d30fc0cfcf4e270115abae592c5ec3873249; d_ticket=5bc0d2611324cd7fbfc9e0f926fec81dc0d98; n_mh=48GDnZrzh9L0L71QYQe9RHV7INgvIpqOtZbHqRblemk; LOGIN_STATUS=1; store-region=cn-zj; store-region-src=uid; my_rd=1; MONITOR_WEB_ID=685b146d-4ed6-4aa6-aca0-faab96f8cf42; douyin.com; device_web_cpu_core=16; device_web_memory_size=8; webcast_local_quality=null; strategyABtestKey=%221688567746.879%22; sso_uid_tt=6058615d39e33507497ddd539f47deeb; sso_uid_tt_ss=6058615d39e33507497ddd539f47deeb; toutiao_sso_user=b9b49cd114e343c3769792cb05950869; toutiao_sso_user_ss=b9b49cd114e343c3769792cb05950869; sid_ucp_sso_v1=1.0.0-KDFkNmJjYjBkYTc1OTdiOTNjY2EwOWVjMzA4YmQwNWM0YTcxOTA3NGQKCRDD_5WlBhjvMRoCbGYiIGI5YjQ5Y2QxMTRlMzQzYzM3Njk3OTJjYjA1OTUwODY5; ssid_ucp_sso_v1=1.0.0-KDFkNmJjYjBkYTc1OTdiOTNjY2EwOWVjMzA4YmQwNWM0YTcxOTA3NGQKCRDD_5WlBhjvMRoCbGYiIGI5YjQ5Y2QxMTRlMzQzYzM3Njk3OTJjYjA1OTUwODY5; passport_csrf_token=b36f107eb1f86486b5946c1615b05276; passport_csrf_token_default=b36f107eb1f86486b5946c1615b05276; odin_tt=8be0aee3be15b092d053ad20045320656173ff5fab52b26d527858f414c45896; sid_guard=5443fa7b2b56f9a07aee61e8f36daac1%7C1688567748%7C21600%7CWed%2C+05-Jul-2023+20%3A35%3A48+GMT; uid_tt=acd1f407a3f1d7894a1653efdd479f41; uid_tt_ss=acd1f407a3f1d7894a1653efdd479f41; sid_tt=5443fa7b2b56f9a07aee61e8f36daac1; sessionid=5443fa7b2b56f9a07aee61e8f36daac1; sessionid_ss=5443fa7b2b56f9a07aee61e8f36daac1; sid_ucp_v1=1.0.0-KDU0OGJkYTI2ZTNjMWM1NjA3Yjc3Njk1ZmM3Mjg0OWY3MTdhM2M0YmEKCBDE_5WlBhgNGgJsZiIgNTQ0M2ZhN2IyYjU2ZjlhMDdhZWU2MWU4ZjM2ZGFhYzE; ssid_ucp_v1=1.0.0-KDU0OGJkYTI2ZTNjMWM1NjA3Yjc3Njk1ZmM3Mjg0OWY3MTdhM2M0YmEKCBDE_5WlBhgNGgJsZiIgNTQ0M2ZhN2IyYjU2ZjlhMDdhZWU2MWU4ZjM2ZGFhYzE; s_v_web_id=verify_ljptn0ct_kfiNKmlP_dyZH_47Aw_Aa38_Ft8lUaobhxaE; __bd_ticket_guard_local_probe=1688567747233; __ac_nonce=064a57fc40047d7bc5fa4; __ac_signature=_02B4Z6wo00f01XnbypAAAIDA8pBRcRDkeQl5-84AADrX8ttGZsqVOhTieUZ2pt27EMIqPRl1Kli8-x0yYjBdJ7zXwvykc-U4kkF00iB1e.yTLrCY2O5q7RNkrRl3ggCX5kR8gLBBUr.jlsTD8b; VIDEO_FILTER_MEMO_SELECT=%7B%22expireTime%22%3A1689172548703%2C%22type%22%3Anull%7D; bd_ticket_guard_client_data=eyJiZC10aWNrZXQtZ3VhcmQtdmVyc2lvbiI6MiwiYmQtdGlja2V0LWd1YXJkLWl0ZXJhdGlvbi12ZXJzaW9uIjoxLCJiZC10aWNrZXQtZ3VhcmQtY2xpZW50LWNlcnQiOiItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cbk1JSUNGakNDQWJ1Z0F3SUJBZ0lWQUtuaVp0K09XZEZtT2FNSGlCZFYycnY1TmRuK01Bb0dDQ3FHU000OUJBTUNcbk1ERXhDekFKQmdOVkJBWVRBa05PTVNJd0lBWURWUVFEREJsMGFXTnJaWFJmWjNWaGNtUmZZMkZmWldOa2MyRmZcbk1qVTJNQjRYRFRJek1EUXhOREUyTkRJeE5sb1hEVE16TURReE5UQXdOREl4Tmxvd0p6RUxNQWtHQTFVRUJoTUNcblEwNHhHREFXQmdOVkJBTU1EMkprWDNScFkydGxkRjluZFdGeVpEQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlcbkF3RUhBMElBQkpTVmplb1c4QTBpbmVHd3RBQ2xaTVZrS1F0djlvTDEzT0pPYUp3SVdGaEtTcUpPSkNVT3liK3pcbnFwb3grVFNNYzYxV2RtVFB4VkxPOTJOeXRrWFZ5VUdqZ2Jrd2diWXdEZ1lEVlIwUEFRSC9CQVFEQWdXZ01ERUdcbkExVWRKUVFxTUNnR0NDc0dBUVVGQndNQkJnZ3JCZ0VGQlFjREFnWUlLd1lCQlFVSEF3TUdDQ3NHQVFVRkJ3TUVcbk1Da0dBMVVkRGdRaUJDREFka0kxdHNKblV5K3ZsUGw2ZmxyWEJyT3d4eFFXWE5Pejd2MmRJcmZubWpBckJnTlZcbkhTTUVKREFpZ0NBeXBXZnFqbVJJRW8zTVRrMUFlM01VbTBkdFUzcWswWURYZVpTWGV5SkhnekFaQmdOVkhSRUVcbkVqQVFnZzUzZDNjdVpHOTFlV2x1TG1OdmJUQUtCZ2dxaGtqT1BRUURBZ05KQURCR0FpRUFzQ2ZRcUtJa05sZVFcbjdUOHg5MjFMYmhzdFJkSS9OblllVGFMS1dnNUQ0cFlDSVFDeERpZnRKMXdQMWNkWEIwWHNKck0yVXYwZGJYczVcbk1GbFdjRzBDaU5MY0d3PT1cbi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS1cbiJ9; FORCE_LOGIN=%7B%22videoConsumedRemainSeconds%22%3A180%7D; csrf_session_id=d792449829359253fa25f0a8d9e72a59; SEARCH_RESULT_LIST_TYPE=%22single%22; home_can_add_dy_2_desktop=%221%22; msToken=EY2sJBH_qEN4ep44noUrXW_qzCkWVNvtjWaTqWkqVAZgC9JMQUoQs6kryIFMcrSdONLSkfIEAu2NXOZ2r_jocknLqOxnwDn6sucTrDTivy5oSmnYs2V9fA==; download_guide=%221%2F20230705%2F0%22; msToken=KLZL7g62CU1OsQ9ZN6MP7VxpOUz2EiwBk1jNRlLoINJEUePgZg-aVWpPAL3LFGL31AYMV3qWtQTlqtxvHIp63YBHJKHELw_3qq0s6kaG6OG3bfqt2cN8Xg==; tt_scid=IKrnsboqod05Ql8FTZwSOJiRmmThn7J2ziAKN17O5cWleCch8dPbt7lG9qxdm9ed54d6; pwa2=%220%7C0%7C1%7C0%22'
}

response = requests.get(url, headers=header)
# print(response.text)

# 通过json提取数据,通过观察可得json最外层是字典格式
data_dict = json.loads(response.text)
data_list = data_dict['aweme_list']     # data_list的每一个元素是字典
# print(len(data_list))   # 18

os.makedirs(f"./DouYin/")

for i in data_list:
    v_title = i['desc']
    v_url = i['video']['play_addr']['url_list'][0]
    print(v_title, v_url)    #通过观察可得第一个和最后一个链接是音频

    res = requests.get(v_url, headers=header)
    with open(f"./DouYin/{v_title}.mp4", "wb") as f:
        f.write(res.content)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Python爬虫与数据分析】爬虫Json数据解析 的相关文章

  • JSON 中的哈希到底是什么?

    我正在学习 JSON 但我发现你也可以将所谓的 哈希 放入 JSON 中 我在哪里可以找到什么是哈希 或者你能向我解释一下什么是哈希吗 另外 什么是哈希图 我有 C 和 C 经验 正在学习 JS Jquery 和 JSON 哈希是一个稀疏数
  • 尝试从网页Python和BeautifulSoup获取编码

    我试图从网页检索字符集 这会一直改变 目前我使用 beautifulSoup 来解析页面 然后从标题中提取字符集 这工作正常 直到我遇到一个网站 到目前为止 我的代码以及与其他页面一起使用的代码是 def get encoding soup
  • Python re无限执行

    我正在尝试执行这段代码 import re pattern r w w s re compiled re compile pattern results re compiled search COPRO HORIZON 2000 HOR p
  • 使用 Python 3 动态插入到 sqlite

    我想使用 sqlite 写入多个表 但我不想提前手动指定查询 有数十种可能的排列 例如 def insert sqlite tablename data list global dbc dbc execute insert into tab
  • 如何获取numpy.random.choice的索引? - Python

    是否可以修改 numpy random choice 函数以使其返回所选元素的索引 基本上 我想创建一个列表并随机选择元素而不进行替换 import numpy as np gt gt gt a 1 4 1 3 3 2 1 4 gt gt
  • python celery -A 的无效值无法加载应用程序

    我有一个以下项目目录 azima init py main py tasks py task py from main import app app task def add x y return x y app task def mul
  • Jupyter 笔记本中未显示绘图图表

    我已经尝试解决这个问题几个小时了 我按照上面的步骤操作情节网站 https plot ly python getting started start plotting online并且图表仍然没有显示在笔记本中 这是我的情节代码 color
  • 时间序列数据预处理 - numpy strides 技巧以节省内存

    我正在预处理一个时间序列数据集 将其形状从二维 数据点 特征 更改为三维 数据点 时间窗口 特征 在这样的视角中 时间窗口 有时也称为回顾 指示作为输入变量来预测下一个时间段的先前时间步长 数据点的数量 换句话说 时间窗口是机器学习算法在对
  • 使用标签或 href 传递 Django 数据

    我有一个包含链接的表 当单击该链接进行更多操作时 我想将一些数据传递给我的函数 my html table tbody for query in queries tr td value a href internal my func que
  • Flask 应用程序路由中的多个参数

    烧瓶怎么写app route如果我在 URL 调用中有多个参数 这是我从 AJax 调用的 URL http 0 0 0 0 8888 createcm summary VVV change Feauure 我试图写我的烧瓶app rout
  • 使用seaborn绘制简单线图

    我正在尝试使用seaborn python 绘制ROC曲线 对于 matplotlib 我只需使用该函数plot plt plot one minus specificity sensitivity bs where one minus s
  • pygame:使用 sprite.RenderPlain 绘制精灵组的顺序

    我有一个精灵组 需要按一定的顺序绘制 以便其精灵按应有的方式重叠 然而 即使使用运算符模块函数 sorted self sprites key attrgetter y x 对组进行排序 顺序也是错误的 我该如何解决这个问题 直截了当地说
  • 如何在 Seaborn 中的热图轴上表达类

    我使用 Seaborn 创建了一个非常简单的热图 显示相似性方阵 这是我使用的一行代码 sns heatmap sim mat linewidths 0 square True robust True sns plt show 这是我得到的
  • 无法在 PyCharm 版本 9.3.3 中安装 NumPy。 Python版本3.8.2

    在 PyCharm 中安装 NumPy 时出错 尝试安装 Microsoft Visual C 14 0 还是行不通 NumPy 正在通过命令安装pip3 install numpy在 cmd 终端中 但是当尝试将其安装在 PyCharm
  • Discord.py 嵌入中禁用按钮/冻结按钮

    I m trying to make a replica of this bot in which when I press any of the buttons below it shows a dropdown menu and you
  • PyInstaller“ValueError:源代码字符串不能包含空字节”

    我得到了一个ValueError source code string cannot contain null bytes执行命令时pyinstaller main py在具有和不具有管理员权限的cmd中 Traceback most re
  • 在 numpy 中连接维度

    我有x 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 2 3 I want 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 6 也就是说 我想连接中间维度的所有项目 在这种特殊情况下我可以得到这
  • 寻找完美的正方形

    我有这个Python代码 def sqrt x ans 0 if x gt 0 while ans ans lt x ans ans 1 if ans ans x print x is not a perfect square return
  • 如何绘制更大的边界框和仅裁剪边界框文本 Python Opencv

    我正在使用 easyocr 来检测图像中的文本 该方法给出输出边界框 输入图像如下所示 Image 1 Image 2 使用下面的代码获得输出图像 But I want to draw a Single Bigger bounding bo
  • 如何使用xlwt设置文本颜色

    我无法找到有关如何设置文本颜色的文档 在 xlwt 中如何完成以下操作 style xlwt XFStyle bold font xlwt Font font bold True style font font background col

随机推荐

  • 桌面研究-数据源

    文章目录 1 各国每年人口统计表 2 各国年龄结构表 3 国家简介 4 城镇化率 5 美国房屋统计数据 6 各国教育水平 7 住房类型 8 家庭结构 家庭人数 9 恩格尔系数 10 IMF 人均GDP PPP人均GDP 1 各国每年人口统计
  • 自动化测试需要学什么?二十八岁功能想转自动化现实吗?

    先回答一下后面那个问答 二十八岁还能从功能转自动化吗 很多接触软件测试都是从功能测试开始的 但是功能测试的薪资会比自动化少很多 所以就想要要学习自动化 从功能测试转到做自动化 其实这是完全来的及的 花上几个月时间学习自动化测试 造福以后 这
  • 智能化里面计算机网络设计思路,浅谈云机房网络的建设和维护及思路分析

    徐振宇 张欣 摘要 现代机房网络管理过程中 云技术的应用效果非常的显著 该文先对机房中的云技术应用实践中进行分析 并在此基础上就云机房网络的建设及其维护和设计思路 谈一下个人的观点和认识 以供参考 关键词 机房 云技术 网络建设 维护 设计
  • Blob 文件下载对应的常见 MIME 类型列表

    Blob 对象表示一个不可变 原始数据的类文件对象 它的数据可以按文本或二进制的格式进行读取 也可以转换成 ReadableStream 来用于数据操作 在 JS 中通常使用 Blob 进行文件下载保存 new 转换过程中需要指定下载文件
  • BurpSuite Proxy 给代理设置上层代理

    1 简单描述 正常情况而言 使用BurpSuite时数据包的经过流程为 浏览器 BurpSuite Repeater Intruder gt BurpSuite Proxy gt 目标服务器 这个时候其实还是本机发出的流量 我们想让流量由其
  • vue环境变量配置——process.env(详细)

    目录 一 背景 二 配置环境的实现原理 三 使用步骤 3 1安装依赖 3 2创建 env dev 和 env prod两个文件 3 3设置项目启动时默认的环境 3 4查看环境是否配置成功 一 背景 在用vue框架时 经常用到两种环境 一种是
  • 智能指针auto_ptr

    智能指针 auto ptr 这个名字听起来很酷是不是 其实auto ptr 只是C 标准库提供的一个类模板 它与传统的new delete控制内存相比有一定优势 但也有其局限 本文总结的8个问题足以涵盖auto ptr的大部分内容 1 au
  • DVWA-Brute Force

    Brute force 暴力破解 是一种试图通过尝试所有可能的组合 通常是密码 来获取敏感信息或破解加密的技术或方法 这种攻击方法通常被用来破解密码 对系统进行入侵或访问受限资源 暴力破解攻击的原理是通过迭代尝试各种可能的组合 例如密码字典
  • 2023前端面试题------JS 面试题(1)

    2023前端面试题 JS面试题 三 JS高频面试题 1 介绍JS有哪些内置对象 2 如何最小化重绘 repaint 和回流 reflow 3 Javascript作用域链 4 数据请求 5 跨域和同源策略 6 面向对象 7 闭包 8 数组去
  • rtp协议分析

    感谢原作者 http blog csdn net rootusers article details 41864387 网络模型 网络通信分为7层 OSI 是一个理论模型 由高到低分别是 应用层 文件传输 电邮 文件服务等 HTTP Tel
  • 【华为OD机试】响应报文时间【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 IGMP 协议中 有一个字段称作最大响应时间 Max Response Time HOST收到查询报文 解折出 MaxResponsetime 字段后 需要在 0 M
  • wps插入图片显示不全、混乱

    问题如下 原因 格式混乱 解决办法 1 统一格式 使用格式刷统一文档的格式 2 Ctrl A 全选 重新选择行距 3 重新粘贴图片 选择嵌入型
  • 从0到1框架搭建,Python+Pytest+Allure+Git+Jenkins接口自动化框架(超细整理)

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • Grokking the System Design Interview: 如何应对系统设计面试

    拥有良好的系统设计能力 是一个优秀程序员的必要素质 当然更重要的是 越来越多的公司在面试中考察系统设计能力 尤其是外企巨头 如谷歌 亚马逊 微软等 这些公司对于社招的软件工程师往往有这方面的要求 但是系统设计和算法题不一样 它考察的是程序员
  • Unit sshd.service could not be found.

    错误原因 刚安装了Ubuntu18 04系统 用Xshell连接服务器失败 因为服务器没有开启 可被远程连接的功能 指令输入 systemctl status sshd 然后出现了标题上的错误 解决方法 一 检测bug原因 ps e gre
  • 接口自动化入门-TestNg

    目录 1 TestNg介绍 2 TestNG安装 3 TestNG使用 3 1 编写测试用例脚本 3 2 创建TestNG xml文件 1 创建testng xml文件 2 修改testng xml 4 测试报告生成 1 TestNg介绍
  • Flutter悬浮窗组件之实现快捷换肤、切换语言等开发调试功能模块

    一 最近开发一个App具有黑白两个主题和切换语言的功能 所以在开发的时候一个页面总是要不断的去切换主题和语言来查看功能是否正常 为了提高这个开发效率突然想到可以在应用上增加一个悬浮窗组件然后实现主题切换和语言切换的功能 这样在任意一个页面就
  • JavaScript数据结构-树

    文章转自 JavaScript数据结构 树 我觉得这社会上 也不差钱好多人 可能好多人也不差权力 但是我觉得能得到这种满足的也不多 郭小平 lt 临汾红丝带学校校长 gt 树是计算机科学中经常用到的一种数据结构 树是一种非线性的数据结构 以
  • Makefile的两种编译方法——原地编译和单独输出文件夹编译

    1 原地编译 编译代码时默认是原地编译 原地编译就是编译生成的 o文件和相应的 c文件是在同一目录的 原地编译比较简单 但是会污染源码 目录里会多出生成的 o文件 并且编译不同配置的目标文件 都要先清除之前的 o文件 2 单独输出文件夹编译
  • 【Python爬虫与数据分析】爬虫Json数据解析

    目录 一 Json文件数据解析 二 Json数据包解析获取图片资源 三 Json数据包解析获取视频资源 一 Json文件数据解析 json字符串 通常类似python数据类型中的列表和字典的结合 也可能是单独的列表或者字典格式 通常可以通过