views:

176

answers:

4
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using HtmlAgilityPack;

namespace sss
{
    public class Downloader
    {
        WebClient client = new WebClient();

        public HtmlDocument FindMovie(string Title)
        { 
            //This will be implemented later on, it will search movie.
        }

        public HtmlDocument FindKnownMovie(string ID)
        {
            HtmlDocument Page = (HtmlDocument)client.DownloadString(String.Format("http://www.imdb.com/title/{0}/", ID));
        }
    }
}

How can I convert a downloaded string to a valid HtmlDocument so I can parse it using HTMLAgilityPack?

+2  A: 

Try this (based on this fairly old document):

string url = String.Format("http://www.imdb.com/title/{0}/", ID);
string content = client.DownloadString(url);
HtmlDocument page = new HtmlDocument();
page.LoadHtml(content);

Basically casting is rarely the right way of converting between two types - particularly when there's something like parsing going on.

Jon Skeet
A: 

Maybe you could create a new file (.html) in for file system and then use a stream writer to write the string into the html file. Then pass that file to the parser

Jordan S
+2  A: 

This should work with v1.4:

HtmlWeb hw = new HtmlWeb();
HtmlDocument doc = hw.Load(string.Format("http://www.imdb.com/title/{0}/", ID));

or

string html = client.DownloadString(String.Format("http://www.imdb.com/title/{0}/", ID));
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
Mikael Svenson
+1 for imdb.+char[15]
Behrooz
+1  A: 

The following lines of code will create a HtmlDocument with your content:

// First create a blank document
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
// Then load it with the content from the webpage you are trying to parse
doc.Load(new StreamReader(WebRequest.Create("yourURL").GetResponse()
                                 .GetResponseStream()));
jjnguy