使用C#刮取多个站点

时间:2016-11-28 09:08:11

标签: c# web-scraping

我是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();

    }

但这是结果

enter image description here

如何抓取数据? HTMLAgilityPack似乎对我不起作用。

1 个答案:

答案 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">&nbsp;</td>
</tr>
<tr>
<th class="pelem">description</th><td id="td-desc" colspan="3">&nbsp;</td>
</tr>
<tr>
<th class="pelem">keywords</th><td id="td-kw" colspan="3">&nbsp;</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 *

*我不会以任何方式声明这样做是合法/适当的。