実際の戦闘:
序文:
JSON形式でのデータの解析は、クローラーにとって非常に重要です。Webページのほとんどのインターフェイスは、基本的にこの形式を返します。データのごく一部のみが必要な場合は、文字列セグメンテーションを使用できますが、通常、クロールコンテンツは小さくありません。 。パート...常に文字列セグメンテーションを使用する場合、それは非常に時間とメモリを消費します
JSON形式とは何ですか?
それがどのように見えるか見てみましょう
これはオブジェクト形式のデータです
{
"name": "生产队的驴",
"age": "17",
"state": "在线",
"id": "dpc5201314",
"phone": "18888888888",
}
これは単純なJSON形式のデータですが、もちろん、クローラーの一般的なデータはそれほど多くありません...
JSONは2つの形式に分けられます。1つはオブジェクト(オブジェクト)、もう1つは配列(配列)です。異なる形式を解析する方法は異なりますが、類似しています。
識別形式:
識別形式は非常に単純
です。これは、彼の前の記号{}がオブジェクトであり、[]が配列であることを確認するためです。
オブジェクト形式:
配列形式:
{
"employees": [
{
"firstName": "Bill",
"lastName": "Gates"
},
{
"firstName": "George",
"lastName": "Bush"
},
{
"firstName": "Thomas",
"lastName": "Carter"
}
]
}
{これはオブジェクトです}
[これは配列です]
配列には添え字でアクセスできます
JSON構造:
数値構造であることがわかります。
その中の要素ノードにアクセスするには、最初にルート(employees)を削除してから、リーフ(firstName)を取得する必要があります。
前述のように、配列は下付き文字による対応するコンテンツ
C#解析
では、彼の形式を簡単に紹介し、C#を使用して解析します。Newtonsoft.Jsonクラスライブラリ
を使用してインストールする必要があります。
名前空間:
Newtonsoft.Json.Linqを使用します。
名前空間をインポートすることを忘れないでください
オブジェクトと配列には異なる機能があります。
オブジェクト:JObject
配列:JArray
JS並べ替えツール:
通常のクローラーによって返されるデータは非常に乱雑であるため、JSツールを使用して並べ替える必要があります
。
並べ替えると一目でわかります
オブジェクトの解析:
最初にJSONデータが必要です。これは、デモでローカルから直接インポートするのに便利です...もちろん、通常のクローラーはサーバーから取得されます...デモのためだけです
StreamReader read = new StreamReader(@"C:\Users\Acer\Desktop\1.txt", Encoding.UTF8);
//读取文本
string str =read.ReadToEnd();
テキストコンテンツ
{}は、オブジェクトの関数を使用して解析されたオブジェクトです。
JObject arr = JObject.Parse(str);
Console.WriteLine("名字:"+arr["name"]);
Console.WriteLine("年龄:" + arr["age"]);
Console.WriteLine("状态:" + arr["state"]);
Console.WriteLine("账号:" + arr["id"]);
Console.WriteLine("手机号:" + arr["phone"]);
オブジェクトごとにノードarr["age"]を取得します
それは実際の戦闘ではないので...それは難しくありません
配列分析:
これは実際には配列を含むオブジェクトであるため、キャストする必要があります
JSONを読む:
StreamReader read = new StreamReader(@"C:\Users\Acer\Desktop\2.txt", Encoding.UTF8);
string str =read.ReadToEnd();
強制変換形式:
JObject j = JObject.Parse(str);
JArray r = (JArray)j["employees"];
//强制转成数组 因为要获取employees
変換が成功したら、添え字を使用して、データを
表示するために必要なデータを取得できます。
Console.WriteLine(r[1]["firstName"]);
最初の[]は添え字で、2番目は取得するノードです。
すべてのデータを表示する必要がある場合は、ループを使用して添え字にアクセスして取得できます。
for (int i = 0; i < r.Count; i++)
{
Console.WriteLine(r[i]["firstName"]);
}
同じことが他のノードにも当てはまります
for (int i = 0; i < r.Count; i++)
{
Console.WriteLine(r[i]["firstName"]);
Console.WriteLine(r[i]["lastName"]+"\n");
}
そんなに言って、実際の戦闘に直接参加しました...
コメント領域:
JSONはネストできるため、データが乱雑すぎて
オンラインJS解析ツール
を整理できません。ノードにアクセスするたびに、最初に前のノードを取得する必要があります。
すべてのデータにはデータ(ツリールート)が含まれ、内部にネストされています。ルートコメントが彼のコメントデータであるvisionCommentListとrootCommentsを使用して、彼は配列です
authorName:ユーザー名
コンテンツ:コメントコンテンツ
headurl:ユーザーアバター
これは、オブジェクトの方法で最初に彼を取得するオブジェクトです
JObject j = JObject.Parse(str);
ネストされたノードを取得します。
string js = j["data"]["visionCommentList"]["rootComments"].ToString();
JArray r = JArray.Parse(js);
//剩下的就是 数组 然后使用数组的方式解析
コメントを表示するために添え字をループする
for (int i = 0; i < r.Count; i++)
{
Console.WriteLine("\n"+r[i]["authorName"]+": "+r[i]["content"]);
}
要約:
難しいことではないようです。実際にクローラーを実行するときに渡すインターフェイスとパラメーターを見つけるのは難しいです...
純粋なハンドプレイ、親指を立ててください〜