我正在制作一个项目,其中我需要从HTML页面中删除一些数据(duh),但我向上帝发誓,我还没有能够在网上找到一个新的友好示例。我尝试了一些不同的代码块,每次尝试与在线示例模糊不同的东西时,都会收到System.NullReferenceException错误。
首先,这是我的#34;加载代码",其中我初始化我的HtmlDocument对象和html本身。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Net;
using HtmlAgilityPack;
namespace AltFinder
{
public partial class Form1 : Form
{
public volatile HtmlAgilityPack.HtmlDocument document;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// Get the HTML of a page
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://wikipedia.org/");
// Return it in string form
string response = (new StreamReader((req.GetResponse()).GetResponseStream()).ReadToEnd());
// Make an HtmlDoc object, becase it cant parse from a string
// Turn that string into that parsable object
document.LoadHtml(response);
}
}
}
获取HTML本身并不是问题所在。当我试图解析它我做错了事时。由于我似乎无法找到任何关于HtmlAgilityPack的难以记录的文档,所以每个人似乎都有自己寻找特定节点的方法。作为一个新手,我试图掌握这个图书馆的基础知识,如果没有一个适合所有类型的交易,这可能很难。以下是我试图做的一个例子。
List<string> list = new List<string>();
var smallTags = document.DocumentNode.SelectNodes("//em");
if (smallTags != null)
{
foreach (var small_tag in smallTags)
{
list.Add(small_tag.InnerHtml);
}
}
在这种情况下,我尝试遍历页面中的每个em节点,如果节点不为空,则将其添加到列表中。我得到一个System.NullReference异常。我见过人们使用DocumentNode.Descendents,DocumentNode.SelectNodes和其他一些人。为什么用一个而不是另一个?我应该使用它们中的任何一个吗?我错过了什么?
我的问题是:我做错了什么?有人可以做一个简单的刮刀吗?即使它是长期和/或低效的方式,我正在寻找一些单行来提取我需要的数据。提前谢谢!