c# 爬取優(yōu)酷電影信息(1)
爬蟲的制作主要分為三個(gè)方面
1、加載網(wǎng)頁(yè)結(jié)構(gòu)
2、解析網(wǎng)頁(yè)結(jié)構(gòu),轉(zhuǎn)變?yōu)榉闲枨蟮臄?shù)據(jù)實(shí)體
3、保存數(shù)據(jù)實(shí)體(數(shù)據(jù)庫(kù),文本等)
在實(shí)際的編碼過程中,找到了一個(gè)好的類庫(kù)“HtmlAgilityPack”。
介紹:
官網(wǎng):http://html-agility-pack.net/?z=codeplex
Html Agility Pack源碼中的類大概有28個(gè)左右,其實(shí)不算一個(gè)很復(fù)雜的類庫(kù),但它的功能確不弱,為解析DOM已經(jīng)提供了足夠強(qiáng)大的功能支持,可以跟jQuery操作DOM媲美)
使用說明:
Html Agility Pack(XPath 定位),在實(shí)際使用過程中,發(fā)現(xiàn)有部分內(nèi)容如果通過Css進(jìn)行定位會(huì)比XPath更加方便,所以通過查找找到了另外一個(gè)CSS的解析了類庫(kù) ScrapySharp(Css 定位)
整理:
Nuget包需要引用的庫(kù)
1、Html Agility Pack(XPath 定位)
2、ScrapySharp(Css 定位)
代碼下載地址:
https://github.com/happlyfox/FoxCrawler
第一點(diǎn)——加載網(wǎng)頁(yè)結(jié)構(gòu)
Html Agility Pack封裝了加載內(nèi)容的方法,使doc.Load(arguments),具有多種重載方式,以下列舉官網(wǎng)的三個(gè)實(shí)例
/// <summary>
/// 加載網(wǎng)頁(yè)結(jié)構(gòu)
/// </summary>
private static void LoadDocment()
{
// 從文件中加載
var docFile = new HtmlDocument();
docFile.Load("file path");
// 從字符串中加載
var docHtml = new HtmlDocument();
docHtml.LoadHtml("html");
// 從網(wǎng)站中加載
var url = "http://html-agility-pack.net/";
var web = new HtmlWeb();
var docWeb = web.Load(url);
}
第二點(diǎn)——解析網(wǎng)頁(yè)結(jié)構(gòu),轉(zhuǎn)變?yōu)榉闲枨蟮臄?shù)據(jù)實(shí)體
/// <summary>
/// 解析網(wǎng)頁(yè)結(jié)構(gòu)
/// </summary>
private static YouKu ParsingWebStructure()
{
/*選用優(yōu)酷片庫(kù)列表
地址:http://list.youku.com/category/show/c_96_s_1_d_1_p_{index}.html
*/
//首先加載web內(nèi)容
var url = "http://list.youku.com/category/show/c_96_s_1_d_1_p_1.html";
var web = new HtmlWeb();
var doc = web.Load(url);
//輸出WebHtml內(nèi)容
//Console.WriteLine(doc.DocumentNode.InnerHtml);
/* HtmlAgilityPack 解析方式官網(wǎng)提供的有倆種示例*/
//1、 With XPath
var value = doc.DocumentNode.SelectSingleNode("http://*[@id='total_videonum']").Attributes["id"].Value;
var resultCount = doc.DocumentNode.SelectSingleNode("http://*[@id='total_videonum']").InnerText;
Console.WriteLine($"id='{value}' 篩選結(jié)果:{resultCount}個(gè)");
// 2、With LINQ
var linqNodes = doc.DocumentNode.SelectSingleNode("http://*[@id='filterPanel']/div[2]/ul").Descendants("li").ToList();
Console.WriteLine("電影產(chǎn)地:");
List<string> videoCountry = new List<string>();
foreach (var node in linqNodes)
{
videoCountry.Add(node.InnerText);
Console.Write($"{node.InnerText} \t");
}
//3、使用ScrapySharp進(jìn)行Css定位
var cssNodes = doc.DocumentNode.CssSelect("#filterPanel > div > label");
Console.WriteLine();
List<string> videoType = new List<string>();
foreach (var node in cssNodes)
{
videoType.Add(node.InnerText);
Console.Write($"{node.InnerText} \t");
}
//構(gòu)造實(shí)體
YouKu model = new YouKu()
{
id = value,
videoNum = int.Parse(resultCount),
videoCountry = videoCountry,
videoType = videoType
};
return model;
}
public class YouKu
{
public string id { get; set; }
public int videoNum { get; set; }
public List<string> videoCountry { get; set; }
public List<string> videoType { get; set; }
}
第三點(diǎn)——保存數(shù)據(jù)實(shí)體,轉(zhuǎn)變?yōu)榉闲枨蟮臄?shù)據(jù)實(shí)體
/// <summary>
/// 保存數(shù)據(jù)實(shí)體
/// </summary>
private static void SavaData()
{
var model = ParsingWebStructure();
var path = "youku.txt";
if (!File.Exists(path))
{
File.Create(path);
}
File.WriteAllText(path, getJsonByObject(model));
}
private static string getJsonByObject(Object obj)
{
//實(shí)例化DataContractJsonSerializer對(duì)象,需要待序列化的對(duì)象類型
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
//實(shí)例化一個(gè)內(nèi)存流,用于存放序列化后的數(shù)據(jù)
MemoryStream stream = new MemoryStream();
//使用WriteObject序列化對(duì)象
serializer.WriteObject(stream, obj);
//寫入內(nèi)存流中
byte[] dataBytes = new byte[stream.Length];
stream.Position = 0;
stream.Read(dataBytes, 0, (int)stream.Length);
//通過UTF8格式轉(zhuǎn)換為字符串
return Encoding.UTF8.GetString(dataBytes);
}
第四點(diǎn)——main
static void Main(string[] args)
{
///爬蟲的制作主要分為三個(gè)方面
///1、加載網(wǎng)頁(yè)結(jié)構(gòu)
///2、解析網(wǎng)頁(yè)結(jié)構(gòu),轉(zhuǎn)變?yōu)榉闲枨蟮臄?shù)據(jù)實(shí)體
///3、保存數(shù)據(jù)實(shí)體(數(shù)據(jù)庫(kù),文本等)
/*
* 在實(shí)際的編碼過程中,找到了一個(gè)好的類庫(kù)“HtmlAgilityPack”。
* 介紹:
* 官網(wǎng):http://html-agility-pack.net/?z=codeplex
* Html Agility Pack源碼中的類大概有28個(gè)左右,其實(shí)不算一個(gè)很復(fù)雜的類庫(kù),但它的功能確不弱,為解析DOM已經(jīng)提供了足夠強(qiáng)大的功能支持,可以跟jQuery操作DOM媲美)
* 使用說明:
* Html Agility Pack(XPath 定位),在實(shí)際使用過程中,發(fā)現(xiàn)有部分內(nèi)容如果通過Css進(jìn)行定位會(huì)比XPath更加方便,所以通過查找找到了另外一個(gè)CSS的解析了類庫(kù) ScrapySharp(Css 定位)
* 整理:
* Nuget包需要引用的庫(kù)
* 1、Html Agility Pack(XPath 定位)
* 2、ScrapySharp(Css 定位)
*/
//第一點(diǎn)——加載網(wǎng)頁(yè)結(jié)構(gòu),Html Agility Pack封裝了加載內(nèi)容的方法,使用doc.Load(arguments),具有多種重載方式,以下列舉官網(wǎng)的三個(gè)實(shí)例
//LoadDocment();
//第二點(diǎn)——解析網(wǎng)頁(yè)結(jié)構(gòu),轉(zhuǎn)變?yōu)榉闲枨蟮臄?shù)據(jù)實(shí)體
//ParsingWebStructure();
//第三點(diǎn)——保存數(shù)據(jù)實(shí)體,轉(zhuǎn)變?yōu)榉闲枨蟮臄?shù)據(jù)實(shí)體
SavaData();
Console.Read();
}
以上就是c# 爬取優(yōu)酷電影信息(1)的詳細(xì)內(nèi)容,更多關(guān)于c# 爬取優(yōu)酷電影信息的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#設(shè)計(jì)模式之Visitor訪問者模式解決長(zhǎng)隆歡樂世界問題實(shí)例
這篇文章主要介紹了C#設(shè)計(jì)模式之Visitor訪問者模式解決長(zhǎng)隆歡樂世界問題,簡(jiǎn)單描述了訪問者模式的定義并結(jié)合具體實(shí)例形式分析了C#使用訪問者模式解決長(zhǎng)隆歡樂世界問題的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-09-09
C#實(shí)現(xiàn)泛型List分組輸出元素的方法
這篇文章主要介紹了C#實(shí)現(xiàn)泛型List分組輸出元素的方法,涉及C#針對(duì)List的遍歷、排序、輸出等相關(guān)操作技巧,需要的朋友可以參考下2017-12-12
Unity實(shí)現(xiàn)車型識(shí)別的示例代碼
這篇文章主要介紹了在Unity中接入百度AI,實(shí)現(xiàn)檢測(cè)一張車輛圖片的具體車型。即對(duì)于輸入的一張圖片(可正常解碼,且長(zhǎng)寬比適宜),輸出圖片的車輛品牌及型號(hào)。需要的可以參考一下2022-01-01
C#模擬http 發(fā)送post或get請(qǐng)求的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)硪黄狢#模擬http 發(fā)送post或get請(qǐng)求的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-06-06
C#自定義事件監(jiān)聽實(shí)現(xiàn)方法
這篇文章主要介紹了C#自定義事件監(jiān)聽實(shí)現(xiàn)方法,涉及C#事件監(jiān)聽的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08

