我是C#和数据抓取的新手,我不知道该怎么做。我打算在谷歌中搜索一些关键词,然后获取搜索结果中的标题和描述以及网址,然后使用seocheki.net中的网址,然后提取数据。我该怎么办?
我仍然不知道如何提取谷歌搜索结果,所以我试图在seocheki中获取数据。
我尝试使用HTMLAgilityPack来获取seocheki中的数据
private async Task<List<Seocheki>> ResultFromSeocheki(int pageNum)
{
string url = "http://seocheki.net/site-check.php?u=http%3A%2F%2Fwww.gamerankings.com%2Fbrowse.html";
var doc = await Task.Factory.StartNew(() => web.Load(url));
var titleNodes = doc.DocumentNode.SelectNodes("//*[@id=\"td-title\"]");
var descNodes = doc.DocumentNode.SelectNodes("//*[@id=\"td-desc\"]");
var keywordNodes = doc.DocumentNode.SelectNodes("//*[@id=\"td-kw\"]");
var h1Nodes = doc.DocumentNode.SelectNodes("//*[@id=\"td-h1\"]");
var title = titleNodes.Select(node => node.InnerText).ToList();
var desc = descNodes.Select(node => node.InnerText).ToList();
var keyword = keywordNodes.Select(node => node.InnerText).ToList();
var h1 = h1Nodes.Select(node => node.LastChild.InnerText).ToList();
}
但这是结果
如何抓取数据? HTMLAgilityPack似乎对我不起作用。
答案 0 :(得分:0)
看一下这个答案:Running Scripts in HtmlAgilityPack
基本上HTMLAgilityPack是一个HTML引擎,如果您在http://seocheki.net/site-check.php?u=http%3A%2F%2Fwww.gamerankings.com%2Fbrowse.html上查看来源,您会看到以下部分:
...
<th class="pelem">title</th><td id="td-title" colspan="3"> </td>
</tr>
<tr>
<th class="pelem">description</th><td id="td-desc" colspan="3"> </td>
</tr>
<tr>
<th class="pelem">keywords</th><td id="td-kw" colspan="3"> </td>
</tr>
...
您可以看到这些项目的 HTML 内容确实是''。您在网页上看到的实际文本内容是通过javascript注入的,因此HTMLAgilityPack不会为您提供,请参阅此答案顶部的链接以获取更多详细信息。
然而,快速浏览网站的javascript会显示这些字段是通过调用http://seocheki.net/get/get-siteinfo.php?url=http%3A%2F%2Fwww.gamerankings.com%2Fbrowse.html来填充的
返回以下JSON:
{"title":" Reviews and News Articles - GameRankings","desc":"GameRankings browse/search engine shows games review scores from around the net.","kw":"","h1":"Browse and Search Games","inlink":"68","outlink":"6","lastm":"-","fsize":"54.6KB","ttime":"0.996秒"}
因此,您可以直接查询和使用该JSON *
*我不会以任何方式声明这样做是合法/适当的。