天天看点

使用Microsoft.VisualStudio.QualityTools.WebTestFramework.dll中一些函数帮助分析Html(some fuctions in Microsoft.V...

[Url= http://www.cnblogs.com/ginohuo/archive/2010/09/28/1837749.html]

偶尔会遇到一些项目需求,从指定网站去挖数据,然后返回执行格式的数据。其实就是一般所说的盗取数据。比如,从以下网页,抓取到一组视频的信息,每条信息包含视频截图,视频名字,Url等等。

[Web]

http://www.tudou.com/albumtop/c30t-1a-1y-1h-1s0p1.html

使用Microsoft.VisualStudio.QualityTools.WebTestFramework.dll中一些函数帮助分析Html(some fuctions in Microsoft.V...
使用Microsoft.VisualStudio.QualityTools.WebTestFramework.dll中一些函数帮助分析Html(some fuctions in Microsoft.V...

运行结果

使用Microsoft.VisualStudio.QualityTools.WebTestFramework.dll中一些函数帮助分析Html(some fuctions in Microsoft.V...

一般而言,首先看看可不可以和对方网站达成合作关系,然后通过一定的Api拿到数据;或许大多数情况都不具备这个条件,然后就是看怎么盗取数据。

一般观察对方是否有一些“隐性”的api(比如给他页面ajax访问的数据api),有的话,悄悄用了。

如果没有,估计就是硬着头皮去分析Html,从中拿到数据了。

使用正则表达式,或者是使用最普通的字符串特征匹配(自己写了if else 逻辑),都能达到结果。

偶尔发现,使用Microsoft.VisualStudio.QualityTools.WebTestFramework.dll中的一些方法,可以帮助分析Html dom. 写了一段代码试了下,留在这里保存下(以防以后需要用的时候,因为某个时候格式化了硬盘,找不到这段代码了)

[Code]

Codeusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.VisualStudio.TestTools.WebTesting;
using System.IO;
using System.Net;

namespace HtmlDom2
{
    class Program
    {
        static void Main(string[] args)
        {
            Test();
            Console.ReadKey();
        }

        private static void Test()
        {
            string address = "http://www.tudou.com/albumtop/c30t-1a-1y-1h-1s0p1.html";
            WebClient client = new WebClient();
            string fileConent = client.DownloadString(address);
            HtmlTagInnerTextParser parser = new HtmlTagInnerTextParser(fileConent);
            List<Video> videoList = new List<Video>();
            videoList.AddRange(GetVideos(address, parser, "pack pack_album"));
            videoList.AddRange(GetVideos(address, parser, "pack pack_album hd_video"));
            Console.WriteLine(videoList.Count);
            foreach (var item in videoList) 
            {
                Console.WriteLine(string.Format("{0}:{1}", item.Title, item.ImageUrl));
            }
        }

        private static List<Video> GetVideos(string address, HtmlTagInnerTextParser parser, string attName)
        {
            List<Video> videoList = new List<Video>();
            var temp = parser.GetInnerTextForHtmlTags("div", "class", attName, true, false, true);
            foreach (var item in temp)
            {
                HtmlTagInnerTextParser parser2 = new HtmlTagInnerTextParser(item.Value);

                var temp2 = parser2.GetInnerTextForHtmlTags("div", "class", "pic", true, false, true).ToList();
                HtmlDocument doc2 = new HtmlDocument(new Uri(address), temp2[0].Value);
                string imgeUrl = doc2.HtmlTags.Where(t => t.Name == "img").ToList()[0].GetAttributeValueAsString("src");

                var temp3 = parser2.GetInnerTextForHtmlTags("div", "class", "txt", true, false, true).ToList();
                HtmlDocument doc3 = new HtmlDocument(new Uri(address), temp3[0].Value);
                string title = doc3.HtmlTags.Where(t => t.Name == "a" && t.GetAttributeValueAsString("title") != null).ToList()[0].GetAttributeValueAsString("title");

                videoList.Add(new Video { ImageUrl = imgeUrl, Title = title });               
            }
            return videoList;
        }
    }

    public class Video 
    {
        public string Title { get; set; }
        public string ImageUrl { get; set; }
    }
}

      

注意引用的dll是10.0的就是了

使用Microsoft.VisualStudio.QualityTools.WebTestFramework.dll中一些函数帮助分析Html(some fuctions in Microsoft.V...

转载于:https://www.cnblogs.com/ginohuo/archive/2010/09/28/1837749.html