【问题标题】:webclient or httpwebrequest to retrieve hrefs and urlwebclient 或 httpwebrequest 检索 href 和 url
【发布时间】:2013-05-30 22:43:48
【问题描述】:

如何使用 webclient 或 httpwebrequest 来做两件事:

1)在将资源下载为字符串后说:

 var result = x.DownloadString("http://randomsite.com);

有一个相对的url(也是查询字符串):

<a href="/q?name=john&age=50">Click here to get your name and age</a>

如何使用网络客户端点击(关注)该链接?在最初将资源加载到结果中之后。我能够使用 htmlagilitypack 来隔离 href,但我现在想在代码中遵循它。

2) 如果 httpwebrequest 不重定向而是加载具有不同参数的同一页面,我将如何使用 webclient 来检索生成的新 url? 即如果我打电话

var result = x.DownloadString("http://randomsite.com);

但这实际上是调用

http://randomsite.com/q?site=default

然后我想检索第二个网址

提前致谢

【问题讨论】:

    标签: c# httpwebrequest screen-scraping webclient


    【解决方案1】:

    您可以像这样从链接和刚刚下载的链接构建 url:

    Uri baseUri = new Uri("http://randomsite.com");
    Uri myUri = new Uri(baseUri, "/q?name=john&age=50");
    
    Console.WriteLine(myUri.ToString()); // gives you http://randomsite.com/q?name=john&age=50
    

    如果您的基础 Url 具有 url 参数,这也有效。

    至于第二个问题,我猜你的意思是请求被重定向,而你想要那个 url?那么最简单的方法就是将WebClient 描述为here 的子类。

    Uri baseUri = new Uri("http://randomsite.com");
    using(var client=new WebClient())
    {
      var result = client.DownloadString(myUri);
      //get href via HtmlAgilityPack...
      Uri myUri = new Uri(baseUri, "/q?name=john&age=50");
      result = client.DownloadString(myUri);
    }
    

    【讨论】:

    • 感谢您的快速回复。第二个答案是完整的,但是对于第一个答案,您能否展示我如何使用 webclient 或 httpwebrequest 实际模拟 按钮单击?谢谢
    • @JohnD 添加了一个基本示例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多