html agility pack url scraping——获取完整的html链接

2023-12-12

您好,我正在使用 nuget 包中的 html 敏捷包来抓取网页以获取页面上的所有 url。代码如下所示。然而,它在输出中返回给我的方式是,链接只是实际网站的扩展,而不是完整的 url 链接,例如http://www.foo/bar/foobar.com。我将得到的只是“/foobar”。有没有办法使用下面的代码获取 url 的完整链接? 谢谢!

static void Main(string[] args)
    {
        List<string> linksToVisit = ParseLinks("https://www.facebook.com");
    }

public static List<string> ParseLinks(string email)
    {

        WebClient webClient = new WebClient();

        byte[] data = webClient.DownloadData(email);
        string download = Encoding.ASCII.GetString(data);

        HashSet<string> list = new HashSet<string>();

        var doc = new HtmlDocument();
        doc.LoadHtml(download);
        HtmlNodeCollection nodes =    doc.DocumentNode.SelectNodes("//a[@href]");

            foreach (var n in nodes)
            {
                string href = n.Attributes["href"].Value;
                list.Add(href);
            }
        return list.ToList();
    }

您可以检查 HREF 值是相对 URL 还是绝对 URL。 将链接加载到Uri并测试它是否是相对的如果它是相对的,则将其转换为绝对将是要走的路。

static void Main(string[] args)
    {
        List<string> linksToVisit = ParseLinks("https://www.facebook.com");
    }

public static List<string> ParseLinks(string urlToCrawl)
    {

        WebClient webClient = new WebClient();

        byte[] data = webClient.DownloadData(urlToCrawl);
        string download = Encoding.ASCII.GetString(data);

        HashSet<string> list = new HashSet<string>();

        var doc = new HtmlDocument();
        doc.LoadHtml(download);
        HtmlNodeCollection nodes =    doc.DocumentNode.SelectNodes("//a[@href]");

            foreach (var n in nodes)
            {
                string href = n.Attributes["href"].Value;
                list.Add(GetAbsoluteUrlString(urlToCrawl, href));
            }
        return list.ToList();
    }

将相对 URL 转换为绝对 URL 的函数

