例1 :从爬取的源代码数据中提取信息:从网站爬取的数据含有一些源代码如"<td class="ccl"><div>董事</div>"中提取"董事",首先要对目标进行描述(在这个例子里以下方式均可,但其他例子中不一定,需要根据具体情况自己判断总结):
(1)目标字符串在<div>和</div>之间。
(2)目标字符串不在<>之间。
(3)目标字符串为汉字。
代码分别如下:
clear
*输入字符串
input str50 v
`"<td class="ccl"><div>董事</div>"'
end
*使用描述(1)提取"董事",生成新变量
gen 董事=ustrregexs(1) if ustrregexm(v,"<div>(.*?)</div>") *使用描述(1)提取"董事",替换原有变量
replace v =ustrregexs(1) if ustrregexm(v,"<div>(.*?)</div>")
list
ustrregexs(n) 表示按照ustrregexm(正则表达式)找到的第1个字符串,如果同一字符串有多个变量需要提取,参考这个帖子的例子: 从“广东省深圳市” 提取出“广东省”和“深圳市”
https://bbs.pinggu.org/forum.php?mod=redirect&goto=findpost&ptid=6272311&pid=77773881
如果想把提取出的多个字符串仍作为一个变量,这种方式不能一步到位,还需要对字符串进行相加。正向提取不方便,也可以反向相减,把不需要的信息删去即可,正如后两种描述方式。
clear
*输入字符串
input str50 v
`"<td class="ccl"><div>董事</div>"'
end
*使用描述(2)提取"董事",生成新变量
gen 董事=ustrregexra(v,"<(.*?)>","")
*使用描述(2)提取"董事",替换原有变量
replace v = ustrregexra(v,"<(.*?)>","")
list
这种方式是将尖括号以及其中的内容删去。但如果字符串中有的部分只有半个尖括号,比如“<td class="ccl"><div>董事</d”,那么这种描述方式也不合适。后面“</d”没法被正确删除。所以要非常小心地观察数据,避免误伤和漏删。
clear
*输入字符串
input str50 v
`"<td class="ccl"><div>董事</div>"'
end
*使用描述(3)提取董事,生成新变量
gen 董事=ustrregexra(v,"([^\u4e00-\u9fa5])","")
*使用描述(3)提取董事,替换原有变量
replace v =ustrregexra(v,"([^\u4e00-\u9fa5])","")
list
[\u4e00-\u9fa5]表示汉字的Unicode编码,[^\u4e00-\u9fa5]表示非汉字的内容,即将非汉字的内容删除。但如果字符串中有一些不需要保留的汉字,或者有需要保留的非汉字,也不能这样草率地删除。


雷达卡




京公网安备 11010802022788号







