使用iMacro获取SERP上的特定搜索结果的数量

时间:2016-02-19 14:55:18

标签: google-search imacros

我在Google SERP页面上搜索iMacro Universal Search结果。这些主要是新闻和图像。我找到div class(用于新闻)和div id(用于图片),然后将导出和写入URL过滤到导出文件中。类和id的名称通常不会被Google修改,因此与它们的关系稳定且足够轻松。

这就像它应该的那样,与SERP上的位置无关,onebox(带有新闻或图像的div)出现。然而,onebox可以出现在不同的SERP位置:第一个有机结果之前,第一个和第二个之间,第二个第三,等等。

问题:通用搜索结果,特别是新闻,图片和本地包,可以出现在SERP上的不同位置:在第一个有机结果之前,第一个和第二个,第二个和第三个,第九个和第十个之间,如截图: enter image description here

我希望我的iMacro 跟踪onebox实现的位置,并将其写入同一文件的第二列,其中写入排名网址。 I. e。如果新闻出现在第一个有机结果之前,我想得到1,如果在第一个和第二个之间 - 2,在9到10之间。

以下是关于我的iMacros的新闻栏:

SET !ERRORIGNORE YES
TAB T=1
TAB CLOSEALLOTHERS
URL GOTO=https://www.google.de/?gws_rd=ssl
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:f ATTR=NAME:q CONTENT=iphone
TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:tsf ATTR=TYPE:submit
TAG POS=1 TYPE=DIV ATTR=CLASS:"mnr-c _yE" EXTRACT=HTM
SET !EXTRACT EVAL("'{{!EXTRACT}}'.match(/href="([^\'\"]+)/g);")
SAVEAS TYPE=EXTRACT FOLDER=* FILE=links.csv

修改 编辑并使用javascript代码,现在查找我: var macro;

macro ="CODE:";
macro +="TAG POS=1 TYPE=H3 ATTR=CLASS:"r" EXTRACT=HTM";

iimPlay(macro)


table=iimGetLastExtract();

table=table.split("<tr>");

for(var t=0;t<table.length;t++)
{

if(table[t].indexOf('class="mnr-c _yE"')!=-1)
{
var position=t;
position++;
break;
}

}

alert(position);

但是得到一个错误:

SyntaxError: missing ; before statement, line NaN (Error code: -991)

每个搜索结果都放在<div class="g"></div>内,因此在SERP上有10个有机搜索结果是10个div s。它可以是如何获得搜索结果的数量的方法,在其之后或之前出现一个框 - 计数,之前出现了多少div class="g"。但我想念一个能够编码的技巧:(

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用JavaScript。

如果获得整个表并使用iimGetLastExtract()存储它,则可以将数据存储到变量中并拆分到表行标记上。像吼叫一样,

var macro;

macro ="CODE:";
macro +="TAG POS=1 TYPE=TABLE ATTR=CLASS:something EXTRACT=HTM";

iimPlay(macro)


table=iimGetLastExtract();

table=table.split("<tr>");

for(var t=0;t<table.length;t++)
{

if(table[t].indexOf("someHtmlTag")!=-1)
{
var position=t;
position++;
break;
}

}

alert(position);

我不太明白这个问题,但我希望这会有所帮助。

编辑:使用FIREBUG检查新闻ONBOX的HTML属性。然后,在代码的一部分指出该财产。 FOR EXAMPLE class =“OneBox”......

答案 1 :(得分:1)

整个宏看起来像:

TAB T=1
TAB CLOSEALLOTHERS
URL GOTO=https://www.google.de/?gws_rd=ssl
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:f ATTR=NAME:q CONTENT=iphone
TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:tsf ATTR=TYPE:submit

WAIT SECONDS=3
SET S "(function(){var elsH3 = window.document.getElementsByTagName('h3');"
ADD S "for (i = 0; i < elsH3.length; i++)"
ADD S "elsH3[i].setAttribute('searchnumber', i + 1);})()"
URL GOTO=javascript:{{S}}

SET !EXTRACT_TEST_POPUP NO
TAG POS=1 TYPE=DIV ATTR=CLASS:"mnr-c _yE" EXTRACT=HTM
SET oneBox EVAL("'{{!EXTRACT}}'.match(/href="([^\'\"]+)/g);")
SET !EXTRACT NULL

SET !TIMEOUT_STEP 0
TAG POS=R-1 TYPE=H3 ATTR=CLASS:"r" EXTRACT=HTM
SET searchNumberBefore EVAL("'{{!EXTRACT}}'.match(/searchnumber=\"(.*?)\"/)[1];")

SET !EXTRACT "after {{searchNumberBefore}}[EXTRACT]{{oneBox}}"
SAVEAS TYPE=EXTRACT FOLDER=* FILE=links.csv

这是我的想法:

SET S "(function(){var elsH3 = window.document.getElementsByTagName('h3');"
ADD S "for (i = 0; i < elsH3.length; i++)"
ADD S "elsH3[i].setAttribute('searchnumber', i + 1);})()"
URL GOTO=javascript:{{S}}

SET !EXTRACT_TEST_POPUP NO
SET !TIMEOUT_STEP 0
TAG POS=1 TYPE=DIV ATTR=CLASS:"mnr-c _yE" EXTRACT=HTM
SET !EXTRACT NULL
TAG POS=R-1 TYPE=H3 ATTR=CLASS:"r" EXTRACT=HTM
SET searchNumberBefore EVAL("'{{!EXTRACT}}'.match(/searchnumber=\"(.*?)\"/)[1];")
SET !EXTRACT NULL
TAG POS=R1 TYPE=H3 ATTR=CLASS:"r" EXTRACT=HTM
SET searchNumberAfter EVAL("'{{!EXTRACT}}'.match(/searchnumber=\"(.*?)\"/)[1];")
PROMPT "between {{searchNumberBefore}} and {{searchNumberAfter}}"

改进此代码并将其调整为宏。