0

我正在编写 ac# 程序以从 HTML 文档中提取 .jpg 图像,但目标图像的名称经常更改。我是一个非常新的程序员,我不知道如何达到预期的结果。

我正在使用 webclient 下载 html。

所以我想我在这里有几个问题要问。

  1. 我如何使用通配符来假设图像名称的名称和长度?
  2. 以及如何从文档中的目标图像修剪 HTML 容器?
4

2 回答 2

2

您应该抓取网页以获取图像 url,然后下载图像。对于抓取检查:

https://github.com/jamietre/CsQuery

https://code.google.com/p/fizzler/

https://code.google.com/p/sharp-query/

是否有可以在 C# 中使用的类似 jQuery 的 CSS/HTML 选择器?

这些将允许您根据属性名称、文档中的位置或这些标识符的组合选择您关心的元素,然后获取src属性。

  1. 下载网页html
  2. 解析html获取图片的url
  3. 下载图片

编辑:@Jacob Proffitt 很酷的东西,如果你对 XPath 没问题的话

http://htmlagilitypack.codeplex.com/

如何使用 HTML 敏捷包

于 2013-08-28T20:42:07.993 回答
2

简而言之,使用您描述的方法:您不能。HTTP 要求通过其名称访问每个请求的资源,您不能要求 HTTP 服务器返回一组名称与模式匹配的资源(无论是通配符表达式还是正则表达式)。

但是,如果您知道名称存在于特定范围之间并遵循某种模式,那么您可以创建一系列请求并相应地处理 404 错误,如下所示:

String resource = "/images/aestheticallyAttractiveHumanFemalesWithoutClothing/img_{0}.jpg";
for(int i=1;i<100;i++) {

    String thisResource = String.Format(CultureInfo.InvariantCulture, resource, i);

    HttpWebRequest request = new (HttpWebRequest)WebRequest.Create(thisResource);
    HttpWebResponse response = request.GetResponse();
    if( response.Status == HttpStatus.OK ) {
        using(Stream rs = response.GetResponseStream())
        using(FileStream fs = new FileStream(Path.Combine("C:\\Temp\\IRSTaxReturns2011\\" + i.ToString() + ".jpg") {
            rs.CopyTo( fs );
        }
    }
}
于 2013-08-28T20:16:41.423 回答