我也在问自己同样的问题,在努力遵循这里和其他地方的建议以使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();
}
}
}
我也在问自己同样的问题,在努力遵循这里和其他地方的建议以使IronPython和BeautifulSoup能够很好地处理我现有的代码之后,我决定去寻找一个替代的本机.NET解决方案。BeautifulSoup是一段很棒的代码,起初它看起来没有任何可用于.NET的可比性,但后来我找到了HTML Agility Pack,如果说有什么我认为实际上比BeautifulSoup获得了一些可维护性的话。它采用干净或粗糙的HTML,并从中生成一个优雅的XML DOM,可以通过XPath进行查询。通过几行代码,您甚至可以得到一个原始的XDocument,然后craft your queries in LINQ to XML。老实说,如果你的目标是网页抓取,这是你可能找到的最干净的解决方案。
编辑
下面是一个简单的(读起来:一点也不健壮)的例子,解析出了美国众议院的假日日程安排:
我在IPy 1.1和2.0中测试并使用了BeautifulSoup(忘了哪个beta,但这是几个月前的事了)。如果您仍然有问题,请留下注释,我会找出我的测试代码并发布它。
如果BeautifulSoup在IronPython上不起作用,那是因为IronPython没有实现整个Python语言(与CPython相同)。BeautifulSoup是纯python,没有C扩展,所以唯一的问题是IronPython与CPython在python源代码方面的兼容性,不应该有,但是如果有,错误会很明显(“没有命名模块…”、“没有命名方法…”等等)。谷歌表示,只有一个BS的测试在IronPython上失败。它可能起作用了,这个测试现在可能已经解决了。我不知道。
试试看,这是我的建议,除非有人有更具体的建议。
相关问题 更多 >
编程相关推荐