談如何解析Html並抓取數據
最近加入了一家新公司,他們是一家電商,業務是網上虛擬充值,我進去是做OA裏面的財務,
本來想到的是做一做信息管理的,沒想到還涉及到去別的網站采集數據(解析Html,
最終用采集到的數據生成財務憑證)這一環,這個是我從未接觸過的領域,
大致看了一下,目的也就是解析網頁的HTML從中找出需要的數據。
那麽問題來了,該怎樣找到這些信息?
由於實質就是在一堆文本裏面“挖出”你要的東西,比如網頁裏面的Title的文本,
很多人自然的會想到正則表達式,呵呵,這個不是不行,而是太費勁了。想想看,
HTML的實質是什麽?不就是一堆標簽嘛,再往深了想,它就是XML的子集,
XML是可以用XPath還可以用Linq To XML。起初我就想,看有沒有Linq To HTML的實現,
還真讓我找到一個。用天朝的Baidu搜到的,真不容易,
點這裏,
看看資料,真的很少,說明並不多,沒敢用。
在網上流傳最多的解析HTML的庫是一個叫Html Agility Pack的東西,
並用它還可以使用Nuget方便的引用到項目中去,真是太省心了!官網源碼
看了Html Agility Pack的簡單介紹,它是用XPath的語法去檢索HTML元素的,這樣已經算夠方便了吧?還不夠好!比如我要找一個Div,我只能通過索引找,如html/body/div[4],不爽吧?感覺還是不夠靈活,經過一番搜索,又找到了一個好東西ScrapySharp,看看它是如何檢索HTML元素的
ScrapingBrowser browser = new ScrapingBrowser();
//set UseDefaultCookiesParser as false if a website returns invalid cookies format
//browser.UseDefaultCookiesParser = false;
WebPage homePage = browser.NavigateToPage(new Uri("http://www.bing.com/"));
PageWebForm form = homePage.FindFormById("sb_form");
form["q"] = "scrapysharp";
form.Method = HttpVerb.Get;
WebPage resultsPage = form.Submit();
HtmlNode[] resultsLinks = resultsPage.Html.CssSelect("div.sb_tlst h3 a" ).ToArray();
WebPage blogPage = resultsPage.FindLinks(By.Text("romcyber blog | Just another WordPress site")).Single().Click()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
再看一段
using System.Linq;
using HtmlAgilityPack;
using ScrapySharp.Extensions;
class Example
{
public void Main()
{
var divs = html.CssSelect(“div”); //all div elements
var nodes = html.CssSelect(“div.content”); //all div elements with css class ‘content’
var nodes = html.CssSelect(“div.widget.monthlist”); //all div elements with the both css class
var nodes = html.CssSelect(“#postPaging”); //all HTML elements with the id postPaging
var nodes = html.CssSelect(“div#postPaging.testClass”); // all HTML elements with the id postPaging and css class testClass
var nodes = html.CssSelect(“div.content > p.para”); //p elements who are direct children of div elements with css class ‘content’
var nodes = html.CssSelect(“input[type=text].login”); // textbox with css class login
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
這不就是CSS選擇器嗎?乖乖,把Jquery那一套學著了,必須贊一個啊~!
我也找到一篇HTML Agility Pack 搭配 ScrapySharp,徹底解除Html解析的痛苦
兩個一配合著用,如虎添翼~!
再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow
談如何解析Html並抓取數據