不漂汤工作与铁蟒蛇?如果使用哪个版本的铁蟒蛇?多么容易分发windows桌面应用程序。网2.0使用铁python(主要是c#呼吁某些代码,用于分析html)?

有帮助吗?

解决方案

我问自己同样的问题和后在努力按照建议在这里和其他地方获得IronPython和BeautifulSoup很好地与现有的码我决定去寻找替代本土。净的解决方案。BeautifulSoup是一个美好的代码并在第一次它看起来不像有什么比提供的。净,但是随后我发现 HTML灵活性包 如果有什么我觉得我实际上已经取得了一些维护性超过BeautifulSoup.这需要干净的或零碎HTML并产生一个优雅DOM XML从中可查询的通过XPath。有几个代码行你甚至可以得到回原XDocument然后 你的手艺查询在皇宫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();
        }
    }
}

其他提示

我已经测试并使用了带有IPy 1.1和2.0的BeautifulSoup(忘了哪个测试版,但这是几个月前)。如果您仍然遇到问题,请发表评论,我会挖出我的测试代码并发布。

如果BeautifulSoup不适用于IronPython,那是因为IronPython没有实现整个Python语言(与CPython相同)。 BeautifulSoup是纯python,没有C扩展,所以唯一的问题是IronPython与CPython在Python源代码方面的兼容性。不应该是一个,但如果有的话,错误将是显而易见的(“否”名为...的模块,“没有名为...的方法”,等等。谷歌表示只有一个BS的测试失败了IronPython。它可能有效,现在可以修复该测试。我不知道。

尝试看看,这将是我的建议,除非有人有更具体的内容。

此外,关于以前关于使用-X编译的评论之一:SaveAssemblies - 这是错误的。 -X:SaveAssemblies用作调试功能。有一个API用于将python代码编译为二进制文件。 这篇文章解释了API和两种模式之间的区别。

关于问题的第二部分,您可以使用DLR Hosting API从C#应用程序中运行IronPython代码。 DLR托管规范是此处。此博客还包含一些示例托管应用程序

我们正在分发一个40k线的IronPython应用程序。我们无法将整个事物编译成单个二进制可分发的。相反,我们一直在分发它作为一个巨大的小dll,每个IronPython模块一个。这样可以正常工作。

然而,在较新版本的IronPython 2.0中,我们最近有一个峰值,它似乎能够将所有内容编译成单个二进制文件。这也导致应用程序启动速度加快(模块导入速度更快。)希望在未来几天这个峰值将迁移到我们的主树中。

为了进行分发我们正在使用WiX,这是一个用于创建msi安装的Microsoft内部工具,它是开源的(至少可以免费获得)。即使我们安装,它也没有给我们带来任何问题有一些非常繁琐的要求。我一定会考虑在未来使用WiX分发其他IronPython项目。

似乎与IronPython 2.7一起工作得很好。只需将它指向正确的文件夹即可离开:

D:\Code>ipy
IronPython 2.7 (2.7.0.40) on .NET 4.0.30319.235
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.append("D:\Code\IronPython\BeautifulSoup-3.2.0")
>>> import urllib2
>>> from BeautifulSoup import BeautifulSoup
>>> page = urllib2.urlopen("http://www.example.com")
>>> soup = BeautifulSoup(page)
<string>:1: DeprecationWarning: object.__new__() takes no parameters
>>> i = soup('img')[0]
>>> i['src']
'http://example.com/blah.png'

我没有测试过,但我会说它最有可能与最新的IPy2配合使用。

至于发行,这很简单。使用-X:SaveAssemblies选项将Python代码编译为二进制文件,然后将其与其他DLL和IPy依赖项一起发送。

如果你有完整的标准库和真正的 re 模块(google for IronPython社区版),它可能会有效。但IronPython是一个令人难以置信的糟糕的python实现,我不会指望它。

此外,试试 html5lib 。该解析器使用相同的规则解析firefox解析文档。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top