铁Python,靓汤,win32应用程序

2024-06-01 06:16:16 发布

您现在位置:Python中文网/ 问答频道 /正文

靓汤和铁蟒一起用吗? 如果是的话,哪一个版本的铁Python? 在.net 2.0上使用iron python(主要是c#调用一些python代码来解析html)发布windows桌面应用程序有多容易?


Tags: 代码版本应用程序netwindowshtml桌面iron
3条回答

我也在问自己同样的问题,在努力遵循这里和其他地方的建议以使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();
        }
    }
}

我在IPy 1.1和2.0中测试并使用了BeautifulSoup(忘了哪个beta,但这是几个月前的事了)。如果您仍然有问题,请留下注释,我会找出我的测试代码并发布它。

如果BeautifulSoup在IronPython上不起作用,那是因为IronPython没有实现整个Python语言(与CPython相同)。BeautifulSoup是纯python,没有C扩展,所以唯一的问题是IronPython与CPython在python源代码方面的兼容性,不应该有,但是如果有,错误会很明显(“没有命名模块…”、“没有命名方法…”等等)。谷歌表示,只有一个BS的测试在IronPython上失败。它可能起作用了,这个测试现在可能已经解决了。我不知道。

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

相关问题 更多 >