当前位置:首页>网站源码>爬虫选择器"自愈术":网站改版,你的代码为什么不报错了?

爬虫选择器"自愈术":网站改版,你的代码为什么不报错了?

  • 2026-06-26 22:04:18
爬虫选择器"自愈术":网站改版,你的代码为什么不报错了?

一行 adaptive=True,让你的爬虫学会"找人"。


做爬虫的都知道这痛苦:

昨天还跑得好好的,今天突然全崩了。

打开一看,网站 UI 改版了——产品列表从 class="product" 变成了 class="item-card"。就这一个字符的变化,你的爬虫直接罢工。如果你有 100 个爬虫,每个爬虫 20 个选择器,恭喜,你接下来的周末没了。

但如果你的爬虫会"认人"呢?


01. 人类的"认人"能力

想象你去参加同学聚会。十年不见,当年的瘦子成了胖子,平头变成了卷发,T恤变成了西装。但你一眼就认出他——因为你的大脑不是靠"精确匹配"来认人的,而是靠多维特征加权匹配

这就像自适应选择器的工作方式。

传统爬虫的选择器逻辑是"精确匹配":

//div[@class="product" and @data-id="123"]

只要任何一个属性变了,就找不到。这就是为什么网站改版会直接让爬虫"瘫痪"。

自适应选择器的工作方式则是"特征匹配":

  1. 记住:首次抓取时,把元素的 7 个特征(标签、文本、class、层级、兄弟节点等)保存下来。
  2. 寻找:改版后,遍历页面所有元素,找到和"记忆"最相似的。
  3. 返回:把最相似的元素当作"目标元素"返回。

02. 内部原理

指纹:8 个维度刻画一个元素

维度
权重
作用
文本内容
2.0
"产品名称"大概率不会变,最高权重
关键属性 (class/id/href)
2.0
class 可能变但不会面目全非
属性键值集合
1.5
用 Jaccard 集合比较,不看顺序
标签名
1.0
<div>
 变成 <section>?这个不能变
DOM 路径
1.0
从 <html> 到目标元素的标签链
父节点
1.0
爸爸是谁,长什么样
兄弟节点
0.5
邻居变化太快,权重最低

相似度:加权平均,比单纯的"等于/不等于"聪明 10 倍

总分 = (文本相似度 × 2.0 + class 相似度 × 2.0 + ... ) / 总权重 × 100

difflib.SequenceMatcher 负责模糊比对——"Product Title v1.0" 和 "Product Title v2.0" 的相似度高达 85% 以上,而传统选择器的精确比对只能返回 0。

真实案例

网站改版前后:

<!-- 改版前 -->
<divclass="product">
<h2class="name">Widget Pro</h2>
<spanclass="price">$99</span>
</div>

<!-- 改版后 -->
<section>
<articleclass="item">
<h3class="title">Widget Pro Max</h3>
<spanclass="current-price">$99</span>
</article>
</section>

自适应匹配结果:

  • DOM 路径相似度:87.5% (虽然嵌套变了,但标签链仍有大量重合)
  • 文本相似度:93.3% ("Widget Pro" vs "Widget Pro Max")
  • 综合得分:76.2% — 超过阈值,匹配成功!

03. 如何使用

只需在 response.css() 或 response.xpath() 中添加一个参数:

# 之前:改版就崩溃
title = response.css('.product .name').get()

# 之后:改版自动恢复
title = response.css('.product .name', adaptive=True, identifier='product_name').get()

三个参数的完整形态

response.xpath(
'//div[@class="price"]',
    adaptive=True,          # 开启自适应
    identifier='price',     # 指纹标识(同页面不同选择器用不同 ID)
    percentage=50.0,        # 最低相似度阈值
)

高手进阶:find_similar() — 找到一个,定位全部

还有一个隐藏大招。你找到第一个商品后,能不能自动定位到其余商品?

# 1. 先找到第一个商品(保存指纹)
response.css('.product-item', adaptive=True, identifier='product')

# 2. 自动找到列表中所有同类商品
all_products = response.find_similar('product', threshold=50)

# 3. 每个商品提取信息
for item in all_products:
    title = item.css('.name').get()
    price = item.css('.price').get()
yield {'title': title, 'price': price}

find_similar() 基于 DOM 层级(同父元素 + 同深度 + 同标签)+ 属性/文本相似度,自动找到所有结构相同的相邻元素。原来需要精确选择器定位的"商品列表",现在只需要找到一个参考物就够了。

实战技巧:ignore_attributes — 跳过 URL 噪音

hrefsrc 这类属性在不同的页面元素间完全不同,会干扰匹配精度:

from crawlo.helpers.adaptive_selector import SimilarityMatcher

# 忽略 href 和 src,提高匹配精度
matcher = SimilarityMatcher(ignore_attributes={'href''src'})

# 或直接在 find_similar 中指定
response.find_similar('nav_link', threshold=60, ignore_attributes={'href''src'})

场景覆盖表

网站变化类型
是否恢复
class 名称改了
DOM 层级调整
新增/替换属性
文本内容微调
相邻结构元素
✅ find_similar()
标签类型变了 (<h3><h2>)
⚠️ 受同标签预过滤影响

04. 性能:不会拖慢你的爬虫

有人会担心:每次改版都要遍历页面所有元素做相似计算?会不会很慢?

答案:几乎不影响,原因有三:

  1. 同标签预过滤:只扫描与目标相同标签的元素。比如你找的是 <p>,就只看 <p>,不看 <div><span>

  2. 扫描上限:单次匹配最多 5000 个元素。即使是很长的文章页面,同标签元素也不会超过这个数。

  3. 命中时零开销:只在选择器失效时才触发匹配流程。正常运行时不增加任何计算。


