在現代化的互聯網時代,網路爬蟲已經被廣泛應用在各行各業。通過爬取網站的數據,我們可以獲取到海量信息,對於一些需要數據支持的項目來說,網路爬蟲也成為了必不可少的一部分。在Unity遊戲開發中,UnityWebRequest提供了一種簡單、高效的方式來進行網頁爬取和內容解析。
一、UnityWebRequest的基本使用
UnityWebRequest是Unity提供的一個網路請求工具,可以使用它獲取網路數據。下面我們來看一下簡單的使用示例。
IEnumerator GetHtml()
{
UnityWebRequest uwr = UnityWebRequest.Get("https://www.example.com");
yield return uwr.SendWebRequest();
if (uwr.result == UnityWebRequest.Result.Success)
{
string html = uwr.downloadHandler.text;
Debug.Log(html);
}
}
在這個示例中,我們首先實例化了UnityWebRequest,並傳入了一個網站地址。接著使用yield關鍵字等待WebRequest的返回結果,然後我們判斷結果是否成功,並獲取到下載完成的html內容。
二、UnityWebRequest的高級使用
雖然簡單的使用相對來說比較容易,但在實際開發中,我們需要對UnityWebRequest進行更多的操作,才能達到我們的需求。
1、設置請求頭信息
在進行網路請求時,有時候我們需要在請求中加入一些頭信息。比如設置Referer、User-Agent等信息,這些信息可以幫助我們模擬瀏覽器發送請求,防止被網站屏蔽。
IEnumerator GetHtmlWithHeader()
{
UnityWebRequest uwr = UnityWebRequest.Get("https://www.example.com");
uwr.SetRequestHeader("Referer", "https://www.google.com");
yield return uwr.SendWebRequest();
if (uwr.result == UnityWebRequest.Result.Success)
{
string html = uwr.downloadHandler.text;
Debug.Log(html);
}
}
在這個示例中,我們使用SetRequestHeader方法設置了一個Referer信息為https://www.google.com。當我們進行網頁爬取時,伺服器可能會檢測我們的來源,如果不加Referer信息,就會被禁止訪問。
2、設置Cookie信息
在進行模擬登錄或者需要進行用戶驗證的操作時,我們需要設置Cookie信息,來保證請求的有效性。UnityWebRequest提供了SetRequestHeader方法來設置Cookie信息。
IEnumerator Login()
{
string url = "https://www.example.com/login";
string postData = "username=yourusername&password=yourpassword";
byte[] data = Encoding.UTF8.GetBytes(postData);
UnityWebRequest uwr = new UnityWebRequest();
uwr.url = url;
uwr.method = UnityWebRequest.kHttpVerbPOST;
uwr.uploadHandler = new UploadHandlerRaw(data);
uwr.downloadHandler = new DownloadHandlerBuffer();
uwr.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");
uwr.SetRequestHeader("Cookie", "mycookie=value");
yield return uwr.SendWebRequest();
if (uwr.result == UnityWebRequest.Result.Success)
{
Debug.Log("Login Success!");
}
}
在這個示例中,我們通過設置請求方法和上傳數據等信息,完成了模擬登錄的操作,並且通過SetRequestHeader方法設置了Cookie信息。
3、設置超時時間
有時候,在進行網路爬取時,伺服器返回信息不夠及時,或者連接不太穩定,我們需要設置請求超時時間來保證請求的完成性。
IEnumerator GetHtmlWithTimeout()
{
UnityWebRequest uwr = UnityWebRequest.Get("https://www.example.com");
uwr.timeout = 10;
yield return uwr.SendWebRequest();
if (uwr.result == UnityWebRequest.Result.Success)
{
string html = uwr.downloadHandler.text;
Debug.Log(html);
}
}
在這個示例中,我們通過設置timeout屬性來設置超時時間為10秒。
三、網頁內容解析技巧
在進行網頁爬取時,我們通常需要對網頁的HTML內容進行解析,獲取到我們所需要的數據。下面我們就來看一些網頁內容解析的技巧。
1、使用正則表達式進行內容解析
正則表達式是用於匹配字元串的一種工具,可以通過它來簡單地實現對HTML標籤的解析。
IEnumerator GetTitle()
{
UnityWebRequest uwr = UnityWebRequest.Get("https://www.example.com");
yield return uwr.SendWebRequest();
if (uwr.result == UnityWebRequest.Result.Success)
{
string html = uwr.downloadHandler.text;
string pattern = @"(.+) ";
Match match = Regex.Match(html, pattern);
if (match.Success)
{
string title = match.Groups[1].Value;
Debug.Log(title);
}
}
}
在這個示例中,我們使用正則表達式匹配了網頁中的title標籤,並獲得了它的內容。
2、使用HtmlAgilityPack進行內容解析
HtmlAgilityPack是一個開源的.NET庫,可以過濾HTML解析器,可以讓我們方便快捷地進行HTML標籤的解析操作。Unity也可以通過引入HtmlAgilityPack進行HTML解析。
IEnumerator GetList()
{
UnityWebRequest uwr = UnityWebRequest.Get("https://www.example.com");
yield return uwr.SendWebRequest();
if (uwr.result == UnityWebRequest.Result.Success)
{
string html = uwr.downloadHandler.text;
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
List resultList = new List();
foreach(HtmlNode node in doc.DocumentNode.SelectNodes("//div[@class='list-item']"))
{
string content = node.InnerText;
resultList.Add(content);
}
foreach (string result in resultList)
{
Debug.Log(result);
}
}
}
在這個示例中,我們使用HtmlAgilityPack來解析了網頁中的一個列表,可以通過SelectNodes方法選擇相應的節點進行解析。
3、使用JsonUtility進行內容解析
JsonUtility是Unity提供的一個json數據工具類,可以非常方便地進行json數據格式的解析。
[System.Serializable]
public class UserInfo
{
public string username;
public int level;
public string email;
}
IEnumerator GetUser()
{
UnityWebRequest uwr = UnityWebRequest.Get("https://www.example.com/userinfo");
yield return uwr.SendWebRequest();
if (uwr.result == UnityWebRequest.Result.Success)
{
string json = uwr.downloadHandler.text;
UserInfo userInfo = JsonUtility.FromJson(json);
Debug.Log(userInfo.username);
Debug.Log(userInfo.level);
Debug.Log(userInfo.email);
}
}
在這個示例中,我們通過JsonUtility和UserInfo類來解析了返回的json數據,並將數據賦值給相應的屬性。可以非常方便地進行數據的解析操作。
總結
通過本文的介紹,我們可以了解到UnityWebRequest作為網路請求庫,在進行遊戲開發中,可以方便快捷地進行網頁爬取和數據解析功能。我們一定會在日常開發中使用到這些高級使用和解析技巧。
原創文章,作者:LEIPW,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/313271.html
微信掃一掃
支付寶掃一掃