lisp板块精华帖链接抓取试验(附件lsp源码)
本帖最后由 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
下载收藏,需要再看 EH上网抓的很多,我也去抓了一回。本论坛除风之影抓取有道翻译外,网抓的很少。给楼主点赞,希望看到更多的网抓。 我写抓小说的时候,抓过几次小说,然后给站长发现了,然后有几个小说网站我就访问不了了 caoliu023 发表于 2022-12-11 14:04
我写抓小说的时候,抓过几次小说,然后给站长发现了,然后有几个小说网站我就访问不了了
你抓的太狠了,影响到网站运行了。站长认为你的电脑带毒了,就屏蔽你的ip了 收藏一下,万一有用呢!感谢分享 本帖最后由 baitang36 于 2022-12-12 08:35 编辑
wowan1314 发表于 2022-12-11 23:34
收藏一下,万一有用呢!感谢分享
唯一有用的就是从一个大字符串中找出一个小字符串位置的函数syz-find-str1
用法:(syz-find-str1 开始位置 大字符串 小字符串)返回小字符串在大字符串中的位置,开头从1开始计数
下载收藏,需要再看 本帖最后由 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
个人觉得应该先把字符串分解成单字符表,然后从表中查找,才能避免此类尴尬,不清楚高版本下有没此类尴尬
(defun explodestr(str / ac);;
(setq a(vl-string->list str))
(while a
(if(<(car a)129)(setq c(cons(chr(car a))c)a(cdr a))
(setq c(cons(strcat(chr(car a))(chr(cadr a)))c)a(cddr a))))
(reverse c))
(defun tt(n l1 l2 fuz / a i f m);;;从大表中指定位置开始找小表首次出现的位置
(repeat n(setq l1(cdr l1)))
(setq a(car l2)m(length l2))
(while(and(not f)(setq i(vl-position a l1)))
(setq f(vl-every(function(lambda(x y)(setq l1(cdr l1))(equal x y fuz)))l2(repeat i(setq l1(cdr l1))))
n(+ i n m)))
(if f(- n m)))
(defun find-str(start dstr1 sstr2 / l1 n )
(if(setq l1(explodestr dstr1)n 0 start(tt start l1(explodestr sstr2)0))
(repeat start(setq n(+(strlen(car l1))n)l1(cdr l1))))
n)
(FIND-STR 1"汉字测试""植馐")nil
(FIND-STR 1"汉字测试""测试")4
页:
[1]