我问自己同样的问题,在努力遵循这里和其他地方的建议,让IronPython和BeautifulSoup与我现有的代码很好地配合,我决定去寻找替代的原生.NET解决方案。 BeautifulSoup是一个很棒的代码,起初它看起来没有任何类似的可用于.NET,但后来我找到了
HTML Agility Pack,如果有的话,我认为我实际上已经获得了一些可修复的BeautifulSoup。它需要干净或苛刻的HTML并从中生成一个优雅的XML DOM,可以通过XPath查询。使用几行代码,您甚至可以获得原始XDocument,然后返回
craft your queries in LINQ to XML.老实说,如果网络抓取是您的目标,那么这是您可能找到的最干净的解决方案。
编辑
这是一个简单的(阅读:根本不健全)示例,解析美国众议院的假期安排:
- using System;
- using System.Collections.Generic;
- using HtmlAgilityPack;
- namespace GovParsingTest
- {
- class Program
- {
- static void Main(string[] args)
- {
- HtmlWeb hw = new HtmlWeb();
- string url = @"http://www.house.gov/house/House_Calendar.shtml";
- HtmlDocument doc = hw.Load(url);
- HtmlNode docNode = doc.DocumentNode;
- HtmlNode div = docNode.SelectSingleNode("//div[@id='primary']");
- HtmlNodeCollection tableRows = div.SelectNodes(".//tr");
- foreach (HtmlNode row in tableRows)
- {
- HtmlNodeCollection cells = row.SelectNodes(".//td");
- HtmlNode dateNode = cells[0];
- HtmlNode eventNode = cells[1];
- while (eventNode.HasChildNodes)
- {
- eventNode = eventNode.FirstChild;
- }
- Console.WriteLine(dateNode.InnerText);
- Console.WriteLine(eventNode.InnerText);
- Console.WriteLine();
- }
- //Console.WriteLine(div.InnerHtml);
- Console.ReadKey();
- }
- }
- }