Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#像facebook和linkedin一样从url获取内容_C#_Web Scraping - Fatal编程技术网

c#像facebook和linkedin一样从url获取内容

c#像facebook和linkedin一样从url获取内容,c#,web-scraping,C#,Web Scraping,在将url发布到您的状态时,我如何实现Facebook和Linkedin一样的功能(在C#中) 正如你在Linkedin中看到的,你输入一个URL,Linkedin会自动获取文章的标题、图片和内容 我用来解析HTML。它可以作为NuGet软件包提供 如果您有这样定义的网页类: public class WebPage { public string Title { get; set; } public string PageUrl { get; set; } public

在将url发布到您的状态时,我如何实现Facebook和Linkedin一样的功能(在C#中)

正如你在Linkedin中看到的,你输入一个URL,Linkedin会自动获取文章的标题、图片和内容

我用来解析HTML。它可以作为NuGet软件包提供

如果您有这样定义的网页类:

public class WebPage
{
    public string Title { get; set; }
    public string PageUrl { get; set; }
    public string Text { get; set; }
}
您可以使用以下代码来解析HTML:

public WebPage ParseHtml(string html, Uri uri)
{
    var document = new HtmlDocument();
    document.LoadHtml(html);

    // remove scripts
    foreach (var script in document.DocumentNode.Descendants("script").ToArray())
    {
        script.Remove();
    }

    // remove styles
    foreach (var style in document.DocumentNode.Descendants("style").ToArray())
    {
        style.Remove();
    }

    // remove comments
    foreach (var style in document.DocumentNode.Descendants("#comment").ToArray())
    {
        style.Remove();
    }

    // sometimes </form> is not removed so we have to remove it manually
    string innerText = (document.DocumentNode.InnerText ?? "").Trim().Replace("</form>", "");

    var sb = new StringBuilder();
    var lines = innerText.Split(new[] { Environment.NewLine, "\n" }, StringSplitOptions.RemoveEmptyEntries);
    foreach (var line in lines)
    {
        string trimmed = StringUtils.DecodeAndRemoveSpaces(line);
        if (!string.IsNullOrWhiteSpace(trimmed))
        {
            sb.AppendLine(trimmed);
        }
    }

    var webPage = new WebPage { PageUrl = uri.AbsoluteUri };

    var titleNode = document.DocumentNode.Descendants("title").SingleOrDefault();
    if (titleNode != null)
    {
        webPage.Title = StringUtils.DecodeAndRemoveSpaces(titleNode.InnerText ?? "");
    }

    webPage.Text = sb.ToString();

    return webPage;
}
用法:

public async Task Test()
{
    using (var client = new HttpClient())
    {
        var uri = new Uri("http://www.google.com");
        string html = await client.GetStringAsync(uri);

        var webPage = ParseHtml(html, uri);
    }
}

您可以向该URL发送get请求。然后您可以获取标题、图像和内容


您可以看到一个通用示例(向下滚动到“示例”)。

不知道此实现的详细信息,我猜可能是。或者平台的适当公共API。我是否遗漏了什么,或者这将解析本地html文件中的内容?url呢?您需要先获取HTML。您可以使用HttpClient.GetStringAsync,然后将此HTML和Uri发送到
ParseHtml
方法
public async Task Test()
{
    using (var client = new HttpClient())
    {
        var uri = new Uri("http://www.google.com");
        string html = await client.GetStringAsync(uri);

        var webPage = ParseHtml(html, uri);
    }
}