2013-04-09 29 views
2

我有一個奇怪的問題,我的電腦對這個python腳本的反應與其他人的電腦不同(imOX在macOX Mountain Lion python v = 2.7)。任何想法如何解決這個問題,或者請在你的系統上報告輸出? 我只得到一行輸出,而其他人似乎正確地得到所有行。不幸的是,它不適用於我的系統,我是需要它工作的人。我的系統打印的表的最後一行是被抓取:Python循環或輸出 - 只在我的電腦上

import urllib 
from bs4 import BeautifulSoup 

#file_name = "https://stackoverflow.com/users/ripple/uspc-cpc.txt" 
#file = open(file_name,"w") 
i=125 
while i==125: 
    url = "http://www.uspto.gov/web/patents/classification/cpc/html/us" + str(i) + "tocpc.html" 
    print 'Grabbing from: ' + url + '\n' 
    i += 1 
    #get the table data from the page 
    data = urllib.urlopen(url).read() 
    #send to beautiful soup 
    soup = BeautifulSoup(data) 
    table = soup.find("table", width='80%') 
    for tr in table.findAll('tr')[2:]: 
     col = tr.findAll('td') 
     #print 'hi' 
     uspc = col[0].get_text().encode('ascii','ignore').replace(" ","") 
     cpc1 = col[1].get_text().encode('ascii','ignore').replace(" ","") 
     cpc2 = col[2].get_text().encode('ascii','ignore').replace(" ","") 
     cpc3 = col[3].get_text().encode('ascii','ignore').replace(" ","").replace("more...", "") 
     record = uspc + ',' + cpc1 + ',' + cpc2 + ',' + cpc3 + '\n' 
     print record 
     #file.write(record) 

#file.close() 
+0

適用於Linux上的我。 – 2013-04-09 18:17:24

+0

@QuentinEngles:鑑於OP明確表示它在除了OS X Mountain Lion框之外的所有人的計算機上都能正常工作,該評論有多大幫助? – abarnert 2013-04-09 18:20:36

+1

美麗的湯可以使用各種不同的解析器,具體取決於安裝的內容。很可能你有一些錯誤或只是複雜的HTML,並且你得到了不同的結果,因爲它在你的計算機上使用的是不同於你測試的其他解析器(例如,它使用'html.parser'而不是'lxml'它們,或者它們都使用'html.parser',但是你運行的是Python 2.7.2,它們運行的​​是2.7.3或2.7.4,或者...)。你能訪問其他計算機來運行一些測試嗎? – abarnert 2013-04-09 18:23:03

回答

0

非常感謝您的回覆。我使用的是名爲TextWrangler的OS X文本編輯器。我將我的代碼複製到Mac的本地文本編輯器中,並將其粘貼回到textwrangler中,現在完全相同的代碼可以工作。 Miffed,但我不會爭辯。看起來可能是一些縮進問題。注意TextWrangler文本編輯器似乎不斷地對我造成這個問題,並將不可見的字符放入代碼中。

0

如果它是完全相同的代碼,請嘗試刪除.pyc文件

+0

謝謝你的迴應。我不確定最終是否解決了這個問題,但是我將我的代碼複製到了texteditor中,並將其粘貼回到textwrangler中,現在完全相同的代碼可以工作。 Miffed,但我不會爭辯。看起來可能是一些縮進問題。 – 2013-04-09 18:44:48

+0

感謝上帝它的工作:D – Magus 2013-04-09 20:18:08

+0

@JosephLee:可能標籤混合空間?我喜歡用'-t'或'-tt'運行,特別是在運行我從網上下載或複製/粘貼的隨機代碼時,在花費數小時試圖調試它們之前讓我知道這些問題。 – abarnert 2013-04-09 21:11:19

4

BeautifulSoup可以使用多種不同的解析器。詳情請參閱the docs。但簡短版本是:

如果您有lxml,它使用它。如果不是,則嘗試html5lib。如果不是,則使用stdlib html.parser。不同的人有lxmllibxml2圖書館以及html5lib。另外,html.parser在Python 2.7.2和2.7.3之間發生了巨大變化(特別是在2.7.3中它更加寬鬆)。

我跑了64位的蘋果的Python 2.7.2山獅10.8.2與PIP-BS安裝4.1.3使用盡可能多的解析器,因爲我已經躺在附近,這裏是我得到的:

  • 用蘋果libxml2 pid-installed lxml 3.1.0 2.7.8:69行。
  • pip-installed lxml 3.1.0與Apple libxml2 2.7.8在XML模式下:69行。
  • pip-installed lxml 3.1.0自制libxml2 2.9.0:0行。
  • pip-installed lxml 3.1.0與自制libxml2 2.9.0在XML模式下:69行。
  • pip-installed html5lib 0.95-dev:0 rows。
  • stdlib html.parser 2.7.2:1行。
  • backported html.parser 2.7.4:69行。

所以,顯然有一些錯誤的HTML,一些解析器可以處理,但其他人不能。爲了看看它有什麼問題,我將它提供給了W3C online validator,發現了139個錯誤,並且無法構建語義概要。

它在一些機器上工作而不是其他機器的原因是bs4在這些機器上使用不同的解析器。特別是在你的機器上,你可能沒有安裝任何第三方解析器,而你正在使用Apple的Python 2.7.2。

相關問題