只读取HTML文件的标题和/或META标签,不加载完整的HTML文件

本文关键字:文件 HTML 加载 标签 标题 读取 META | 更新日期: 2023-09-27 18:04:38

场景:

我需要解析数以百万计的HTML文件/页面(事实上,我可以)&然后只读它的标题或元部分&转储到数据库

我正在做的是使用System.Net.WebClient类的DownloadString(url_path)下载&然后通过LINQ to SQL保存到数据库

但是这个DownloadString函数给了我完整的html源,我只需要标题部分&META标签部分。

有什么主意吗,只下载这么多内容?

只读取HTML文件的标题和/或META标签,不加载完整的HTML文件

我认为你可以用这个url打开一个流,并使用这个流来读取前x字节,我不能告诉确切的数字,但我认为你可以将其设置为合理的数字,以获得标题和描述。

HttpWebRequest fileToDownload = (HttpWebRequest)HttpWebRequest.Create("YourURL");
            using (WebResponse fileDownloadResponse = fileToDownload.GetResponse())
            {
                using (Stream fileStream = fileDownloadResponse.GetResponseStream())
                {
                    using (StreamReader fileStreamReader = new StreamReader(fileStream))
                    {
                        char[] x = new char[Number];
                        fileStreamReader.Read(x, 0, Number);
                        string data = "";
                        foreach (char item in x)
                        {
                            data += item.ToString();
                        }
                    }
                }
            }

我怀疑WebClient会尝试先下载整个页面,在这种情况下,您可能需要一个原始的客户端套接字。发送适当的HTTP请求(手动发送,因为您使用的是原始套接字),开始读取响应(不会立即读取),并在读取足够时终止连接。然而,其余的可能已经从服务器发送到你的电脑,不管你想不想要,所以你可能不会节省太多的带宽。

根据你想要它的目的,许多半体面的网站都有一个自定义的404页面,这比已知的页面简单得多。是否有你想要的信息是另一回事。

你可以在HttpWebRequest中使用动词"HEAD"来返回响应头(而不是元素)。要获得包含元数据的完整元素,您需要下载该页面并解析所需的元数据。

System.Net.WebRequest.Create(uri) { Method = "HEAD" };