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版本过低࿰…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...