2

我有一个奇怪的问题,我的计算机对这个 python 脚本的反应与其他人的计算机不同(我在 macOX Mountain Lion python v =2.7 上)。知道如何解决这个问题,或者请报告系统上的输出?我只得到一行输出,而其他人似乎正确地得到了所有行。不幸的是,它无法在我的系统上运行,而我正是需要它才能运行的人。我的系统打印出正在爬取的表格的最后一行:

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的. 另外,在 Python 2.7.2 和 2.7.3 之间发生了巨大的变化(特别是,它在 2.7.3 中更加宽松)。libxml2html5libhtml.parser

我使用安装了 pip 的 BS 4.1.3 在 Mountain Lion 10.8.2 上运行了 64 位 Apple Python 2.7.2,使用的解析器数量与我周围的解析器一样多,这就是我得到的:

  • 使用 Apple libxml2 2.7.8 安装 pip 的 lxml 3.1.0:69 行。
  • pip-installed lxml 3.1.0 和 Apple libxml2 2.7.8 在 XML 模式下: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 安装的 html5lib 0.95-dev:0 行。
  • 标准库 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 的本机文本编辑器并将其粘贴回 textwrangler 并且完全相同的代码现在可以工作。很生气,但我不会争论。看起来可能是一些缩进问题。!!!请注意,TextWrangler 文本编辑器似乎经常对我造成此问题,并且还会将不可见字符放入代码中。

于 2013-04-18T10:03:21.473 回答