C# 从网页中读取文本,而不是HTML
我正在尝试制作一个从网页下载所有MP3的应用程序,但我不是从源代码下载。我正在从和下载列出的每首歌曲,如果你复制并粘贴到url的末尾,它会显示该歌曲的链接。我正在使用WebClient下载文件,如果我可以读取网页上的行而不是html,那么我只需执行C# 从网页中读取文本,而不是HTML,c#,stream,httpwebrequest,webclient,C#,Stream,Httpwebrequest,Webclient,我正在尝试制作一个从网页下载所有MP3的应用程序,但我不是从源代码下载。我正在从和下载列出的每首歌曲,如果你复制并粘贴到url的末尾,它会显示该歌曲的链接。我正在使用WebClient下载文件,如果我可以读取网页上的行而不是html,那么我只需执行client.DownloadFile(url+行,路径)以下是我的代码: var url = "http://ytcracker.com/music/"; var sr = new StreamReader(WebRequest.Create(url
client.DownloadFile(url+行,路径)
以下是我的代码:
var url = "http://ytcracker.com/music/";
var sr = new StreamReader(WebRequest.Create(url).GetResponse().GetResponseStream());
string line;
while ((line = sr.ReadLine()) != null)
{
MessageBox.Show("http://www.ytcracker.com/music/" + line);
using (var client = new WebClient())
{
client.DownloadFile("http://www.ytcracker.com/music/" + line, @"C:\Users\Lavi\Downloads\downloadto\.mp3");
}
}
问题是“line”获取的是页面的源代码,而不是文本。如果有什么办法可以得到这一页的文字,请帮我。谢谢
编辑:另外,在路径所在的位置,我知道它显示的是“.mp3”,而不是文件名,然后是.mp3。我将创建一个for循环,并在每次循环时添加到列表中,直到页面全部被读取,然后将它们添加到.mp3。因此,它将类似于“i.mp3”,因此mp3将位于1.mp3、2.mp3、3.mp3等文件夹中。我所知道的从HTML源中获取文本的最简单方法(无需解析HTML即可获得)是 除了软件,网站上还有简单的教程 请参阅下面的问题,以获取有关使用HTML Agility Pack专门提取文本的指导
我所知道的从HTML源代码中获取文本的最简单方法是 除了软件,网站上还有简单的教程 请参阅下面的问题,以获取有关使用HTML Agility Pack专门提取文本的指导
您可以使用正则表达式。试试看,这是你的代码-我只是添加了正则表达式:
var url = "http://ytcracker.com/music/";
var sr = new StreamReader(WebRequest.Create(url).GetResponse().GetResponseStream());
string line;
var re = new Regex(@"<li><a href=.*mp3.>(.*)</a></li>");
while ((line = sr.ReadLine()) != null)
{
using (var client = new WebClient())
{
if (re.IsMatch(line))
{
var match = re.Match(line);
client.DownloadFile("http://www.ytcracker.com/music/" + match.Groups[1], @"C:\Users\Lavi\Downloads\downloadto\.mp3");
}
}
}
var url=”http://ytcracker.com/music/";
var sr=newstreamreader(WebRequest.Create(url.GetResponse().GetResponseStream());
弦线;
var re=新正则表达式(@“”);
而((line=sr.ReadLine())!=null)
{
使用(var client=new WebClient())
{
if(关于IsMatch(线路))
{
var匹配=重新匹配(行);
client.DownloadFile(“http://www.ytcracker.com/music/“+match.Groups[1],@“C:\Users\Lavi\Downloads\downloadto\.mp3”);
}
}
}
您可以使用正则表达式。试试看,这是你的代码-我只是添加了正则表达式:
var url = "http://ytcracker.com/music/";
var sr = new StreamReader(WebRequest.Create(url).GetResponse().GetResponseStream());
string line;
var re = new Regex(@"<li><a href=.*mp3.>(.*)</a></li>");
while ((line = sr.ReadLine()) != null)
{
using (var client = new WebClient())
{
if (re.IsMatch(line))
{
var match = re.Match(line);
client.DownloadFile("http://www.ytcracker.com/music/" + match.Groups[1], @"C:\Users\Lavi\Downloads\downloadto\.mp3");
}
}
}
var url=”http://ytcracker.com/music/";
var sr=newstreamreader(WebRequest.Create(url.GetResponse().GetResponseStream());
弦线;
var re=新正则表达式(@“”);
而((line=sr.ReadLine())!=null)
{
使用(var client=new WebClient())
{
if(关于IsMatch(线路))
{
var匹配=重新匹配(行);
client.DownloadFile(“http://www.ytcracker.com/music/“+match.Groups[1],@“C:\Users\Lavi\Downloads\downloadto\.mp3”);
}
}
}
在您下载音乐的情况下,在构建路径之前,您需要读取href值并确保它们是.mp3文件。正如Eric J提到的,HtmlAgilityPack更易于使用。
只需下载并将dll引用添加到项目中,然后使用此代码
var url = "http://ytcracker.com/music/";
var sr = new StreamReader(WebRequest.Create(url).GetResponse().GetResponseStream());
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.LoadHtml(sr.ReadToEnd());
foreach (HtmlNode link in htmlDoc.DocumentNode.SelectNodes("//a[@href]"))
{
HtmlAttribute att = link.Attributes["href"];
if (att.Value.EndsWith(".mp3"))
{
MessageBox.Show("http://www.ytcracker.com/music/" + att.Value);
using (var client = new WebClient())
{
client.DownloadFile("http://www.ytcracker.com/music/" + att.Value, @"C:\Users\Lavi\Downloads\downloadto\.mp3");
}
}
}
在您下载音乐的情况下,在构建路径之前,您需要读取href值并确保它们是.mp3文件。正如Eric J提到的,HtmlAgilityPack更易于使用。 只需下载并将dll引用添加到项目中,然后使用此代码
var url = "http://ytcracker.com/music/";
var sr = new StreamReader(WebRequest.Create(url).GetResponse().GetResponseStream());
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.LoadHtml(sr.ReadToEnd());
foreach (HtmlNode link in htmlDoc.DocumentNode.SelectNodes("//a[@href]"))
{
HtmlAttribute att = link.Attributes["href"];
if (att.Value.EndsWith(".mp3"))
{
MessageBox.Show("http://www.ytcracker.com/music/" + att.Value);
using (var client = new WebClient())
{
client.DownloadFile("http://www.ytcracker.com/music/" + att.Value, @"C:\Users\Lavi\Downloads\downloadto\.mp3");
}
}
}
与流行的观点相反,正则表达式并不总是最好的解决方案:-)如果他所抓取的页面发生了实质性的变化,该怎么办?使用成熟的HTML解析器修改代码要比更改正则表达式容易得多。正则表达式是一个解决方案一个解决方案,不是最好的解决方案。与流行的观点相反,正则表达式并不总是最好的解决方案:-)如果他正在抓取的页面发生了实质性的变化怎么办?使用成熟的HTML解析器修改代码要比更改正则表达式容易得多。正则表达式是一个解决方案,不是最好的解决方案。你不需要在标题前加上“C”。请参阅“”。您不需要在标题前加上“C”。请参阅“”。