c# HTML标签之间的抓取

本文关键字:抓取 之间 标签 HTML | 更新日期: 2023-09-27 18:02:16

好的,我尝试使用一个Skype工具它有一个"dictionary"命令可以从城市字典中检索单词的含义现在我可以将整个HTML文档加载为字符串,像这样:

 private void urbanDictionary(string term)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.urbandictionary.com/define.php?term=" + term);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader stream = new StreamReader(response.GetResponseStream());
            string final_response = stream.ReadToEnd();
            MessageBox.Show(final_response);
        }

问题是我只想要这样的意思

<div class='meaning'> "meaning" </div>

我已经尝试了各种各样的东西,但我不能设法检索"div"标签之间的文本。

我怎么能这么做?

c# HTML标签之间的抓取

使用htmllagilitypack库,这正是你所需要的。

http://www.codeproject.com/Articles/659019/Scraping-HTML-DOM-elements-using-HtmlAgilityPack-H

我可以建议,在final_response字符串首先找到然后添加创建子字符串从索引+"div class='含义'"。长度到字符串的结束。在该子字符串中找到"的索引位置,并再次使用它来找到另一个在div标签之间有文本的子字符串。

的例子。如果你得到索引100,然后创建子字符串使用100+38结束。这个子字符串喜欢"含义"。再次找到索引位置,假设它是10,然后找到从0到(10 -1)的子字符串,这将给出的输出,意思是

也许不是你想要的答案。但是我使用https://www.mashape.com来获取城市词典的API。不幸的是,这是非官方的,所以我不知道这能工作多久。但是正如前面已经提到的,html也可以随时更改——很可能比API更频繁。此外,API消耗更少的带宽,这应该是首选。

用法为

var client = new WebClient();
client.Headers.Add("X-Mashape-Key", "APIKEY");
client.Headers.Add("Accept", "text/plain");
Console.WriteLine(client.DownloadString("https://mashape-community-urban-dictionary.p.mashape.com/define?term="+ term));

有两个选项

1)你可以使用Regex来删除HTML标签。这是一种简洁的方法,如果你正在处理的HTML源并不复杂,你可以使用它。

string meaningStr = Regex.Replace(final_response, @"<[^>]+>", "").Trim();

您可以在regexstorm.net/tester

找到上述测试过的解决方案。

2)你可以使用htmllagilitypack。推荐使用这种方法,但需要您花费一些精力来设置它。对于Nuget来说,这并不困难。

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(final_response);
final_response = doc.InnerText;