楼主: guangyigu
3627 1

[有偿编程] 求用SAS爬虫的方法 [推广有奖]

  • 0关注
  • 0粉丝

高中生

42%

还不是VIP/贵宾

-

威望
0
论坛币
70 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
809 点
帖子
10
精华
0
在线时间
34 小时
注册时间
2015-4-30
最后登录
2019-2-1

30论坛币
现在有一些网址,想爬出来网页的标题,内容不需要,就浏览器上显示的网页中文标题就可以。在论坛找到的都是爬内容的,没有爬标题的code。

求大神解答!
关键词:code 浏览器 COD ODE
沙发
l1i2n3i4n5g 在职认证  发表于 2017-5-24 11:12:49 |只看作者 |坛友微信交流群
  1. data test;
  2. input wangzhi : $200.;
  3. cards;
  4. https://bbs.pinggu.org/thread-5644000-1-1.html
  5. http://www.163.com/
  6. http://www.autohome.com.cn/ningbo/
  7. http://map.baidu.com/
  8. http://www.ifeng.com/
  9. http://www.qq.com/
  10. ;
  11. run;

  12. /*宏变量n,表示网址个数,用于宏程序循环判断*/
  13. proc sql noprint;
  14. select count(wangzhi) into : n  from test;
  15. run;
  16. quit;


  17. %macro titles;
  18. %do i=1 %to &n;
  19. /************************************/
  20. /*把每个具体网址存入宏变量wangzhi*/
  21. data _null_;
  22. set test;
  23. if _n_=&i then call symput('wangzhi',wangzhi);
  24. run;
  25. /************************************/
  26. /*默认编码方式导入网页,当网页utf8编码时,中文乱码!*/
  27. FILENAME SOURCE URL "&wangzhi";
  28. DATA test1;
  29. retain charset;
  30. INFILE SOURCE obs=500 truncover;/*每个网页读入前500条*/
  31. INPUT line $500.;
  32. pattern1=prxparse('/^\s*<meta.*charset.*=.*([Uu][Tt][Ff]-[8]).*$/o');
  33. pattern2=prxparse('/^\s*<title>(.*)<\/title>\s*$/o');
  34. if prxmatch(pattern1,line) then charset=prxposn(pattern1,1,line);/*网页是否utf8编码*/
  35. if prxmatch(pattern2,line) then do;
  36.         title=prxposn(pattern2,1,line);
  37.         output;
  38.         end;
  39. if prxmatch(pattern2,line);
  40. RUN;
  41. /*utf8编码方式导入网页,当网页非utf8编码时,中文乱码!*/
  42. FILENAME SOURCE URL "&wangzhi" encoding=utf8;
  43. DATA test2;
  44. retain charset;
  45. INFILE SOURCE obs=500 truncover;
  46. INPUT line $500.;
  47. pattern3=prxparse('/^\s*<title>(.*)<\/title>\s*$/o');
  48. if prxmatch(pattern3,line) then title_utf8=prxposn(pattern3,1,line);
  49. if prxmatch(pattern3,line);
  50. RUN;
  51. /*根据网页是否utf8编码,纠正乱码*/
  52. data test3;
  53. merge test1 test2;
  54. if lowcase(charset)='utf-8' then title=title_utf8;
  55. keep title;
  56. run;
  57. /*test3只完成了对一个网址的题目提取,通过循环追加到test4中*/
  58. proc append base=test4 data=test3;
  59. run;
  60. /*为方便查看,加入网址变量*/
  61. data want;
  62. merge test test4;
  63. run;
  64. /************************************/
  65. %end;
  66. %mend titles;
  67. %titles
复制代码
已有 1 人评分经验 热心指数 收起 理由
prince315 + 20 + 1 精彩帖子

总评分: 经验 + 20  热心指数 + 1   查看全部评分

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 17:12