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