我想找到一种循环所有国家的方法。
我有下面的脚本它有3个loops.Loop#2,3工作正常。但循环#1不是。 这里是逻辑 - 主要的alexa网站www.alexa.com/topsites/countries,这里有多个国家,每个国家都有2个字符后缀。对于每个国家/地区编号,前缀为获取国家/地区列表
流程:1。循环#1访问www.alexa.com/topsites/countries并循环所有国家。(此部分不起作用)2.loop#2为每个国家/地区循环所有页面(此部分也有效) 3.每个页面的循环#3收集数据。 (这部分正在运作)
var jsLF="\n";
var macro;
macro = "CODE:";
macro += "VERSION BUILD=9002379" + jsLF;
macro += "TAB T=1" + jsLF;
macro += "TAB CLOSEALLOTHERS" + jsLF;
macro += "TAG POS={{i}} TYPE=A ATTR=HREF:* EXTRACT=TXT" + jsLF;
macro += "SAVEAS TYPE=EXTRACT FOLDER=C:\\ FILE=hiprsites.txt" + jsLF;
var macro1;
macro1 = "CODE:";
macro1 += "VERSION BUILD=9002379" + jsLF;
macro1 += "TAB T=1" + jsLF;
macro1 += "TAB CLOSEALLOTHERS" + jsLF;
macro1 += "URL GOTO=http://www.alexa.com/topsites/countries;{{j}}/ID" + jsLF;
var macroAllC;
macroAllC = "CODE:";
macroAllC += "VERSION BUILD=9002379" + jsLF;
macroAllC += "TAB T=1" + jsLF;
macroAllC += "TAB CLOSEALLOTHERS" + jsLF;
macroAllC += "URL GOTO=http://www.alexa.com/topsites/countries;{{z}}" + jsLF;
//LOOP #1
//loop all countries take one country and go to next loop
for (var z=0;z<200;z++)
{
iimDisplay(z);
iimSet("z", z);
iimPlay(macroAllC);
//LOOP #2
//loop all the pages for each page get data
for (var j=0;j<20;j++)
{
iimDisplay(j);
iimSet("j", j);
iimPlay(macro1);
//LOOP #3
//loop the current page and get all 25 result
for(var i=1;i<=25;i++)
{
iimDisplay(i);
iimSet("i", i);
iimPlay(macro);
iimSet("i",i);
}//loop individual pages
}//loop macro1
答案 0 :(得分:2)
首先,您需要提取临时数组中的所有国家/地区:
var countries = new Array(), i = 4;
do
{
iimDisplay("Extracting " + i);
iimSet("i", i);
iimPlay("CODE:TAG POS={{i}} TYPE=A ATTR=HREF:*countries* EXTRACT=HREF");
if(iimGetLastExtract()!='#EANF#')
countries.push(iimGetLastExtract());
else break;
i++;
}
while(i);
我设置i=4
以获取第一个国家/地区AF
然后,您必须遍历每个国家/地区页面并提取另一个临时数组中的所有数据:
for(i=0;i<countries.length;i++)
{
var j = 2;
iimSet("url", countries[i]);
iimPlay("CODE:URL GOTO={{url}}");
do
{
iimDisplay("Loop " + (i+1) + " of " + countries.length + "\nExtracting " + j);
iimSet("j", j);
iimPlay("CODE:SET !TIMEOUT_STEP 1\nTAG POS={{j}} TYPE=A ATTR=HREF:*siteinfo* EXTRACT=HREF");
if(iimGetLastExtract()!='#EANF#')
temp_pages.push(iimGetLastExtract());
else
{
iimPlay("CODE:TAG POS=1 TYPE=A ATTR=TXT:Next");
if(iimGetLastError()=='OK')
j = 1;
else
break;
}
j++;
}
while(j);
}
现在我们将所有国家/地区的所有网页都存储在temp_pages
数组中,您必须循环并提取所需的数据:
for(i=0;i<temp_pages.length;i++)
{iimDisplay("Loop " + (i+1) + " of " + temp_pages.length);
iimSet("url", temp_pages[i]);
iimPlay("CODE:URL GOTO={{url}}");
j = 1;
do
{
iimSet("j", j);
iimPlay("CODE:TAG POS={{j}} TYPE=A ATTR=HREF:* EXTRACT=TXT");
if(iimGetLastExtract()!='#EANF#')
{
iimSet("ext", iimGetLastExtract());
iimPlay("CODE:SET !EXTRACT {{ext}}\nSAVEAS TYPE=EXTRACT FOLDER=C:\\ FILE=hiprsites.txt");
}
else break;
j++;
}
while(j);
}
因此,您将在hiprsites.txt
中获得许多锚点(不知道为什么需要此信息)。如果您要提取hrefs
,请将TAG POS={{j}} TYPE=A ATTR=HREF:* EXTRACT=TXT
更改为TAG POS={{j}} TYPE=A ATTR=HREF:* EXTRACT=HREF
。
祝你好运)
答案 1 :(得分:1)
尝试在发布问题之前检查您的代码,以防止出现这种愚蠢的错误
var macroAllC;
macroAllC = "CODE:";
macroAllC += "VERSION BUILD=9002379" + jsLF;
macroAllC += "TAB T=1" + jsLF;
macroAllC += "TAB CLOSEALLOTHERS" + jsLF;
macroAllC += "URL GOTO=http://www.alexa.com/topsites/countries/{{z}}" + jsLF;
var countries=new Array("RU","PK","GR");
for (var z=0;z<200;z++)
{
iimDisplay(z);
iimSet("z", countries[z]);
iimPlay(macroAllC);