gpt4 book ai didi

.net - 每天制作一次脚本来访问Google并记录我们的SERP职位?

转载 作者:行者123 更新时间:2023-12-04 17:23:02 24 4
gpt4 key购买 nike

我们组织内部已经需要(每天)监视Google在Google第1页上显示我们网站的位置(自然和PPC)。也是主要竞争对手出现的地方。对于某些关键词。

短期内,一位同事是通过手动点击Google并记下结果来做到这一点的。是的

在我们看来,我们可以编写脚本(例如使用C#)来执行此操作。

我知道Analytics(分析)会告诉我们很多东西,但是它没有注意到竞争对手的位置,而且我认为它没有我们想要的其他数据。

问题是,是否有一个现有的基本工具可以做到这一点(我想免费)?如果我们自己编写它,那么从哪里开始,有明显的陷阱可以避免(例如Google可以检测并阻止自动请求吗?)

编辑:
对于那些建议使用Google API的答案-Google Groups上的这篇帖子似乎完全排除了这一点:



自定义搜索API要求您设置自定义搜索引擎(CSE)
必须设置为搜索特定
网站,而不是整个网站。
自定义搜索API服务条款明确禁止您
自动查询,这将是关键
“定期且准确”
测量网站的SERP。


杰里米·盖尔德斯

最佳答案

Google实际上是在没有“人为”交互的情况下完成其搜索结果的prohibit scraping(请参见5.3和here)。我不主张你这样做。他们表示担心的是,这样做的人太多可能会导致问题(您要寻找多少个搜索字词?),以及可能自己排名。

话虽如此,您可能会使用html结果来使用API​​来执行搜索结果并遍历结果,如下所示。或者,您可以尝试一些可用的服务来帮助您做到这一点:

http://www.googlerankings.com/

(注意:我绝不隶属于本网站,这只是一个例子。)

我确信有很多SEO公司也会提供这项服务。我建议您在开始抓取之前先探索这些选项。

我继续学习了快速的CS课,它将从Google搜索结果中提取基本信息。此类使用提到的HTML Agility Pack,这是Microsoft创建的用于浏览网页的漂亮工具,允许您使用XPath在页面中查找所需内容。在这种情况下,“ // span // cite”为您提供了网址,因此本示例使用该网址。

要使用,请执行以下操作:

GoogleRankScrape.Do(
"google scraping",
"C:\\rankings\\",
"//span//cite",
new string[] {"stackoverflow.com","wikipedia.org","okeydoke.org"},
100
);


可以将其包装到CS控制台应用程序中,然后使用Windows调度程序运行控制台应用程序。还有很多其他方式可以做到这一点;这只是一个例子。

GoogleRankScrape代码如下:

using System;
using System.IO;
using System.Text;
using HtmlAgilityPack;

class GoogleRankScrape
{
public static void Do(string query, string dest, string path, string[] matches, int depth)
{
Directory.SetCurrentDirectory(@dest);

string url = "http://www.google.com/search?q=" + query + "&num=" + depth;

string rp = "rankings.txt";

DateTime dt = DateTime.Now;

string dtf = String.Format("{0:u}", dt);
string dtfr = String.Format("{0:f}", dt);
dtf = dtf.Replace("-", "");
dtf = dtf.Replace(" ", "");
dtf = dtf.Replace(":", "");

string wp = "page" + dtf + ".html";
string op = "output" + dtf + ".txt";

FileInfo r = new FileInfo(rp);
if (!File.Exists("rankings.txt"))
{
StreamWriter rsw = r.CreateText();
rsw.Close();
}

StreamWriter rs = new StreamWriter(r.Name, true);

rs.WriteLine("Date: " + dtfr);
rs.WriteLine("Date: " + dtf);
rs.WriteLine("Depth: " + depth);
rs.WriteLine("Query: " + query);

HtmlWeb hw = new HtmlWeb();
HtmlDocument d = hw.Load(url);
d.Save(wp);

FileInfo o = new FileInfo(op);
StreamWriter os = o.CreateText();

HtmlDocument HD = new HtmlDocument();
HD.Load(wp);

string check = "";
string checkblock = "";

var SpanCite = HD.DocumentNode.SelectNodes(path);
if (SpanCite != null)
{
int rank = 1;
foreach (HtmlNode HN in SpanCite)
{
String line = "";
if (HN.InnerText.ToString().IndexOf("/") > 0)
{
line = HN.InnerText.ToString().Substring(0, HN.InnerText.ToString().IndexOf("/"));
}
else if (HN.InnerText.ToString().IndexOf(" ") > 0)
{
line = HN.InnerText.ToString().Substring(0, HN.InnerText.ToString().IndexOf(" "));
}
else
{
line = HN.InnerText.ToString();
}
os.WriteLine(line);
os.WriteLine(rs.NewLine);

for (int i = 0; i < matches.Length; i++)
{
checkblock = "[" + matches[i] + "]";
if (line.Contains(matches[i]) && !check.Contains(matches[i]))
{
rs.WriteLine("Rank: " + rank.ToString() + ", " + matches[i]);
check += checkblock;
}
}

rank++;
}

for (int i = 0; i < matches.Length; i++)
{
checkblock = "[" + matches[i] + "]";
if (!check.Contains(matches[i]))
{
rs.WriteLine("Rank: not ranked" + ", " + matches[i]);
}
}
}

os.Close();

rs.WriteLine("==========");
rs.Close();
}

}

关于.net - 每天制作一次脚本来访问Google并记录我们的SERP职位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4689671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com