Google은 실제로 "인간"상호 작용없이 검색 결과에 prohibit scraping을 표시합니다 (5.3 및 here 참조). 나는 너를 그렇게 옹호하지 않을거야. 그들이 말하는 우려는 너무 많은 사람들이이 문제를 일으킬 수 있다는 것입니다 (얼마나 많은 검색 단어를 찾을 것입니까?)뿐만 아니라 순위 게임 자체도 가능할 수 있습니다.
그렇다면 API를 사용하여 검색 결과를 처리하고 아래에서 설명한대로 HTML 결과를 사용하여 결과를 반복 할 수 있습니다.
http://www.googlerankings.com/
(참고 :. 나는이 웹 사이트와 제휴 어떠한 방식으로 오전, 그것은 단지 예입니다)
I 또는 당신이 도움을 사용할 수있는 서비스의 일부를 시도해 볼 수도 있습니다 당신은이 작업을 수행 이 서비스를 제공 할 많은 SEO 회사가 있다고 확신합니다. 스크래핑에 들어가기 전에 이러한 옵션을 살펴 보는 것이 좋습니다.
Google 검색 결과에서 기본 정보를 가져 오는 빠른 CS 클래스를 작성했습니다. 이 클래스는 위에서 언급 한 HTML Agility Pack을 사용합니다.이 도구는 XPath를 사용하여 페이지에서 찾고자하는 것을 찾을 수있게 해주는 웹 페이지를 반복하기 위해 Microsoft가 만든 아주 멋진 도구입니다. 이 경우 "// span // cite"는 url을 제공하므로이 예제에서는이를 사용합니다.
은 다음과 같이 사용합니다 : 이것은 CS 콘솔 응용 프로그램에 랩 할 수
GoogleRankScrape.Do(
"google scraping",
"C:\\rankings\\",
"//span//cite",
new string[] {"stackoverflow.com","wikipedia.org","okeydoke.org"},
100
);
다음 콘솔 응용 프로그램을 실행하려면 Windows 스케줄러를 사용합니다. 이것이 갈 수있는 다른 많은 방법이 있습니다. 이것은 단지 예일뿐입니다.
GoogleRankScrape 코드는 다음입니다 : 당신이 *에 대해 하나 개의 웹 페이지 "순위"를 참조 * A (싱글), "순위"사실 같은 것은 없다 : 잘
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();
}
}
, 한 가지가있다 google SERP에있는 질문은 다른 사람이 동일한 질문의 SERP에서 보는 사실에 관하여 다량을 밝히지 않는다. 순위는 사람마다, 컴퓨터에서 컴퓨터로, 데이터 센터에서 데이터 센터로, 위치마다, 그리고 우리가 알지 못하는 다른 요인들로 인해 다릅니다. 상관 관계가없는 스크랩 순위와 웹 페이지 실적은 창 밖에서 볼 수있는 것을 토대로 지구 온난화에 대해 이야기하는 것과 같습니다. –
그걸 받아 들여라.하지만 무언가를 측정하는 것은 아무 것도 측정하지 않는 것보다 낫다. – hawbsl
여기에 3 가지 솔루션에 대한 답변이 있습니다. http://stackoverflow.com/questions/22657548/is-it-ok-to-scrape-data-from-google-results/22703153#22703153 그 일을 아주 쉽게 끝내야합니다. – John