明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1404|回复: 8

[资源] lisp板块精华帖链接抓取试验(附件lsp源码)

[复制链接]
发表于 2022-12-11 12:56:34 | 显示全部楼层 |阅读模式
本帖最后由 baitang36 于 2022-12-12 08:34 编辑

做了个抓取精华网页的试验,附件是试验结果。
lsp源码在acad2018下调试通过
syz-find-str1函数的用法:
(syz-find-str1 开始位置 大字符串 小字符串);返回小字符串在大字符串中的位置,开头从1开始计数



(defun syz-find-str1 (start1 dstr1 sstr2 / tempstr fstart1 fstart2)
  (setq dsize (strlen dstr1))
  (setq ssize (strlen sstr2))
  (setq fstart1 start1)
  (while (< fstart1 (- dsize ssize))
    (setq tempstr (substr dstr1 fstart1 ssize))
    (if        (equal tempstr sstr2)
      (progn
        (setq fstart2 fstart1)
        (setq fstart1 (- dsize ssize))
        fstart2
      ) ;_ progn
      (setq fstart1 (+ 1 fstart1))
    ) ;_ if
  ) ;_ while
) ;_ defun





                                       



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +1 收起 理由
自贡黄明儒 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-12-11 13:27:09 | 显示全部楼层
下载收藏,需要再看
发表于 2022-12-11 13:44:40 来自手机 | 显示全部楼层
EH上网抓的很多,我也去抓了一回。本论坛除风之影抓取有道翻译外,网抓的很少。给楼主点赞,希望看到更多的网抓。
发表于 2022-12-11 14:04:27 | 显示全部楼层
我写抓小说的时候,抓过几次小说,然后给站长发现了,然后有几个小说网站我就访问不了了
 楼主| 发表于 2022-12-11 14:08:38 | 显示全部楼层
caoliu023 发表于 2022-12-11 14:04
我写抓小说的时候,抓过几次小说,然后给站长发现了,然后有几个小说网站我就访问不了了

你抓的太狠了,影响到网站运行了。站长认为你的电脑带毒了,就屏蔽你的ip了
发表于 2022-12-11 23:34:44 来自手机 | 显示全部楼层
收藏一下,万一有用呢!感谢分享
 楼主| 发表于 2022-12-12 08:29:29 | 显示全部楼层
本帖最后由 baitang36 于 2022-12-12 08:35 编辑
wowan1314 发表于 2022-12-11 23:34
收藏一下,万一有用呢!感谢分享

唯一有用的就是从一个大字符串中找出一个小字符串位置的函数syz-find-str1
用法:(syz-find-str1 开始位置 大字符串 小字符串)返回小字符串在大字符串中的位置,开头从1开始计数
发表于 2022-12-13 10:12:45 | 显示全部楼层

下载收藏,需要再看
发表于 2022-12-13 10:59:57 | 显示全部楼层
本帖最后由 llsheng_73 于 2022-12-13 15:57 编辑

这样查找字符串的话,双字节字符会出现问题,
原因是因为双字节字符可能会被从高位和低位拆开
(VL-STRING->LIST"汉字测试")
(186 186 215 214 178 226 202 212)
(vl-list->string'(214 178 226 202))
"植馐"
结果会导致(SYZ-FIND-STR1 1"汉字测试""植馐")返回4
个人觉得应该先把字符串分解成单字符表,然后从表中查找,才能避免此类尴尬,不清楚高版本下有没此类尴尬
  1. (defun explodestr(str / a  c);;
  2.   (setq a(vl-string->list str))
  3.   (while a
  4.     (if(<(car a)129)(setq c(cons(chr(car a))c)a(cdr a))
  5.       (setq c(cons(strcat(chr(car a))(chr(cadr a)))c)a(cddr a))))
  6.   (reverse c))

  7. (defun tt(n l1 l2 fuz / a i f m);;;从大表中指定位置开始找小表首次出现的位置
  8.   (repeat n(setq l1(cdr l1)))
  9.   (setq a(car l2)m(length l2))
  10.   (while(and(not f)(setq i(vl-position a l1)))
  11.     (setq f(vl-every(function(lambda(x y)(setq l1(cdr l1))(equal x y fuz)))l2(repeat i(setq l1(cdr l1))))
  12.           n(+ i n m)))
  13.   (if f(- n m)))
  14. (defun find-str(start dstr1 sstr2 / l1 n )
  15.   (if(setq l1(explodestr dstr1)n 0 start(tt start l1(explodestr sstr2)0))
  16.     (repeat start(setq n(+(strlen(car l1))n)l1(cdr l1))))
  17.   n)

(FIND-STR 1"汉字测试""植馐")nil
(FIND-STR 1"汉字测试""测试")4






评分

参与人数 1明经币 +1 收起 理由
baitang36 + 1 很给力!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-16 04:31 , Processed in 0.204705 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表