2

私のコンピューターが他の人のコンピューターとは異なる方法でこの python スクリプトに反応するという奇妙な問題があります (私は macOX Mountain Lion python v =2.7 を使用しています)。これを修正する方法、またはシステムの出力を報告してください。他の人はすべての行を適切に取得しているように見えますが、私は 1 行の出力しか取得しません。残念ながら、私のシステムでは動作しません。動作するために必要なのは私です。私のシステムは、クロールされているテーブルの最後の行を出力します:

import urllib
from bs4 import BeautifulSoup

#file_name = "/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()
4

3 に答える 3

4

BeautifulSoup は、さまざまなパーサーを使用できます。詳細については、ドキュメントを参照してください。しかし、短いバージョンは次のとおりです。

がある場合はlxml、それを使用します。そうでない場合は、 を試みhtml5libます。そうでない場合は、 stdlib を使用しhtml.parserます。、およびそれがラップlxmlするlibxml2ライブラリ、およびhtml5lib. さらに、html.parserPython 2.7.2 と 2.7.3 の間で劇的に変更されました (特に、2.7.3 ではより寛大です)。

Mountain Lion 10.8.2 で 64 ビットの Apple Python 2.7.2 を pip でインストールされた BS 4.1.3 を使って実行しました。

  • pip-installed lxml 3.1.0 with Apple libxml2 2.7.8: 69 行。
  • XML モードで Apple libxml2 2.7.8 を使用して pip でインストールされた lxml 3.1.0: 69 行。
  • Homebrew libxml2 2.9.0 を使用して pip でインストールされた lxml 3.1.0: 0 行。
  • XML モードで Homebrew libxml2 2.9.0 を使用して pip でインストールされた lxml 3.1.0: 69 行。
  • pip-installed html5lib 0.95-dev: 0 行。
  • stdlib html.parser 2.7.2: 1 行。
  • バックポートされた html.parser 2.7.4: 69 行。

したがって、HTML には明らかに問題があり、一部のパーサーは処理できますが、他のパーサーは処理できません。何が問題なのかを確認するために、私はそれをW3C オンライン バリデーターにフィードしましたが、139 個のエラーが見つかり、そこからセマンティック アウトラインを構築できませんでした。

一部のマシンで動作し、他のマシンでは動作しない理由は、それらのマシンで bs4 が異なるパーサーを使用しているためです。特に、あなたのマシンにはおそらくサードパーティのパーサーはインストールされておらず、Apple の Python 2.7.2 を使用しています。

于 2013-04-09T18:38:19.277 に答える
0

まったく同じコードの場合は、.pyc を削除してみてください

于 2013-04-09T18:26:59.440 に答える
0

ご回答ありがとうございます。TextWrangler という OS X のテキスト エディタを使用していました。コードを Mac のネイティブ texteditor にコピーして textwrangler に貼り付けたところ、まったく同じコードが機能するようになりました。むかつくが、私は議論するつもりはありません。インデントの問題だったようです.!!! TextWrangler テキスト エディターは常にこの問題を引き起こしているようであり、コードに非表示の文字をスローすることに注意してください。

于 2013-04-18T10:03:21.473 に答える