none
爬虫抓取网页url如何组装啊? RRS feed

  • 问题

  • 比如在一个url为http://www.a.com/n/fa/k/html的页面中发现很多连接:
    <a href="/1.html">1</a>

    <a href="../2.html">2</a>

    <a href="../../3.html">3</a>

    <a href="4.html">4</a>

    等等,请问,我如何再把这些连接组装成可以访问的连接:

    <a href="/1.html">1</a> 对应 http://www.a.com/1.html

    <a href="../2.html">2</a> http://www.a.com/n/fa/2.html

    <a href="../../3.html">3</a> http://www.a.com/n/3.html

    <a href="4.html">4</a> http://www.a.com/n/fa/k/4.html

    http://www.mapgou.cn
    2009年3月23日 1:42

答案

  • 使用了类似webBrowser之类的控件是可以对html的DOM进行分析的,得到的就是绝对地址,就像你的鼠标放在链接上,浏览器状态栏显示的地址一样,都是绝对地址

    一般做爬虫的都会开发一套对html进行解析的程序来处理这样的事情,

    孟宪会
    2009年3月23日 4:55
    版主
  • 原来这个Uri就可以实现,走弯路了

    Uri baseUri = new Uri("http://www.contoso.com");
    Uri myUri = new Uri(baseUri, "catalog/shownew.htm");

    Console.WriteLine(myUri.ToString());



    http://www.mapgou.cn
    2009年3月23日 8:03
  • foreach (HtmlElement link in WebBrowser1.Document.Links) {
     MessageBox.Show(link.GetAttribute("href").ToString());
     }

    这样一次得到全部的链接地址

    孟宪会
    2009年3月23日 8:14
    版主

全部回复

  • 你就直接拼接可以了,有点智慧的浏览器和服务器都应该能解释,把"http://example.com/directory/../another/"理解为"http://example.com/another/"。
    2009年3月23日 2:22
    版主
  • 我是爬虫需要分析那个连接的,不是通过浏览器
    http://www.mapgou.cn
    2009年3月23日 2:33
  • 使用了类似webBrowser之类的控件是可以对html的DOM进行分析的,得到的就是绝对地址,就像你的鼠标放在链接上,浏览器状态栏显示的地址一样,都是绝对地址

    一般做爬虫的都会开发一套对html进行解析的程序来处理这样的事情,

    孟宪会
    2009年3月23日 4:55
    版主
  • 孟宪会 说:

    使用了类似webBrowser之类的控件是可以对html的DOM进行分析的,得到的就是绝对地址,就像你的鼠标放在链接上,浏览器状态栏显示的地址一样,都是绝对地址

    一般做爬虫的都会开发一套对html进行解析的程序来处理这样的事情,


    孟宪会


    foreach (HtmlElement link in ((WebBrowser)sender).Document.Links)
                {
                    string a = link.OuterHtml;
    //走到这里,不知道如何得到url的绝对路径了,link.DomElement居然是这个类型:mshtml.HTMLAnchorElementClass
                }

    http://www.mapgou.cn
    2009年3月23日 6:42
  • 原来这个Uri就可以实现,走弯路了

    Uri baseUri = new Uri("http://www.contoso.com");
    Uri myUri = new Uri(baseUri, "catalog/shownew.htm");

    Console.WriteLine(myUri.ToString());



    http://www.mapgou.cn
    2009年3月23日 8:03
  • foreach (HtmlElement link in WebBrowser1.Document.Links) {
     MessageBox.Show(link.GetAttribute("href").ToString());
     }

    这样一次得到全部的链接地址

    孟宪会
    2009年3月23日 8:14
    版主