Python爬虫利器PyQuery:用jQuery语法高效解析HTML与数据提取

news2026/5/15 7:20:51
1. PyQuery让Python爬虫和数据处理拥有jQuery的丝滑体验如果你和我一样既写Python脚本处理数据又偶尔需要和前端HTML打交道那你一定经历过这样的纠结面对一堆杂乱无章的HTML标签用正则表达式吧写起来复杂维护起来更是噩梦用BeautifulSoup吧功能强大但语法总感觉不够直观特别是当你熟悉了jQuery那种用CSS选择器精准定位元素的畅快感之后。几年前我在一个需要频繁抓取和解析电商网站商品信息的项目中就深受其扰。直到我发现了PyQuery它完美地解决了这个问题——它让Python拥有了几乎和jQuery一模一样的语法来操作HTML/XML文档。这意味着只要你懂一点前端就能立刻上手用你熟悉的$(‘#id’)、$(‘.class’)这样的方式在Python里“为所欲为”。今天我就结合自己多年的使用经验带你从安装到实战彻底玩转这个能让爬虫和数据清洗效率翻倍的利器。2. 核心思路为什么选择PyQuery而非其他解析库在Python的生态里HTML/XML解析库的选择不少主流的除了PyQuery还有BeautifulSoup和lxml。要理解PyQuery的价值我们得先看看它解决了什么痛点。2.1 解析库的“三国演义”与PyQuery的定位BeautifulSoup以其强大的解析能力和友好的API著称它能很好地处理“坏”HTML是很多初学者的首选。lxml则以其极致的解析速度和XPath支持闻名性能上优势明显。而PyQuery的杀手锏在于它的API设计。PyQuery的核心理念是“在Python中复制jQuery的体验”。这对于大量前端开发者转型数据分析、爬虫工程师或者像我们这样需要同时兼顾前后端任务的开发者来说学习成本几乎为零。你不需要再去记忆BeautifulSoup的find_all、select或者lxml那略显复杂的XPath语法直接用jQuery那套已经刻在DNA里的CSS选择器即可。举个例子假设我们要从一个复杂的商品列表页中提取所有商品名称假设在h3 class“product-name”里BeautifulSoup:soup.find_all(‘h3’, class_‘product-name’)lxml (XPath):tree.xpath(‘//h3[class“product-name”]/text()’)PyQuery:doc(‘h3.product-name’)一眼望去PyQuery的写法无疑是最简洁、最符合直觉的特别是当选择条件变得复杂时这种优势更加明显。2.2 PyQuery的独特优势与适用场景基于这个核心理念PyQuery在以下场景中表现尤为出色快速原型与脚本编写当你需要快速写一个脚本抓点数据或者解析本地HTML文件时PyQuery能让你思如泉涌想到哪写到哪不用在文档和代码间反复切换。前端经验复用团队中有前端背景的成员可以无缝参与数据抓取任务降低了协作门槛。复杂的DOM遍历与操作jQuery的链式调用和强大的遍历方法如.parent()、.siblings()、.find()在PyQuery中得到了完整继承处理嵌套深、结构复杂的文档时非常得心应手。与现有jQuery知识体系无缝衔接几乎所有jQuery选择器和方法都能在PyQuery中找到对应这使得查找解决方案时你可以直接搜索jQuery的问题答案往往能直接应用于PyQuery。注意PyQuery的底层解析引擎默认是lxml这意味着它在拥有jQuery友好API的同时也继承了lxml的解析速度。这是一个“鱼与熊掌兼得”的选择。3. 从环境搭建到第一个解析程序理论说再多不如动手试一下。让我们从零开始搭建环境并完成第一个解析程序。3.1 安装与验证安装PyQuery非常简单通过pip一条命令即可完成。我强烈建议在虚拟环境中进行操作以保持项目依赖的纯净。# 使用pip安装 pip install pyquery安装完成后可以在Python交互环境中简单验证一下import pyquery print(pyquery.__version__) # 查看版本确认安装成功3.2 初始化PyQuery对象三种常用方式PyQuery对象是操作的起点就像jQuery中的$()。有三种主要方式可以创建它1. 从字符串初始化最直接的方式当你已经拿到了HTML字符串时使用。from pyquery import PyQuery as pq html_string ‘divp class“greet”Hello, PyQuery!/p/div‘ doc pq(html_string) print(doc(‘p.greet’).text()) # 输出Hello, PyQuery!2. 从URL初始化配合requests库这是网络爬虫中最常见的场景。这里有一个至关重要的细节字符编码处理。很多网站特别是国内的一些旧站点可能不会在HTTP头或HTML meta标签中正确声明编码直接读取会导致中文乱码。from pyquery import PyQuery as pq import requests url “http://example.com” try: # 推荐使用requests库因为它能更好地处理请求头和会话 response requests.get(url) # 关键步骤优先使用apparent_encoding或手动指定正确编码 response.encoding response.apparent_encoding # 让requests自动判断编码 # 如果自动判断不准对于已知的网站可以手动指定如‘utf-8’或‘gbk’ # response.encoding ‘utf-8‘ doc pq(response.text) # 将正确解码后的文本传递给PyQuery print(doc(‘title’).text()) except requests.exceptions.RequestException as e: print(f“请求发生错误 {e}”)3. 从文件初始化当分析本地保存的网页快照或模板文件时非常有用。务必指定正确的文件编码。from pyquery import PyQuery as pq # 假设当前目录下有一个‘my_page.html’文件编码为UTF-8 doc pq(filename‘my_page.html’, encoding‘utf-8‘) # 也可以先读取文件内容再用字符串方式初始化 # with open(‘my_page.html’, ‘r’, encoding‘utf-8‘) as f: # doc pq(f.read()) print(doc(‘h1’).text())实操心得在实际爬虫项目中从URL初始化时编码问题是第一大坑。我的经验是首先检查response.encoding和response.apparent_encoding如果还有乱码可以查看网页源码中的meta charset“...”标签最后的手段是尝试用‘gbk’、‘gb2312’等常见中文编码。将response.text打印出来一小部分检查是调试编码问题最快的方法。4. 核心技能像jQuery一样选择和操作节点这是PyQuery最核心、最强大的部分。我们将通过一个更复杂的示例HTML文件来演示。假设我们有一个名为products.html的文件内容如下!DOCTYPE html html lang“en” head meta charset“UTF-8” title电子产品列表/title /head body div id“container” h1 class“page-title”今日热销数码产品/h1 ul class“product-list” id“plist” li class“product-item vip”>from pyquery import PyQuery as pq doc pq(filename‘products.html’, encoding‘utf-8‘)1元素选择器、ID选择器和类选择器这是最基础的三种选择器与CSS和jQuery完全一致。# 选择所有的 h3 元素 all_h3 doc(‘h3’) print(f“找到 {len(all_h3)} 个h3标签”) # 选择 id 为 ‘plist’ 的元素 product_list doc(‘#plist’) print(f“ID选择器找到 {product_list.attr(‘id’)}”) # 选择 class 包含 ‘product-item’ 的所有元素 items doc(‘.product-item’) print(f“类选择器找到 {len(items)} 个商品项”) # 选择同时具有 ‘product-item’ 和 ‘vip’ 两个class的元素 vip_item doc(‘.product-item.vip’) print(f“VIP商品ID是 {vip_item.attr(‘data-id’)}”)2属性选择器用于根据属性及其值来过滤元素功能非常强大。# 选择具有># 选择 .product-list 下的所有 .product-name (后代选择器空格分隔) names_in_list doc(‘.product-list .product-name’) print(“商品列表内所有名称”, [pq(name).text() for name in names_in_list]) # 选择 .product-item 的直接子元素 a (子元素选择器 分隔) # 注意这里每个.product-item下只有一个直接的a子元素 direct_links doc(‘.product-item a’) print(f“直接子链接数 {len(direct_links)}”)2伪类选择器用于选择特定序列或状态的元素。# 选择第一个 .product-item first_item doc(‘.product-item:first’) print(f“第一个商品 {first_item(‘.product-name’).text()}”) # 选择最后一个 .price last_price doc(‘.price:last’) print(f“最后一个价格 {last_price.text()}”) # 选择索引为1的 .product-item (索引从0开始) second_item doc(‘.product-item:eq(1)’) print(f“第二个商品 {second_item(‘.product-name’).text()}”) # 选择前两个商品项 first_two_items doc(‘.product-item:lt(2)’) print(f“前两个商品的ID”, [pq(item).attr(‘data-id’) for item in first_two_items]) # 选择包含‘秒杀’文字的商品项 seckill_item doc(‘.product-item:contains(“秒杀”)’) print(f“秒杀商品 {seckill_item(‘.product-name’).text()}”)4.3 节点的遍历、信息获取与DOM操作选择到元素后我们需要获取其信息或对其进行修改。1获取与设置属性、文本和HTML# 获取属性 first_link doc(‘a.product-link:first’) print(f“链接地址 {first_link.attr(‘href’)}”) # 方法1.attr(‘href’) print(f“链接地址 {first_link.attr.href}”) # 方法2.attr.href (属性访问方式) # 设置属性修改DOM常用于清理或标准化数据 first_link.attr(‘target’, ‘_blank’) # 给链接添加 target“_blank” print(f“修改后属性 {first_link.attr(‘target’)}”) # 获取文本内容 .text() product_name doc(‘.product-name:first’).text() print(f“纯文本名称 {product_name}”) # 获取内部HTML .html() product_html doc(‘.product-item:first’).html() print(“第一个商品的内部HTML前100字符:”, product_html[:100]) # 获取外部HTML包含自身标签 .outer_html() product_outer doc(‘.product-item:first’).outer_html() print(“第一个商品的外部HTML前150字符:”, product_outer[:150])2遍历元素集合当选择器返回多个元素时一个PyQuery对象集合我们需要遍历它们。# 方法一.items() 方法推荐 # 它返回一个生成器每次迭代得到一个独立的PyQuery对象可以对其调用各种方法。 print(“ 使用 .items() 遍历 ) for item in doc(‘.product-item’).items(): name item(‘.product-name’).text() price item(‘.price’).text() # 注意.tag可能不存在直接.text()会返回空字符串不会报错 tag item(‘.tag’).text() print(f“商品{name}, 价格{price}, 标签{tag if tag else ‘无’}”) # 方法二将PyQuery对象当作列表来循环 # 此时循环中的每个元素是lxml的Element对象不是PyQuery对象操作受限。 print(“\n 直接循环PyQuery对象 ) for element in doc(‘.product-item’): # 需要将element重新包装成PyQuery对象才能使用.text()等方法 item pq(element) print(item(‘.product-name’).text())实操心得务必使用.items()方法进行遍历。这是我踩过的一个坑。直接遍历PyQuery对象得到的是底层lxml元素丢失了PyQuery便捷的API。而.items()返回的是包装好的新PyQuery对象链式调用、属性获取等操作都能正常进行代码更清晰、更安全。3DOM树的导航与查找这是PyQuery媲美jQuery的精华所在可以让你在DOM树中自由移动。# 假设我们定位到“无线降噪耳机”这个商品项 headphone_item doc(‘.product-item[data-id“1002”]’) # 1. 查找后代元素 .find() # 在当前元素内部查找所有符合条件的后代 desc headphone_item.find(‘.product-desc’).text() print(f“查找后代找到的描述 {desc}”) # 2. 查找子元素 .children() # 只查找直接子元素 children headphone_item.children() print(f“直接子元素标签名”, [pq(child).attr(‘class’) or pq(child)[0].tag for child in children]) # 3. 查找父元素 .parent() # 查找直接父元素 parent_li headphone_item.parent() print(f“直接父元素是 {parent_li[0].tag if parent_li else ‘无’}”) # 应该是li自己不这里注意 # 实际上headphone_item就是li它的父元素是ul parent_ul headphone_item.parent() print(f“li的父元素是 {parent_ul[0].tag}”) # 输出ul # 查找所有祖先元素 .parents() ancestors headphone_item.parents() print(“所有祖先元素标签”, [pq(anc)[0].tag for anc in ancestors]) # 4. 查找兄弟元素 .siblings() # 查找所有同级的兄弟元素 siblings headphone_item.siblings() print(f“兄弟商品项数量 {len(siblings)}”) # 查找下一个兄弟元素 .next() next_item headphone_item.next() print(f“下一个商品ID {next_item.attr(‘data-id’) if next_item else ‘无’}”) # 查找上一个兄弟元素 .prev() prev_item headphone_item.prev() print(f“上一个商品ID {prev_item.attr(‘data-id’) if prev_item else ‘无’}”)4链式调用jQuery风格的链式调用让代码非常简洁。# 一个复杂的链式操作示例找到第一个商品获取其价格然后找到它的父元素再找父元素的兄弟元素中的分页区域... result (doc(‘.product-item:first’) .find(‘.price’) .text()) print(f“链式调用得到的价格 {result}”) # 另一个例子修改第二个商品的标签文字并添加一个类 doc(‘.product-item:eq(1) .tag’).text(‘火热抢购’).add_class(‘hot’) # 检查是否修改成功 modified_tag doc(‘.product-item[data-id“1002”] .tag’) print(f“修改后的标签文本 {modified_tag.text()} 类名 {modified_tag.attr(‘class’)}”)5. 实战进阶构建一个简易商品信息提取器现在让我们把所有知识融合起来写一个实用的脚本从我们的示例HTML中提取结构化的商品信息列表。from pyquery import PyQuery as pq import json def extract_products_from_html(html_content): “”” 从HTML内容中提取商品信息。 返回一个包含商品字典的列表。 “”” doc pq(html_content) products [] for item in doc(‘.product-item’).items(): product {} # 使用 .attr() 获取自定义属性 product[‘id’] item.attr(‘data-id’) # 使用 .text() 获取文本注意去空格 product[‘name’] item.find(‘.product-name’).text().strip() product[‘description’] item.find(‘.product-desc’).text().strip() # 价格处理移除货币符号转换为浮点数 price_text item.find(‘.price’).text().strip() try: product[‘price’] float(price_text.replace(‘¥’, ‘’).replace(‘,’, ‘’)) except ValueError: product[‘price’] None # 标签可能不存在使用条件判断 tag_element item.find(‘.tag’) product[‘tag’] tag_element.text().strip() if tag_element else ‘’ # 获取商品详情链接相对路径转绝对路径示例 link item.find(‘a.product-link’).attr(‘href’) product[‘link’] f“https://example.com{link}” if link and link.startswith(‘/’) else link products.append(product) return products # 从文件读取HTML模拟实际场景 with open(‘products.html’, ‘r’, encoding‘utf-8‘) as f: html_content f.read() # 提取信息 product_list extract_products_from_html(html_content) # 打印结果 print(“提取到的商品信息”) for idx, product in enumerate(product_list, 1): print(f“{idx}. {product}”) # 也可以保存为JSON文件 with open(‘products.json’, ‘w’, encoding‘utf-8‘) as f: json.dump(product_list, f, ensure_asciiFalse, indent2) print(“\n信息已保存至 products.json”)这个脚本展示了PyQuery在实际数据抽取中的应用遍历商品项、使用多种选择器定位子元素、提取并清洗文本、处理可能缺失的字段、以及构建结构化的数据字典列表最终可以轻松导出为JSON或存入数据库。6. 避坑指南与性能优化即使工具强大在实际项目中也会遇到各种问题。下面是我总结的一些常见坑点和优化建议。6.1 常见问题与排查技巧问题现象可能原因解决方案选择器返回空结果1. 选择器写错类名、ID有误2. 目标内容由JavaScript动态加载3. HTML结构嵌套层级与预期不符4. 编码问题导致文本乱码无法匹配中文字符1. 使用浏览器开发者工具F12的“检查”功能确认元素的确切选择器路径。2. 考虑使用Selenium、Playwright等能执行JS的浏览器自动化工具获取渲染后的HTML。3. 简化选择器先用doc(‘body’).html()打印部分HTML确认结构。4. 确保PyQuery对象初始化时编码正确参考3.2节。.text()或.html()返回空字符串1. 元素本身没有文本或子节点如img。2. 元素在DOM中确实存在但内容为空。3. 遍历时未使用.items()导致操作对象错误。1. 检查元素类型使用.attr(‘src’)等获取属性。2. 使用if element:进行判断。3.务必使用.items()遍历集合。属性获取为None1. 属性名拼写错误注意大小写、>1. 使用.attr()方法并检查属性名。2. 提供默认值value element.attr(‘attr_name’) or ‘default’解析速度慢1. HTML文档非常大几MB甚至几十MB。2. 使用了非常复杂或低效的选择器。1. 如果可能尝试分块处理或使用lxml直接解析性能更高。2. 尽量使用ID选择器避免过深的层级和通配符*。使用.find()在已缩小的范围内查找比全局选择器快。修改DOM后未生效PyQuery对象是对HTML字符串的一个“快照”或“视图”。直接修改doc对象不会影响原始的HTML文件或网络响应。修改操作只作用于当前的PyQuery对象。如果需要持久化应获取修改后的HTML字符串new_html doc.outer_html()然后写入文件。6.2 性能优化与最佳实践选择器优化尽量具体使用#id选择器是最快的。其次是类选择器.class。避免过度使用通配符和深层嵌套如div ul li a span这样的选择器效率较低。如果可能先通过ID或类缩小范围再用.find()。缓存结果如果同一个选择器需要多次使用将其赋给一个变量避免重复解析。# 不佳重复执行复杂选择器 for i in range(10): name doc(‘body #main .container .row .col-md-8 .product .title’).text() # 更佳缓存父级对象 product_section doc(‘body #main .container .row .col-md-8 .product’) for i in range(10): name product_section.find(‘.title’).text()处理动态内容对于SPA单页应用或大量依赖AJAX加载的网站PyQuery直接解析初始HTML是无效的。此时需要配合Selenium、Playwright或Pyppeteer等工具先获取浏览器完全渲染后的页面源码再交给PyQuery解析。结合其他库使用PyQuery专注于解析和DOM操作。网络请求交给requests或aiohttp异步并发任务用concurrent.futures或asyncio数据存储用pandas或数据库驱动。各司其职构建高效的数据流水线。错误处理网络请求和解析过程都要做好异常捕获。import requests from pyquery import PyQuery as pq from requests.exceptions import Timeout, ConnectionError url “http://some-site.com” try: resp requests.get(url, timeout10) resp.raise_for_status() # 如果状态码不是200抛出HTTPError异常 resp.encoding resp.apparent_encoding doc pq(resp.text) # ... 后续解析逻辑 except Timeout: print(“请求超时”) except ConnectionError: print(“网络连接错误”) except requests.exceptions.HTTPError as e: print(f“HTTP错误 {e}”) except Exception as e: print(f“其他错误 {e}”)7. 总结与扩展思考经过上面从入门到实战的梳理相信你已经感受到PyQuery在处理HTML/XML文档时的便捷与强大。它本质上是在高性能的lxml解析库之上包裹了一层极其友好的jQuery式API这种设计让它成为了连接前端知识与Python数据处理世界的完美桥梁。我个人在长期使用中最大的体会是PyQuery最适合那些DOM结构复杂、但页面静态内容丰富的抓取和清洗任务。它能让你用最少的代码、最清晰的逻辑快速提取出所需信息。当你的选择器越来越精准链式调用越来越流畅时那种效率提升的成就感是非常实在的。最后再分享一个小技巧如果你遇到一个页面用简单选择器无法定位到元素不妨试试PyQuery的.make_links_absolute(base_url)方法。它可以将文档中所有的相对链接如href“/detail/123”转换为绝对链接这对于后续的数据抓取调度非常有用。虽然它不像某些专门的反爬虫框架那样功能繁多但正是这种专注于核心功能的“纯粹”让PyQuery在众多工具中始终保持着一席之地。下次当你需要从网页中提取数据时不妨先想想“用PyQuery会不会更简单”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2614512.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…