美麗的湯配鐵蟒嗎? 如果是這樣用哪個版本的python python? 它使用鐵python(主要是C#調用一些python代碼來解析html)在.net 2.0上發佈windows桌面應用程序有多簡單?鐵蟒,美麗的湯,win32應用程序
回答
我在問自己同樣的問題,在努力遵循這裏和其他地方的建議讓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();
}
}
}
我還沒有測試過,但我會說它很可能會使用最新的IPy2。
至於分配,這很簡單。使用-X:SaveAssemblies選項將Python代碼編譯爲二進制文件,然後將其與其他DLL和IPy依賴關係一起發送。
如果BeautifulSoup不適用於IronPython,那是因爲IronPython沒有實現整個Python語言(與CPython一樣)。 BeautifulSoup是純python,沒有C擴展,所以唯一的問題是IronPython與CPython在Python源代碼方面的兼容性。不應該有一個,但如果存在的話,錯誤將是顯而易見的(「no module命名...「,」無方法命名...「等)。谷歌說,只有一個BS的測試失敗與IronPython。它可能有效,而且現在可以修復該測試。我不知道。
試一下,看看,會是我的建議,除非任何人有更具體的東西。
我測試過並使用了BeautifulSoup與IPy 1.1和2.0(忘記哪個測試版,但是這是幾個月前)。如果您仍然遇到問題,請發表評論,我會挖掘我的測試代碼併發布。
如果你有完整的標準庫和真實的re
模塊(谷歌for IronPython社區版),它可能會工作。但IronPython是一個令人難以置信的糟糕的Python實現,我不會指望這一點。
另外,給html5lib
一試。解析器使用相同的規則解析文件。
另外,關於與-X:SaveAssemblies編譯的先前評論之一,這是錯誤的。 -X:SaveAssemblies意味着一個調試功能。有一個API用於將Python代碼編譯爲二進制文件。 This post解釋了API和兩種模式的區別。
我們正在分發40K線IronPython的應用程序,它解析出的代表假期安排在美國衆議院例子。我們無法將整個事件編譯成單個二進制可分發版本。相反,我們已經將它作爲一個數十億個小型dll分發給每個IronPython模塊。這工作得很好,但。
然而,在較新的版本IronPython 2.0中,我們有一個最近的高峯,它似乎能夠將所有東西編譯成一個二進制文件。這也導致應用程序啓動速度加快(模塊導入速度更快)。希望在未來幾天內,這個峯值會遷移到我們的主樹中。
爲了做到這一點,我們使用的是WiX,它是微軟內部創建msi安裝的工具,它已經被開源(或者至少可以自由使用)。它沒有給我們帶來任何問題,儘管我們的安裝有一些相當繁瑣的要求。我一定會在未來使用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'
- 1. 蟒蛇美麗的湯JSON
- 2. 如何用美麗的湯和蟒蛇
- 3. 用美麗的湯
- 4. 蟒蛇解析與美麗的湯
- 5. 蟒蛇美麗的湯輸出到excel
- 6. 蟒蛇 - 網上刮美麗的湯
- 7. Python美麗的湯
- 8. 在美麗的湯
- 9. 與美麗的湯
- 10. 與美麗的湯
- 11. 使用美麗的湯
- 12. 美麗的湯解析表
- 13. Webscrape沒有美麗的湯
- 14. 多選美麗的湯
- 15. Python Web Scraping;美麗的湯
- 16. 美麗的湯和uTidy
- 17. 美麗的湯不進口
- 18. 解析HTML美麗的湯
- 19. 美麗的湯從標籤
- 20. 刮表與美麗的湯
- 21. 美麗的湯發現XML
- 22. 美麗的湯 - 嵌套表
- 23. 美麗的湯刮圖案?
- 24. 美麗的湯安裝
- 25. 美麗的湯錯誤
- 26. Python美麗的湯編碼
- 27. 美麗的湯 - 文檔
- 28. 美麗的湯解析XML
- 29. 與美麗的湯解析
- 30. python 3的美麗湯4
我不使用IronPython的,但我到目前爲止已經讀到它不保證了「非常糟糕的Python實現」 [錯字固定]。 – tzot 2008-09-23 10:20:06
我當然不認爲IronPython是非常糟糕的。它對很多東西都很好。只是不要指望它成爲CPython的替代品。 – 2010-01-08 09:07:40