static string GetAbsoluteUrlString(string baseUrl, string url)
{
    var uri = new Uri(url, UriKind.RelativeOrAbsolute);
    if (!uri.IsAbsoluteUri)
        uri = new Uri(new Uri(baseUrl), uri);
    return uri.ToString();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

html agility pack url scraping——获取完整的html链接 的相关文章

  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • UML类图:抽象方法和属性是这样写的吗?

    当我第一次为一个小型 C 项目创建 uml 类图时 我在属性方面遇到了一些麻烦 最后我只是将属性添加为变量 lt
  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • for循环中计数器变量的范围是多少?

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif

随机推荐

  • 在云托管上部署 Laravel 5.1

    我在 wamp 上开发了我的 laravel 应用程序 终于搞定了 租了一台带有CPanel接口的云托管服务器 我将所有文件上传到公共 html 上并尝试访问该网站 它应该进入登录页面但不起作用 我曾经部署经典的 html 文件 这是我第一
  • 单个字符的标签样式

    我需要更改此标签中一个字符的颜色 特别是 这需要对几个部分进行更改 但对其他许多部分则不需要更改 有没有一种内联方式可以让我做到这一点 td td
  • glassfish 命名中未找到 SerialInitContextFactory

    这开始让我彻底发疯 我想使用 Maven 创建一个 Glassfish 客户端应用程序 为此 我添加了所需的 gf client 依赖项
  • 为什么在 BIOS 中禁用超线程的 Broadwell CPU 上,perf stat 不计算周期:u?

    鉴于 BIOS 中禁用超线程的 Broadwell CPU root ny4srv03 lscpu Architecture x86 64 CPU op mode s 32 bit 64 bit Address sizes 46 bits
  • 如何将自定义列表视图设置到对话框中

    我正在开发一个应用程序 它从网络服务中获取一些数据并显示在列表视图中 我已经实现了一个由 BaseAdapter 扩展的自定义适配器 在里面getView 我也给原料充气的方法 这些工作得很好 我的问题是我已经实现了代码来在用户单击列表项时
  • 使用变量作为名称向 JavaScript 对象添加属性?

    我正在使用 jQuery 从 DOM 中提取项目 并希望使用以下方法在对象上设置属性idDOM 元素的 Example const obj jQuery itemsFromDom each function const element jQ
  • 如何使用 d3.js 创建定义列表?

    我正在尝试创建一个定义列表 如下所示 dl dt term1 dt dd definition1 dd dt term2 dt dd definition2 dd dt term3 dt dd definition3 dd dl 通过使用以
  • iOS 企业开发 - TestFlight

    我今天早上刚收到一封电子邮件 称 testflightapp com 从 2015 年 2 月 26 日起将不再活跃 我应该改用 iTunes Connect TestFlight 服务 对于应用程序商店应用程序来说 这很好 但我的大多数项
  • 自定义 Windows 文件夹图标

    Skype 在 C Program Files 中的 Skype 文件夹中有一个漂亮的自定义文件夹图标 如何为特定 Windows XP 及更高版本 文件夹注册自定义图标 使用 Desktop ini 自定义文件夹
  • CSS 如何在图像底部添加文本标题?

    我对 css 很陌生 我试图在图像底部添加文本标题 如下所示 我在 3 个不同的引导列中有 3 个图像 img preview display block margin 0 auto object fit cover min height
  • 线条颜色取决于趋势

    我正在尝试绘制一条线 该线应该以代表图表趋势的方式着色 例如 如果它正在增加 它应该是绿色的 而如果它正在减少 它应该是红色的 我可以简单地使用移位的数据框来表示这种趋势绘制点 dates 2018 01 format d for d in
  • mssql server 2008 的分页查询在“OFFSET”附近抛出错误的语法

    我正在 jsp 中进行分页 而且我是编写 sql 的新手 我做了研究并发现了简单的查询 SQL Server 2008 中的分页 and 如何在SQL Server 2008中进行分页 SELECT FROM document ORDER
  • 如何测试 cron 作业?

    我使用的是 Ubuntu Linux 10 0 4 我想每天每 6 小时运行一个脚本 当我发出sudo crontab e 我懂了 m h dom mon dow command 00 06 12 18 opt scripts seleni
  • 带有 tkinterdnd2 模块的 *.py 脚本不会编译为可执行文件

    我制作了一个使用 tkinter 和 tkinterdnd 模块的应用程序 当我将其作为脚本启动时 它工作得很好 但是当我尝试从中创建可执行文件并启动它时 会出现以下错误 Traceback most recent call last Fi
  • pytest (py.test) 在 cygwin 中启动非常慢

    在 cygwin 中 py test 启动非常慢 由于两个原因 它看起来不像是一个收集问题 相同的测试在 Linux 中启动得很快 有时 如果在 cygwin 中足够快地重新运行相同的测试 它会在不到 1 秒的时间内启动 运行 time 命
  • TextBox使用GDI还是GDI+

    基本上 我想测量 TextBox 中的文本大小 我发现 TextRenderer 给出了正确的值 而 Graphics 给出了错误的值 那么看起来 TextBox 应该使用 GDI 来绘制文本 对吧 然而 无论我读到什么 我都看到它应该使用
  • Firebird BLR 623 无效请求 - LRTRIM 未定义 - 找不到模块名称或入口点

    我在 Firebird 2 5 数据库中工作 当我运行一些使用 LRTRIM 函数的存储过程或视图 数据库对象 时 偶尔 并非总是 会出现以下错误 令牌无效 偏移量 623 处的无效请求 BLR 函数 LRTRIM 未定义 找不到模块名称或
  • 使用 python ctypes.CDLL() 从不同目录加载 .dll 时出错

    我必须遵循以下目录结构 MainProject project files rtlsdr rtlsdr dll other dll s etc 我正在使用该功能CDLL 在图书馆ctypes加载rtlsdr dll 当我的工作目录是时它工作
  • 使用 DataContractSerializer 进行序列化时如何忽略属性?

    我正在使用 NET 3 5SP1 和DataContractSerializer序列化一个类 在 SP1 中 他们改变了行为 这样您就不必包含DataContract DataMember类上的属性 它只会序列化整个事物 这是我正在使用的行
  • html agility pack url scraping——获取完整的html链接

    您好 我正在使用 nuget 包中的 html 敏捷包来抓取网页以获取页面上的所有 url 代码如下所示 然而 它在输出中返回给我的方式是 链接只是实际网站的扩展 而不是完整的 url 链接 例如http www foo bar fooba