这样的,网上抓取了些网站的html代码保存到数据库中,现在很多抓下来的html代码里面只有开头标记,没有结束,有没有方法可以解决?
比如:<div><p>asdfsadfsadfsafsaf</p> 这里就没有结束的</div>标签,当然不只是<div>标签,各种没成对,忘提供好的方法
private void button1_Click(object sender, EventArgs e)
{
//需要解析的集合
List<string> list = new List<string>();
Loop("http://www.751com.cn",listCount);
}
/// <summary>
/// 读取Html
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
static string ReadHtml(string url)
{
//WebRequest request = WebRequest.Create(url);
throw new NotImplementedException();
//最终返回结果
}
/// <summary>
/// 解析A标签对应的链接字符串
/// </summary>
/// <param name="html"></param>
/// <returns></returns>
static List<string> GetLinks(string html)
{
throw new NotImplementedException();
}
static void Loop(string url)
{
string html = ReadHtml(url);
//html 处理
List<string> urls = GetLinks(html);
if (urls != null && urls.Count > 0)
{
urls.ForEach(u =>
{
Loop(u);
});
}
}
// <summary>
/// 读取Html
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
string ReadHtml(string url)
{
WebClient MyWebClient = new WebClient();
MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
Byte[] pageData = MyWebClient.DownloadData(url); //从指定网站下载数据
return Encoding.UTF8.GetString(pageData); //如果获取网站页面采用的是UTF-8,则使用这句
}
/// <summary>
/// 解析A标签对应的链接字符串
/// </summary>
/// <param name="html"></param>
/// <returns></returns>
List<string> GetLinks(string html)
{
List<string> lst = new List<string>();
//解析
Regex regex = new Regex(@"<a[^>]*href=([""'])?(?<href>[^'""]+)\1[^>]*>");
foreach (Match mc in regex.Matches(html))
{
string url = GetNewUrl(mc.Groups[2].Value);
if (!string.IsNullOrEmpty(url))
{
lst.Add(url);
}
}
return lst;
}
void Loop(string url, List<string> listCount)
{
//没有解析过该项
if (!listCount.Contains(url))
{
//在已解析过的集合里面添加本条数据
listCount.Add(GetNewUrl(url));
string html = ReadHtml(url);
//html 处理
List<string> urls = GetLinks(html);
if (urls != null && urls.Count > 0)
{
urls.ForEach(u =>
{
lsbSuccess.Items.Add(url);
Loop(u, listCount);
});
}
}
}