【发布时间】:2015-12-24 14:05:23
【问题描述】:
我有这个网络爬虫代码,它从网站源代码中获取某些信息。它运行一个宏,然后再调用 2 个宏。第一次访问这些宏时,会发生错误。 “至少一个与 filref 关联的文件仍在使用中” 下面是它运行的示例代码。让我知道是否需要更清楚。
%macro webcrawl(search_url);
%let url3 = &search_url;
filename _next3 url "&url3";
data search_website;
infile _next3 length = len lrecl = 32767;
input text $varying32767. len;
if index(text,'<header>') or index(text, '<p>');
run;
proc sql;
create table table1 as
select distinct var1
from table;
quit;
/* Calls the macro from above to "crawl" the website
%do i=1 %to &show_count;
%showpage1( &i, &&var_&i, http://www.website.com );
%showpage2( &i, &&var_&i, http://www.website.com/2 );
%end;
以下是showpage1的代码,showpage2的代码相同,只是网站不同。
%macro showpage1( index, show, url );
%let url1 = &url;
filename _next url "&url";
data search_website;
infile _next length = len lrecl = 32767;
input text $varying32767. len;
if index(text, '<span>') or index(text, '</span>');
retain i;
if index(text, '<h2 class="title"') then i+1;
run;
data counting;
set search_website;
by i;
if first.i then count = 0;
count+1;
run;
proc transpose data=counting out=search_one_line prefix=info;
by i;
id count;
var text;
run;
data info1_&i (keep=var1 var 2 var3);
set dataset1;
run;
options missing=0;
%mend showpage1;
【问题讨论】:
-
最后一个 %let 上方有一个奇怪的注释。而且我不知道,但是您在 if 下方缺少运行语句。
-
不是完整的代码。当它尝试访问 %do 循环时,就会出现错误。我每次都需要关闭、删除、停止文件引用。
-
那么是 %showpage1 和/或 %showpage2 中的代码抛出错误吗?如果是这样,这些宏是什么样的?
-
添加了显示页面信息。感谢您的所有快速回复。
-
你试过把
filename _next clear;放在%showpage的末尾吗?这可能会解决问题。