我必须创建一个应用程序 - 对于给定的术语 - 从谷歌搜索页面下载前10个结果的链接,但是有问题,
如果我使用webClient下载源代码,而不是html--我得到了JS代码。
如果我查看Google Chrome中的源代码(ctrl + u),我会得到相同的结果但是如果我尝试使用内置的开发人员工具检查该元素我可以看到真正的HTML代码
任何人都知道如何下载真正的HTML代码以便我可以提取链接?
答案 0 :(得分:5)
您应该使用Google自定义搜索API
这是一个显示搜索“汽车”
的前10个结果的示例<html>
<head>
<title>JSON/Atom Custom Search API Example</title>
</head>
<body>
<div id="content"></div>
<script>
function hndlr(response) {
for (var i = 0; i < response.items.length; i++) {
var item = response.items[i];
// in production code, item.htmlTitle should have the HTML entities escaped.
document.getElementById("content").innerHTML += "<br>" + item.htmlTitle;
}
}
</script>
<script src="https://www.googleapis.com/customsearch/v1?key=YOUR-KEY&cx=017576662512468239146:omuauf_lfve&q=cars&callback=hndlr">
</script>
</body>
</html>
答案 1 :(得分:2)
您可以创建一个Perl脚本来仅提取您想要的数据,即使它包含大量JavaScript,该文档也是有效的HTML,因此您可以使用HTML解析器转换为XHTML并使用XML::Simple
或XML::Twig
答案 2 :(得分:0)
这是我用来从谷歌获取搜索结果的一些代码,使用API:
string googleUriPattern =
"http://ajax.googleapis.com/ajax/services/search/web?v=1.0&safe=off&rsz=large&userip={0}&q={1}";
var requestUri = new Uri(
string.Format(
googleUriPattern,
"A valid IP address",
"query"
));
var httpWebRequest = (HttpWebRequest)WebRequest.Create(requestUri);
httpWebRequest.Timeout = 5000;
using (var webResponse = httpWebRequest.GetResponse())
using (var sr = new StreamReader(webResponse.GetResponseStream()))
{
var result = JsonConvert.DeserializeXNode(sr.ReadToEnd(), "responseData");
var searchResultCount = Convert.ToInt32((string)result.Descendants("estimatedResultCount").FirstOrDefault());
}
正如您所看到的,我的情况是确定查询的谷歌估计结果计数,但是如果您愿意,您可以获得可以阅读结果的整个回复。