【发布时间】:2011-01-17 02:15:01
【问题描述】:
有没有办法,使用 C#.Net,基本上使用类似 http://www.bing.com/images/search?q=microsoft&form=QBIL&qs=n&sk=&sc=8-4 的东西,从中提取所有图像,并将其放入文件中?
【问题讨论】:
-
@Ani 我只是想用它作为一个例子......但感谢您的警告。
标签: c# web-scraping bing-api
有没有办法,使用 C#.Net,基本上使用类似 http://www.bing.com/images/search?q=microsoft&form=QBIL&qs=n&sk=&sc=8-4 的东西,从中提取所有图像,并将其放入文件中?
【问题讨论】:
标签: c# web-scraping bing-api
您可以使用HTML Agility Pack 及其HTMLWeb 类来解析网页。
【讨论】:
如果您想让它更简洁一些,那么使用 bing API 是最好的方法。 在其 JSON/XML/SOAP 响应中,您将获得结果中每个图像的 url,您可以在循环中检索这些图像,或者在 LINQ 查询中更好地检索这些图像。
查看此PDF,它会告诉您入门的基本知识。
下面是一个示例,说明如何做到这一点。首先是get an APPID,它允许您进行 API 查询。
提出这样的要求
string url = "http://api.search.live.net/xml.aspx?Appid={0}&sources={1}&query={2}";
string completeUri = String.Format(url, AppId, "image", "microsoft");
HttpWebRequest webRequest = null;
webRequest = (HttpWebRequest)WebRequest.Create(completeUri);
HttpWebResponse webResponse = null;
webResponse = (HttpWebResponse)webRequest.GetResponse();
XmlReader xmlReader = null;
xmlReader = XmlReader.Create(webResponse.GetResponseStream());
然后创建一个类来保存返回的数据。
public class LiveSearchResultImage
{
public string Title { get; set; }
public string Description { get; set; }
public string URI { get; set; }
public string ImageURI { get; set; }
public string ThumbnailURI { get; set; }
}
然后使用 LINQ 查询从响应中检索数据。
XDocument data = XDocument.Load(xmlReader);
IEnumerable<XNode> nodes = null;
nodes = data.Descendants(XName.Get("Results", IMAGE_NS)).Nodes();
if (nodes.Count() > 0)
{
var results = from uris in nodes
select new LiveSearchResultImage
{
URI =
((XElement)uris).Element(XName.Get("Url", IMAGE_NS)).Value,
Title =
((XElement)uris).Element(XName.Get("Title", IMAGE_NS)).Value,
ThumbnailURI =
((XElement)uris).Element(XName.Get("Thumbnail", IMAGE_NS)).Value,
};
return results;
}
【讨论】: