使用HtmlAgilityPack

时间:2017-05-25 16:21:13

标签: c# html html-agility-pack

到目前为止我的代码

 foreach (var listBoxItem in listBox_google_urls.Items)
        {              
            var document = new HtmlWeb().Load(listBoxItem.ToString());
            var files = document.DocumentNode.Descendants("a").Select(a => a.GetAttributeValue("href", ".mp3")).Where(h => h.Contains(".mp3")).ToArray(); 
            listbox_urls.Items.AddRange(files);
        }      

这就是listBox_google_urls.Items

 web_search.Navigate("https://www.google.com/search?q=" + val + "+(mp3|wav|ac3|ogg|flac|wma|m4a) -inurl:(jsp|pl|php|html|aspx|htm|cf|shtml) intitle:index.of -inurl:(listen77|mp3raid|mp3toss|mp3drug|index_of|wallywashis)");
        var search_results = this.web_search.Document.Links.Cast<HtmlElement>().Select(a => a.GetAttribute("href")).Where(h => h.Contains("http://")).ToArray();
        listBox_google_urls.Items.AddRange(search_results);

listBoxItem.ToString()输出example

问题是这个méthode工作,但只是scrab标题的链接 他们是我如何解决它?并且已经感谢了

1 个答案:

答案 0 :(得分:1)

你的代码看起来很好,只是不确定为什么你默认为“.mp3”然后返回所有有“.mp3”的代码?你最终得到一组有效的.mp3网址,然后是一大堆“.mp3”字符串?我只是躲进了一个rando谷歌搜索页面,并在href属性中查找了所有网址,其中包含“mail”字样,这里有结果

enter image description here

希望这能回答你的问题。如果你能给我一些更多的信息,也许我可以帮助更多

试试这个

        var document = new HtmlWeb().Load("http://s1.mymrmusic2.com/hmusic/Album/Foreign%20Albums/VA%20-%20Billboard%20Hot%20100%20(02%20April%202016)/VA%20-%20Billboard%20Hot%20100%20(02%20April%202016)%20%5B320%5D/");
        var files = document.DocumentNode.Descendants("a")
            .Where(a => !string.IsNullOrEmpty(a.GetAttributeValue("href", string.Empty)) && a.GetAttributeValue("href", string.Empty).Contains(".mp3"))
            .Select(a => new
            {
                Link = a.GetAttributeValue("href", string.Empty),
                Text = a.FirstChild.InnerText
            }).ToList();

enter image description here

也许尝试这个选项

foreach (var listBoxItem in listBox_google_urls.Items)
        {
            var document = new HtmlWeb().Load(listBoxItem.ToString());
            var files = document.DocumentNode.Descendants("a")
                .Select(a => a.GetAttributeValue("href", ".mp3"))
                .Where(h => h.Contains(".mp3"))
                .Select(a => listBoxItem.ToString() + a).ToArray();
            listbox_urls.Items.AddRange(files);
        }