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"标签之间的文本。
我怎么能这么做?
使用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;