c httpclient抓取网页(Python语言例子用C#来实现,代码贴在文中方便各位园友学习)

优采云 发布时间: 2022-03-29 03:05

  c httpclient抓取网页(Python语言例子用C#来实现,代码贴在文中方便各位园友学习)

  最近重读了当年出版的介绍推荐系统的书《集体智能的编程》,在当时似乎引领了潮流,现在已经成为所有互联网公司的必备技术。

  这次在阅读的同时,尝试用C#实现书中的一些Python语言示例,有利于自己的理解。代码贴在文中,方便园丁学习。

  由于本文与原书可能涉及版权问题,请勿以任何形式被第三方转载,谢谢合作。

  第三部分全文搜索引擎的搜索和排名

  全文搜索引擎的作用是在大量文档中搜索一系列单词,并根据文档与搜索单词的相关程度对结果进行排名。

  搜索引擎的组成

  从 Internet 或从固定数量的文档中采集文档。

  为采集的文档创建索引。

  按查询返回排序的文档。这个过程的关键是文档的排序方法。

  建立一个搜索引擎

  首先构造一个爬行动物的“外壳”。以下方法逐步完善:

  public class Crawler : IDisposable

{

    private HttpClient _httpClient;

    private IDbConnection _connection;

    private static readonly HashSet IgnoreWords 

        = new HashSet(new [] {"the","of","to","and","a","in","is","it"}); 

    //构造函数,接收数据库名作为参数

    public Crawler(string dbname)

    {

        _httpClient = new HttpClient();

        _connection = GetConn(dbname);

    }

    //辅助函数,用于获取条目Id,且如果条目不存在,就将其加入数据库中

    public int GetEntryId(string table, string field, string value, bool createnew = true)

    {

        return 0;

    }

    //为每个网页建立索引

    public async Task AddtoIndex(string url, HtmlDocument soup)

    {

        Console.WriteLine($"Indexing {url}");

    }

    //从一个HTML网页提取文字(不带html标签)

    public string GetTextOnly(HtmlDocument soup)

    {

        return null;

    }

    //分词

    public List SeparateWords(string text)

    {

        return null;

    }

    //如果Url已经建立索引,则返回true

    public bool IsIndexed(string url)

    {

        return false;

    }

    //添加一个关联两个网页的链接

    public void AddLinkref(string urlFrom, string urlTo, string linkText)

    {

    }

    //从一小组网页开始进行广度优先搜索,直至某一给定深度,期间为网页建立索引

    public async Task Crawl(List pages, int depth = 2)

    {

        throw new NotImplementedException();

    }

    public async Task GetHtmlDoc(string url)

    {

        return null;

    }

    //创建数据库表

    public void CreateIndexTables()

    {

    }

    public static string UrlJoin(string urlBase, string urlRel)

    {

        return null;

    }

    public IDbConnection GetConn(string dbname)

    {

        return null;

    }

    public void Dispose()

    {

        _connection.Close();

    }

}

  这还收录一些管理数据库连接的代码,以及索引时要忽略的单词列表。

  履带式

  对于 C#,抓取网页 HttpClient 是一个很好的选择。

  可以使用nuget安装HttpClient,在NuGet管理器中搜索“httpclient”,名为Microsoft.Net.Http的项就是HttpClient库。

  爬取网页代码很简单:

  var url = "http://xxx.com";

var httpClient = new HttpClient();

var content = await httpClient.GetStringAsync(url);

  HttpClient每次释放都会断开Tcp连接,所以为了节省性能,尽量把HttpClient做成单例。

  爬取网页后的另一个非常重要的步骤是分析Html的内容。对于 C#,可以使用 Html Agility Pack 库。安装Html Agility Pack也很简单,在Nuget中搜索HtmlAgilityPack,或者直接使用Install-Package HtmlAgilityPack。

  我们首先在爬虫类中实现 Crawl 方法。

<p>public async Task Crawl(List pages, int depth = 2)

{

    for (int i = 0; i 

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线