python爬虫爬取中关村在线电脑以及参数数据
一. 内容简介
python爬虫爬取中关村在线电脑以及参数数据
二. 软件环境
2.1vsCode
2.2Anaconda
version: conda 22.9.0
三.主要流程
3.1 代码
解析都在代码里面
# 接口分析
# 原始接口,后面几个数字就是占位的,每个位置代表着不同的标签
# https://detail.zol.com.cn/notebook_index/subcate16_0_list_1_0_99_2_0_1.html
# https://detail.zol.com.cn/notebook_index/subcate16_0_list_1_0_99_2_0_3.html
# https://detail.zol.com.cn/notebook_index/subcate16_牌子_list_1_上市时间_99_排列方式_0_页码.html
# 联想 在中间加了160
# https://detail.zol.com.cn/notebook_index/subcate16_160_list_1_0_1_2_0_1.html
# 华为 在中间加了613
# https://detail.zol.com.cn/notebook_index/subcate16_613_list_1_0_1_2_0_1.html
# https://detail.zol.com.cn/notebook_index/subcate16_613_list_1_0_1_1_0_1.html
# 联想游戏本
# https://detail.zol.com.cn/notebook_index/subcate16_160_list_1_s1227_1_2_0_2.html
! pip install lxml
import urllib.request
from lxml import etree
import json
# 牌子,电脑类型,上市时间
def createRequext(brand,model,time,startPage):if brand == "华为":brand = "613"if brand == "联想":brand = "160"if brand == "惠普":brand = "223"if brand == "戴尔":brand = "21"if model == "游戏本":model = "s1227"if model == "商务本":model = "s1226"if time == "2022年下半年":time = "s10097-"if time == "2023年上半年":time = "s10098-"url = "https://detail.zol.com.cn/notebook_index/subcate16_" + brand +"_list_1_"+ time + model +"_1_1_0_"+ str(startPage) +".html"# 调试使用print(url)headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'}request = urllib.request.Request(url=url,headers=headers)return request# 获取网页源码
def getContent(request):response = urllib.request.urlopen(request)# 中关村在线,编码格式采用GBK,返回头里面写了这个编码方式content = response.read().decode('GBK')# print(content)return content# 下载数据
def downLoad(content):tree = etree.HTML(content)# 注释的是读取多列样式的,没注释是按行读取的# # 获取名字,把括号后面的内容裁掉# nameList = tree.xpath("//ul[@id='J_PicMode']//a/img/@alt")# for index,name in enumerate(nameList):# pos = nameList[index].find("(")# if pos != -1: # nameList[index] = nameList[index][0:pos] # pos = nameList[index].find("(")# if pos != -1: # nameList[index] = nameList[index][0:pos] # pos = nameList[index].find("/")# if pos != -1: # nameList[index] = nameList[index].replace('/', '_')# # print(nameList[index])# # 获取图片链接,懒加载,# imgList = tree.xpath("//ul[@id='J_PicMode']//a/img")# for index,img in enumerate(imgList):# # 拿到图片初始链接,并覆盖,原来并不能直接拿到.src属性# imgList[index] = img.get('.src')# # print(imgList[index])# 获取名字nameList = tree.xpath("//div[@class='list-box']//a//img/@alt")for index,name in enumerate(nameList):pos = nameList[index].find("(")if pos != -1: nameList[index] = nameList[index][0:pos] pos = nameList[index].find("(")if pos != -1: nameList[index] = nameList[index][0:pos] pos = nameList[index].find("/")if pos != -1: nameList[index] = nameList[index].replace('/', '_')print(nameList[index])# 获取图片链接,这个没有懒加载,imgList = tree.xpath("//div[@class='list-box']//a//img/@src")for index,img in enumerate(imgList):print(imgList[index])params = []# 获取详细参数paramList = tree.xpath("//div[@class='list-box']//a[@class='more']/@href")for index,param in enumerate(paramList):# https://detail.zol.com.cn/1397/1396968/param.shtmlparamList[index] = "https://detail.zol.com.cn" + param# print(index,paramList[index])param = laptopDetails(paramList[index])param["name"] = nameList[index]param["img"] = imgList[index]params.append(param)# # 下载# for i in range(len(nameList)):# name = nameList[i]# img = imgList[i]# print(str(i) + ":::" + name +" "+ img)# urllib.request.urlretrieve(url=img,filename="./img/"+name+".jpg")# 将列表数据转换为JSON格式字符串json_data = json.dumps(params, indent=4) # indent参数可选,用于格式化输出# 将JSON数据写入文件with open("data.json", "a") as json_file:json_file.write(json_data)print("JSON数据已保存到文件")brand = "华为" # "华为" "联想" "惠普" "戴尔"
model = "商务本" # "游戏本" "商务本"
time = "2022年下半年" # "2023年上半年" "2022年下半年"
with open("data.json", "w") as json_file:print("清空data数据")
startPage = 1
request = createRequext(brand,model,time,startPage)
content = getContent(request)
downLoad(content)
tree = etree.HTML(content)
num = tree.xpath("//span[@class='total']//b//text()")
endPage = int(int(num[0])/48) + 1
print(endPage)for page in range(startPage+1,endPage+1):# 请求对象定制request = createRequext(page)# 获取网页源码content = getContent(request)# 下载数据downLoad(content)# 下载完成print("下载完成!!!")
def laptopDetails(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'}request = urllib.request.Request(url=url,headers=headers)response = urllib.request.urlopen(request)# 中关村在线,编码格式采用GBK,返回头里面写了这个编码方式content = response.read().decode('GBK')tree = etree.HTML(content)# 定义数据param = {# 处理器 cpu型号,核心数/线程数/频率"cpu":{ "model":"","frequency":"","thread":""},# 存储设备 内存类型,内润荣含量,硬盘容量ssd"memory":{"memorySize":"","memoryType":"","diskSize":"","diskType":"",},# 显示器 尺寸,分辨率,秘鲁"screen":{"size":"","ratio":"","refresh":"","detail":""},# 显卡 型号"gpu":{"model":""},# 接口"i_o":{"dataIo":"","videoIo":"","soundIo":"","otherIo":""}}# 读取cpu数据,第二张表num = tree.xpath("//table[2]//tr")for index in range(len(num)):left = tree.xpath("//table[2]//tr["+str(index+1)+"]//th//a/text()")if not left:# 当 left 为空时执行的操作left = tree.xpath("//table[2]//tr["+str(index+1)+"]//th//span/text()")right = tree.xpath("//table[2]//tr["+str(index+1)+"]//td//a/text()")if not right:# 当 right 为空时执行的操作right = tree.xpath("//table[2]//tr["+str(index+1)+"]//td//span/text()")# print(left,right)if index == 0:continueif left[0] == 'CPU型号':if right[0]:# 当 right[0] 不为空时执行的操作param["cpu"]["model"] = right[0]# print(param["cpu"]["model"])if left[0] == 'CPU主频':if right[0]:param["cpu"]["frequency"] = right[0]if left[0] == '最高睿频':if right[0]:param["cpu"]["frequency"] = param["cpu"]["frequency"] + "/" + right[0]if left[0] == '核心/线程数':if right[0]: param["cpu"]["thread"] = right[0]# 读取memory数据,第三张表num = tree.xpath("//table[3]//tr")for index in range(len(num)):left = tree.xpath("//table[3]//tr["+str(index+1)+"]//th//a/text()")if not left:# 当 left 为空时执行的操作left = tree.xpath("//table[3]//tr["+str(index+1)+"]//th//span/text()")right = tree.xpath("//table[3]//tr["+str(index+1)+"]//td//a/text()")if not right:# 当 right 为空时执行的操作right = tree.xpath("//table[3]//tr["+str(index+1)+"]//td//span/text()")# print(left,right)if index == 0:continueif left[0] == '内存容量':if right[0]:param["memory"]["memorySize"] = right[0]# print(param["cpu"]["model"])if left[0] == '内存类型':if right[0]:param["memory"]["memoryType"] = right[0]if left[0] == '硬盘容量':if right[0]:param["memory"]["diskSize"] = right[0]if left[0] == '硬盘描述':if right[0]:param["memory"]["diskType"] = right[0]# 读取screen数据,第四张表num = tree.xpath("//table[4]//tr")for index in range(len(num)):left = tree.xpath("//table[4]//tr["+str(index+1)+"]//th//a/text()")if not left:# 当 left 为空时执行的操作left = tree.xpath("//table[4]//tr["+str(index+1)+"]//th//span/text()")right = tree.xpath("//table[4]//tr["+str(index+1)+"]//td//a/text()")if not right:# 当 right 为空时执行的操作right = tree.xpath("//table[4]//tr["+str(index+1)+"]//td//span/text()")# print(left,right)if index == 0:continueif left[0] == '屏幕尺寸':param["screen"]["size"] = right[0]# print(param["cpu"]["model"])if left[0] == '屏幕分辨率':param["screen"]["ratio"] = right[0]if left[0] == '屏幕刷新率':param["screen"]["refresh"] = right[0]if left[0] == '屏幕技术':param["screen"]["detail"] = right[0]# 读取gpu数据,第五张表num = tree.xpath("//table[5]//tr")for index in range(len(num)):left = tree.xpath("//table[5]//tr["+str(index+1)+"]//th//a/text()")if not left:# 当 left 为空时执行的操作left = tree.xpath("//table[5]//tr["+str(index+1)+"]//th//span/text()")right = tree.xpath("//table[5]//tr["+str(index+1)+"]//td//a/text()")if not right:# 当 right 为空时执行的操作right = tree.xpath("//table[5]//tr["+str(index+1)+"]//td//span/text()")# print(left,right)if index == 0:continueif left[0] == '显卡类型':if right[0]:param["gpu"]["model"] = right[0]# print(param["cpu"]["model"])# 读取i_o数据,第八张表num = tree.xpath("//table[8]//tr")for index in range(len(num)):left = tree.xpath("//table[8]//tr["+str(index+1)+"]//th//a/text()")if not left:# 当 left 为空时执行的操作left = tree.xpath("//table[8]//tr["+str(index+1)+"]//th//span/text()")right = tree.xpath("//table[8]//tr["+str(index+1)+"]//td//a/text()")if not right:# 当 right 为空时执行的操作right = tree.xpath("//table[8]//tr["+str(index+1)+"]//td//span/text()")# print(left,right)if index == 0:continueif left[0] == '数据接口':if right[0]:param["i_o"]["dataIo"] = right[0]# print(param["cpu"]["model"])if left[0] == '视频接口':if right[0]:param["i_o"]["videoIo"] = right[0]if left[0] == '音频接口':if right[0]:param["i_o"]["soundIo"] = right[0]if left[0] == '其他接口':if right[0]:param["i_o"]["otherIo"] = right[0]# print(param["cpu"])# print(param["memory"])# print(param["screen"])# print(param["gpu"])# print(param["i_o"])return param# laptopDetails("https://detail.zol.com.cn/1399/1398668/param.shtml")
3.2 结果展示
这是保存到数据,用json保存的
[{"cpu": {"model": "Intel \u9177\u777fi5 12500H","frequency": "2.5GHz/4.5GHz","thread": "12\u6838\u5fc3/16\u7ebf\u7a0b"},"memory": {"memorySize": "16GB","memoryType": "LPDDR4X\uff08\u4f4e\u529f\u8017\u7248\uff09","diskSize": "512GB>","diskType": "SSD\u56fa\u6001\u786c\u76d8>"},"screen": {"size": "14.2\u82f1\u5bf8","ratio": "\u66f4\u591a\u8d85\u9ad8\u6e05\u5c4f\u7b14\u8bb0\u672c>","refresh": "90Hz","detail": "\u83b1\u8335TUV\u786c\u4ef6\u7ea7\u4f4e\u84dd\u5149\u8ba4\u8bc1\uff0c\u83b1\u8335TUV\u65e0\u9891\u95ea\u8ba4\u8bc1"},"gpu": {"model": "\u96c6\u6210\u663e\u5361>"},"i_o": {"dataIo": "\u5de6\u4fa7\uff1a1\u00d7USB Type-C\uff0c1\u00d7Thunderbolt4","videoIo": "HDMI>","soundIo": "\u8033\u673a/\u9ea6\u514b\u98ce\u4e8c\u5408\u4e00\u63a5\u53e3","otherIo": ""},"name": "HUAWEI MateBook 14s 2022","img": "https://i0-prosmall-fd.zol-img.com.cn/t_s160x120/g7/M00/00/03/ChMkK2NbjVqIcP9XAAALk4AEbQIAAJAUgAr3VsAAAur116.jpg"},{"cpu": {"model": "Intel \u9177\u777f i7 1260P","frequency": "2.1GHz/4.7GHz","thread": "12\u6838\u5fc3/16\u7ebf\u7a0b"},"memory": {"memorySize": "16GB","memoryType": "LPDDR5\uff08\u4f4e\u529f\u8017\u7248\uff095200MHz>","diskSize": "1TB>","diskType": "SSD\u56fa\u6001\u786c\u76d8>"},"screen": {"size": "14.2\u82f1\u5bf8","ratio": "\u66f4\u591a\u8d85\u9ad8\u6e05\u5c4f\u7b14\u8bb0\u672c>","refresh": "90Hz","detail": "10.7\u4ebf\uff0c\u83b1\u8335TUV\u786c\u4ef6\u7ea7\u4f4e\u84dd\u5149\u8ba4\u8bc1"},"gpu": {"model": "\u96c6\u6210\u663e\u5361>"},"i_o": {"dataIo": "\u5de6\u4fa7\uff1a2\u00d7Thunderbolt4","videoIo": "","soundIo": "\u8033\u673a/\u9ea6\u514b\u98ce\u4e8c\u5408\u4e00\u63a5\u53e3","otherIo": ""},"name": "HUAWEI MateBook X Pro 2022 12\u4ee3\u9177\u777f\u7248","img": "https://i3-prosmall-fd.zol-img.com.cn/t_s160x120/g7/M00/0B/09/ChMkLGLhSFOIRKdBAAALdLA0Z58AAFt-gOySAoAAAuM163.jpg"},{"cpu": {"model": "Intel \u9177\u777f i7 1260P","frequency": "2.1GHz/4.7GHz","thread": "12\u6838\u5fc3/16\u7ebf\u7a0b"},"memory": {"memorySize": "16GB","memoryType": "LPDDR5\uff08\u4f4e\u529f\u8017\u7248\uff095200MHz>","diskSize": "512GB>","diskType": "SSD\u56fa\u6001\u786c\u76d8>"},"screen": {"size": "14.2\u82f1\u5bf8","ratio": "\u66f4\u591a\u8d85\u9ad8\u6e05\u5c4f\u7b14\u8bb0\u672c>","refresh": "90Hz","detail": "10.7\u4ebf\uff0c\u83b1\u8335TUV\u786c\u4ef6\u7ea7\u4f4e\u84dd\u5149\u8ba4\u8bc1"},"gpu": {"model": "\u96c6\u6210\u663e\u5361>"},"i_o": {"dataIo": "\u5de6\u4fa7\uff1a2\u00d7Thunderbolt4","videoIo": "","soundIo": "\u8033\u673a/\u9ea6\u514b\u98ce\u4e8c\u5408\u4e00\u63a5\u53e3","otherIo": ""},"name": "HUAWEI MateBook X Pro 2022 12\u4ee3\u9177\u777f\u7248","img": "https://i4-prosmall-fd.zol-img.com.cn/t_s160x120/g7/M00/0B/09/ChMkK2LhSFOIPYUUAAALdLA0Z58AAFt-gOxCakAAAuM444.jpg"},{"cpu": {"model": "Intel \u9177\u777fi5 12500H","frequency": "2.5GHz/4.5GHz","thread": "12\u6838\u5fc3/16\u7ebf\u7a0b"},"memory": {"memorySize": "16GB","memoryType": "LPDDR4X\uff08\u4f4e\u529f\u8017\u7248\uff09","diskSize": "1TB>","diskType": "SSD\u56fa\u6001\u786c\u76d8>"},"screen": {"size": "14.2\u82f1\u5bf8","ratio": "\u66f4\u591a\u8d85\u9ad8\u6e05\u5c4f\u7b14\u8bb0\u672c>","refresh": "90Hz","detail": "\u83b1\u8335TUV\u786c\u4ef6\u7ea7\u4f4e\u84dd\u5149\u8ba4\u8bc1\uff0c\u83b1\u8335TUV\u65e0\u9891\u95ea\u8ba4\u8bc1"},"gpu": {"model": "\u96c6\u6210\u663e\u5361>"},"i_o": {"dataIo": "\u5de6\u4fa7\uff1a1\u00d7USB Type-C\uff0c1\u00d7Thunderbolt4","videoIo": "HDMI>","soundIo": "\u8033\u673a/\u9ea6\u514b\u98ce\u4e8c\u5408\u4e00\u63a5\u53e3","otherIo": ""},"name": "HUAWEI MateBook 14s 2022","img": "https://i3-prosmall-fd.zol-img.com.cn/t_s160x120/g7/M00/00/03/ChMkLGNbjVqIa9TpAAALk4AEbQIAAJAUgAvYeAAAAur503.jpg"},{"cpu": {"model": "Intel \u9177\u777fi5 12450H","frequency": "2GHz/4.4GHz","thread": "\u516b\u6838\u5fc3/\u5341\u4e8c\u7ebf\u7a0b"},"memory": {"memorySize": "16GB","memoryType": "LPDDR4X\uff08\u4f4e\u529f\u8017\u7248\uff09","diskSize": "512GB>","diskType": ""},"screen": {"size": "16\u82f1\u5bf8","ratio": "1920x1200","refresh": "60Hz>","detail": "DC\u8c03\u5149\uff0c\u83b1\u8335TUV\u786c\u4ef6\u7ea7\u4f4e\u84dd\u5149\u8ba4\u8bc1"},"gpu": {"model": "\u96c6\u6210\u663e\u5361>"},"i_o": {"dataIo": "\u5de6\u4fa7\uff1a1\u00d7USB2.0\uff0c1\u00d7USB3.2","videoIo": "HDMI>","soundIo": "\u8033\u673a/\u9ea6\u514b\u98ce\u4e8c\u5408\u4e00\u63a5\u53e3","otherIo": ""},"name": "HUAWEI MateBook D 16 SE","img": "https://i4-prosmall-fd.zol-img.com.cn/t_s160x120/g7/M00/03/03/ChMkLGNiH-qIP2kgAAANdGksIagAAJMHQP-tPgAAA2M174.jpg"},{"cpu": {"model": "Intel \u9177\u777fi7 12700H","frequency": "2.7GHz/4.7GHz","thread": "14\u6838\u5fc3/20\u7ebf\u7a0b"},"memory": {"memorySize": "16GB","memoryType": "LPDDR4X\uff08\u4f4e\u529f\u8017\u7248\uff09","diskSize": "1TB>","diskType": "SSD\u56fa\u6001\u786c\u76d8>"},"screen": {"size": "14.2\u82f1\u5bf8","ratio": "\u66f4\u591a\u8d85\u9ad8\u6e05\u5c4f\u7b14\u8bb0\u672c>","refresh": "90Hz","detail": "\u83b1\u8335TUV\u786c\u4ef6\u7ea7\u4f4e\u84dd\u5149\u8ba4\u8bc1\uff0c\u83b1\u8335TUV\u65e0\u9891\u95ea\u8ba4\u8bc1"},"gpu": {"model": "\u96c6\u6210\u663e\u5361>"},"i_o": {"dataIo": "\u5de6\u4fa7\uff1a1\u00d7USB Type-C\uff0c1\u00d7Thunderbolt4","videoIo": "HDMI>","soundIo": "\u8033\u673a/\u9ea6\u514b\u98ce\u4e8c\u5408\u4e00\u63a5\u53e3","otherIo": ""},"name": "HUAWEI MateBook 14s 2022","img": "https://i0-prosmall-fd.zol-img.com.cn/t_s160x120/g7/M00/00/03/ChMkK2NbjVuIWbqqAAALk4AEbQIAAJAUgAwiIsAAAur286.jpg"},{"cpu": {"model": "Intel \u9177\u777fi5 1240P","frequency": "1.7GHz/4.4GHz","thread": "12\u6838\u5fc3/16\u7ebf\u7a0b"},"memory": {"memorySize": "16GB","memoryType": "LPDDR5\uff08\u4f4e\u529f\u8017\u7248\uff095200MHz>","diskSize": "512GB>","diskType": "SSD\u56fa\u6001\u786c\u76d8>"},"screen": {"size": "14.2\u82f1\u5bf8","ratio": "\u66f4\u591a\u8d85\u9ad8\u6e05\u5c4f\u7b14\u8bb0\u672c>","refresh": "90Hz","detail": "10.7\u4ebf\uff0c\u83b1\u8335TUV\u786c\u4ef6\u7ea7\u4f4e\u84dd\u5149\u8ba4\u8bc1"},"gpu": {"model": "\u96c6\u6210\u663e\u5361>"},"i_o": {"dataIo": "\u5de6\u4fa7\uff1a2\u00d7Thunderbolt4","videoIo": "","soundIo": "\u8033\u673a/\u9ea6\u514b\u98ce\u4e8c\u5408\u4e00\u63a5\u53e3","otherIo": ""},"name": "HUAWEI MateBook X Pro 2022 12\u4ee3\u9177\u777f\u7248","img": "https://i3-prosmall-fd.zol-img.com.cn/t_s160x120/g7/M00/0B/09/ChMkK2LhSFOIA3P8AAALdLA0Z58AAFt-gOyL2oAAAuM369.jpg"},{"cpu": {"model": "Intel \u9177\u777f i7 1260P","frequency": "2.1GHz/4.7GHz","thread": "12\u6838\u5fc3/16\u7ebf\u7a0b"},"memory": {"memorySize": "16GB","memoryType": "LPDDR5\uff08\u4f4e\u529f\u8017\u7248\uff095200MHz>","diskSize": "1TB>","diskType": "SSD\u56fa\u6001\u786c\u76d8>"},"screen": {"size": "14.2\u82f1\u5bf8","ratio": "\u66f4\u591a\u8d85\u9ad8\u6e05\u5c4f\u7b14\u8bb0\u672c>","refresh": "90Hz","detail": "10.7\u4ebf\uff0c\u83b1\u8335TUV\u786c\u4ef6\u7ea7\u4f4e\u84dd\u5149\u8ba4\u8bc1"},"gpu": {"model": "\u96c6\u6210\u663e\u5361>"},"i_o": {"dataIo": "\u5de6\u4fa7\uff1a2\u00d7Thunderbolt4","videoIo": "","soundIo": "\u8033\u673a/\u9ea6\u514b\u98ce\u4e8c\u5408\u4e00\u63a5\u53e3","otherIo": ""},"name": "HUAWEI MateBook X Pro 2022 \u5fae\u7ed2\u5178\u85cf\u7248","img": "https://i0-prosmall-fd.zol-img.com.cn/t_s160x120/g7/M00/0B/09/ChMkLGLhSFWIACpsAAAL26BNorcAAFt-gO2DjYAAAvz796.jpg"},{"cpu": {"model": "Intel \u9177\u777f i7 1260P","frequency": "2.1GHz/4.7GHz","thread": "12\u6838\u5fc3/16\u7ebf\u7a0b"},"memory": {"memorySize": "16GB","memoryType": "LPDDR5\uff08\u4f4e\u529f\u8017\u7248\uff095200MHz>","diskSize": "512GB>","diskType": "SSD\u56fa\u6001\u786c\u76d8>"},"screen": {"size": "14.2\u82f1\u5bf8","ratio": "\u66f4\u591a\u8d85\u9ad8\u6e05\u5c4f\u7b14\u8bb0\u672c>","refresh": "90Hz","detail": "10.7\u4ebf\uff0c\u83b1\u8335TUV\u786c\u4ef6\u7ea7\u4f4e\u84dd\u5149\u8ba4\u8bc1"},"gpu": {"model": "\u96c6\u6210\u663e\u5361>"},"i_o": {"dataIo": "\u5de6\u4fa7\uff1a2\u00d7Thunderbolt4","videoIo": "","soundIo": "\u8033\u673a/\u9ea6\u514b\u98ce\u4e8c\u5408\u4e00\u63a5\u53e3","otherIo": ""},"name": "HUAWEI MateBook X Pro 2022 \u5fae\u7ed2\u5178\u85cf\u7248","img": "https://i0-prosmall-fd.zol-img.com.cn/t_s160x120/g7/M00/0B/09/ChMkK2LhSFSIcUniAAAL26BNorcAAFt-gO2AkMAAAvz046.jpg"}
]
相关文章:
python爬虫爬取中关村在线电脑以及参数数据
一. 内容简介 python爬虫爬取中关村在线电脑以及参数数据 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 三.主要流程 3.1 代码 解析都在代码里面 # 接口分析 # 原始接口,后面几个数字就是占位的,每个位置代表着不同的标签 # http…...

chatGPT-对话爱因斯坦
引言 阿尔伯特爱因斯坦( 1879年 3 月 14 日 – 1955 年 4 月 18 日)是一位出生于德国的理论物理学家,被广泛认为成为有史以来最伟大、最有影响力的科学家之一。他以发展相对论而闻名,他还对量子力学做出了重要贡献,因…...
嵌入式软件开发中的数据类型转换
在嵌入式软件开发时,数据的显示必不可少,那么必定会涉及到数据类型转换。将不同类型的数据在编程中进行转换,以便满足不同的需求。 插入一个知识点: 在C语言中,字符串是由字符组成的字符数组,以null终止符…...
The Go Blog 01:反射的法则(译文)
反思的法则 罗伯-派克 2011 年 9 月 6 日 引言 计算机中的反射是指程序检查自身结构的能力,尤其是通过类型检查自身结构的能力;它是元编程的一种形式。它也是造成混乱的一个重要原因。 在本文中,我们试图通过解释 Go 中的反射是如何工作的…...
Visual Studio Code前端开发插件推荐
引言 Visual Studio Code(简称VS Code)是一款轻量级且强大的开源代码编辑器,广受前端开发者的喜爱。其丰富的插件生态系统为前端开发提供了许多便利和增强功能的插件。本篇博客将向大家推荐一些在前端开发中常用且优秀的插件,并提…...

jps(JVM Process Status Tool):虚拟机进程状况工具
jps(JVM Process Status Tool):虚拟机进程状况工具 列出正在运行的虚拟机进程,并显示虚拟机执行主类名称(Main Class,main()函数所在的类)以及这些进程的本地虚拟机唯一ID(LVMID&am…...

初阶c语言:实战项目三子棋
前言 大家已经和博主学习有一段时间了,今天讲一个有趣的实战项目——三子棋 目录 前言 制作菜单 构建游戏选择框架 实现游戏功能 模块化编程 初始化棋盘 打印棋盘 玩家下棋 电脑下棋 时间戳:推荐一篇 C语言生成随机数的方法_c语言随机数_杯浅…...
计网第三章(数据链路层)(三)
一、点对点协议PPP 在第一篇里有提到数据链路层的信道分为两种:点对点信道和广播信道。 PPP协议就属于点对点信道上的协议。 如果对前面数据链路层的三个基本问题了解的比较透彻,那么这一块很多东西都很好理解。 从考试的角度来讲,PPP协议…...
蓝桥杯每日N题 (砝码称重)
大家好 我是寸铁 希望这篇题解对你有用,麻烦动动手指点个赞或关注,感谢您的关注 不清楚蓝桥杯考什么的点点下方👇 考点秘籍 想背纯享模版的伙伴们点点下方👇 蓝桥杯省一你一定不能错过的模板大全(第一期) 蓝桥杯省一你一定不…...
Opencv 视频的读取与写入
目录 前言 通过路径获取视频内容 获取视频内容 检查是否正确打开 循环播放 完整代码 从摄像头读取视频数据 获取视频设备 其他与直接读取视频一致 完整实例 录制视频 用于创建视频编解码器的四字符码(FourCC) cv2.VideoWriter() 将视频帧…...

LeetCode 833. Find And Replace in String【字符串,哈希表,模拟】1460
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
Cesium轨迹漫游及视角切换
飞行漫游,就是让Camera飞行。Camera有一些方法可以实现位置、视角的调整,比如flyTo,setView方法。但这些方法并不能沿着我们想要的路径调整,在通过插值的方法不停的调用setView,但这样会造成视图卡顿,而且计…...

构建去中心化微服务集群,满足高可用性和高并发需求的实践指南!
随着互联网技术的不断发展,微服务架构已经成为了开发和部署应用程序的一种主流方式。然而,当应用程序需要满足高可用性和高并发需求时,单一中心化的微服务架构可能无法满足性能和可靠性的要求。因此,构建一个去中心化的微服务集群…...

开集输出和开漏输出
首先指明一下以下8中GPIO输入输出模式: GPIO_Mode_AIN 模拟输入; GPIO_Mode_IN_FLOATING 浮空输入; GPIO_Mode_IPD 下拉输入; GPIO_Mode…...

解决内网GitLab 社区版 15.11.13项目拉取失败
问题描述 GitLab 社区版 发布不久,搭建在内网拉取项目报错,可能提示 unable to access https://github.comxxxxxxxxxxx: Failed to connect to xxxxxxxxxxxxxGit clone error - Invalid argument error:14077438:SSL routines:SSL23_GET_S 15.11.13ht…...

【MySQL--->表的约束】
文章目录 [TOC](文章目录) 一、表的约束概念二、空属性约束三、default约束四、zerofill约束五、主键约束六、auto_increment(自增长)约束七、唯一键约束八、外键约束 一、表的约束概念 表通过约束可以保证插入数据的合法性,本质是通过技术手段,保证插入数据收约束,保证数据的…...

github中Keyless Google Maps API在网页中显示地图和标记 无需api key
使用Google Maps API在网页中显示地图和标记的示例博客。以下是一个简单的示例: C:\pythoncode\blog\google-map-markers-gh-pages\google-map-markers-gh-pages\index.html 介绍: 在本篇博客中,我们将学习如何使用Google Maps API在网页中…...

ComPDFKit PDF SDK for Windows Crack
ComPDFKit PDF SDK for Windows Crack 添加了在创建文本框时调整默认属性的支持。 增加了对调整PDF大小时调整宽度的支持。 添加了对编辑文本时更多快捷方式的支持。 优化了文本输入,并将字体样式与原始文本相匹配。 在内容编辑器模式下复制和粘贴时优化了UI交互。 …...

React+Typescript 状态管理
好 本文 我们来说说状态管理 也就是我们的 state 我们直接顺便写一个组件 参考代码如下 import * as React from "react";interface IProps {title: string,age: number }interface IState {count:number }export default class hello extends React.Component<I…...
stable diffusion 运行时报错: returned non-zero exit status 1.
运行sh run.sh安装stable diffusion时报错:ImportError: cannot import name builder from google.protobuf.internal (stable-diffusion-webui/venv/lib/python3.8/site-packages/google/protobuf/internal/__init__.py) 原因:python版本过低࿰…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...