05. 存储:SQLite 还是 Redis?

SQLite(默认):

  • 数据存在本地文件 adaptive_fingerprints.db
  • 零配置,开箱即用
  • 适合单机爬虫

Redis

  • 指纹存在 Redis,多个 Worker 共享
  • 一台机器抓取并保存指纹,其他 Worker 直接受益
  • 适合分布式爬虫集群

06. 一份配置,永久生效

# settings.py
ADAPTIVE_STORAGE_BACKEND = 'sqlite'# 或 'redis'
ADAPTIVE_SIMILARITY_THRESHOLD = 0.0# 全局阈值,越低越包容

默认阈值 0.0 意味着不做限制,完全由算法在候选元素中选最优。如果你担心误匹配,可以适当调高。


07. 不只是"改版恢复"

自适应选择器还有一个隐藏价值:自动识别页面布局

假设你要爬取多个电商网站的商品价格:

  • 淘宝的 class 是 .tm-price
  • 京东的 class 是 .p-price
  • 拼多多的 class 是 .goods-price

传统做法是为每个网站单独写选择器。但如果你先用一个网站"教会"爬虫"价格元素长什么样",自适应选择器就可以在其他网站上自动定位到价格——因为它记住的是"价格元素的特征"(通常包含数字、货币符号、特定标签和位置),而不是具体的 class 名称。


08. 实战案例:电商全站爬取

来看一个完整的电商爬虫,感受一下真实世界的威力:

classECommerceSpider(Spider):
    name = 'ecommerce'

defparse(self, response):
# === 列表页 ===
# ① 自适应定位商品列表容器
        items = response.css('.product-grid .item', adaptive=True,
                             identifier='product_list')

for item in items:
# ② 自适应提取每条商品信息
            title = item.css('.title', adaptive=True, identifier='prod_title').get()
            price = item.css('.price', adaptive=True, identifier='prod_price').get()
            link = item.css('a::attr(href)', adaptive=True, identifier='prod_link').get()

if title and link:
yield Request(url=response.urljoin(link),
                              meta={'title': title, 'price': price},
                              callback=self.parse_detail)

# ③ 如果商品列表定位失败(大改版),用 find_similar 兜底
ifnot items:
            items = response.find_similar('product_list', threshold=40)
for item in items:
# 重新尝试提取
                ...

defparse_detail(self, response):
# === 详情页 ===
# ④ 自适应提取正文(忽略 href/src 噪音)
        body = response.css('.article-body', adaptive=True,
                           identifier='article_body')
        content = body.css('::text').getall() if body else []

# ⑤ 提取元数据
        author = response.xpath('//span[@class="author"]/text()',
                                adaptive=True, identifier='author').get()
        date = response.xpath('//time[@class="date"]/@datetime',
                              adaptive=True, identifier='pub_date').get()

yield {
'title': response.meta.get('title'),
'price': response.meta.get('price'),
'author': author,
'date': date,
'content''\n'.join(content) if content else'',
        }

这个爬虫在网站改版时能够:

  • 列表页:class 变化 → 自适应恢复;完全找不到 → find_similar() 兜底
  • 详情页:content/author/date 三个选择器独立恢复
  • URL 噪音ignore_attributes 排除 href 干扰

一个爬虫、一次配置、长期免疫改版。


写在最后

爬虫领域有两个永恒的痛点:反爬对抗网站改版。Crawlo 的自适应选择器解决的是后者——用算法替代人工修复,把时间还给真正重要的事。

一行 adaptive=True,从此忘记改版。


本文技术基于 Crawlo 框架的自适应选择器模块。完整文档见 Crawlo Docs。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-27 02:09:00 HTTP/2.0 GET : https://g.sjds.net/a/458760.html
  2. 运行时间 : 0.287146s [ 吞吐率:3.48req/s ] 内存消耗:4,634.09kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=158060969d11864813eb8e0b07b40d96
  1. /yingpanguazai/ssd/ssd1/www/g.sjds.net/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/g.sjds.net/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/g.sjds.net/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/g.sjds.net/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/g.sjds.net/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/g.sjds.net/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/g.sjds.net/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/g.sjds.net/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/g.sjds.net/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/g.sjds.net/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/g.sjds.net/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/g.sjds.net/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/g.sjds.net/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/g.sjds.net/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/g.sjds.net/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/g.sjds.net/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/g.sjds.net/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/g.sjds.net/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/g.sjds.net/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/g.sjds.net/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/g.sjds.net/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/g.sjds.net/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/g.sjds.net/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/g.sjds.net/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/g.sjds.net/runtime/temp/8321bd4d2de6fe7dffb246d4ae0c61fd.php ( 12.06 KB )
  140. /yingpanguazai/ssd/ssd1/www/g.sjds.net/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001284s ] mysql:host=127.0.0.1;port=3306;dbname=g_sjds;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001652s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.001635s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000751s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001383s ]
  6. SELECT * FROM `set` [ RunTime:0.004997s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001647s ]
  8. SELECT * FROM `article` WHERE `id` = 458760 LIMIT 1 [ RunTime:0.019580s ]
  9. UPDATE `article` SET `lasttime` = 1782497340 WHERE `id` = 458760 [ RunTime:0.027664s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000862s ]
  11. SELECT * FROM `article` WHERE `id` < 458760 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001362s ]
  12. SELECT * FROM `article` WHERE `id` > 458760 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.007128s ]
  13. SELECT * FROM `article` WHERE `id` < 458760 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.034777s ]
  14. SELECT * FROM `article` WHERE `id` < 458760 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002141s ]
  15. SELECT * FROM `article` WHERE `id` < 458760 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.006603s ]
0.290845s