Python:find in BeautifulSoup在一台windows计算机上正常工作,而在另一台计算机上则不正常

Python:find in BeautifulSoup在一台windows计算机上正常工作,而在另一台计算机上则不正常,python,python-2.7,find,beautifulsoup,attributeerror,Python,Python 2.7,Find,Beautifulsoup,Attributeerror,我在Windows 7机器上运行了Python 2.7中的以下简单代码: from urllib2 import urlopen from bs4 import BeautifulSoup from HTMLParser import HTMLParser def main(): html_parser = HTMLParser() soup = BeautifulSoup(urlopen("http://www.amazon.com/gp/bestsellers/").re

我在Windows 7机器上运行了Python 2.7中的以下简单代码:

from urllib2 import urlopen
from bs4 import BeautifulSoup
from HTMLParser import HTMLParser

def main():
    html_parser = HTMLParser()

    soup = BeautifulSoup(urlopen("http://www.amazon.com/gp/bestsellers/").read())

    categories = []

    for category_li in soup.find(attrs={'id':'zg_browseRoot'}).find('ul').findAll('li'):
        category = {}
        category['name'] = html_parser.unescape(category_li.a.string)
        category['url'] = category_li.a['href']

        categories.append(category) 
当我在一台机器上运行它时,它工作正常,当我在另一台机器上运行它时,我会收到以下错误消息:

Traceback (most recent call last):
  File ".../tmp.py", line 10, in <module>
    for category_li in soup.find(attrs={'id':'zg_browseRoot'}).find('ul').findAll('li'):
AttributeError: 'NoneType' object has no attribute 'find'
回溯(最近一次呼叫最后一次):
文件“../tmp.py”,第10行,在
对于汤中的类_li.find(attrs={'id':'zg_browseRoot'}).find('ul').findAll('li'):
AttributeError:“非类型”对象没有属性“查找”
有人能帮我找出原因吗?这两台机器都安装了Python 2.7。
非常感谢您的帮助。

在两台不同的机器上运行代码的不同输出是用于解析html的解析器。在不起作用的机器上安装了lxml,因此bs4正在使用它,在起作用的机器上,您使用的是
html.parser
,我们使用诊断代码发现了它

运行诊断代码显示系统上可用的解析器以及它们如何解析html:

from bs4.diagnose import diagnose
data = urlopen("http://www.amazon.com/gp/bestsellers/").read()
diagnose(data)
因此,将安装了
lxml
的系统上的代码更改为:

soup = BeautifulSoup(urlopen("http://www.amazon.com/gp/bestsellers/").read(),"html.par‌​ser")

将解析器更改为<代码> HTML.PAR‌​ser成功了


有趣的是,我可以在ubuntu上使用相同版本的bs4
4.3.2
运行任意一个解析器的代码,唯一的区别是我的
lxml
版本比3.4.4.0稍旧

安装了哪些解析器?
urlopen(“http://www.amazon.com/gp/bestsellers/)在每台机器上读取()?它们是否都包含
zg\u browseRoot
?从bs4.diagnose导入diagnose运行
;数据=…读取();诊断(数据)
,它将告诉您哪些解析器可用,以及它们在解析htmlOk时的任何差异,因此请尝试
美化组(urlopen(“http://www.amazon.com/gp/bestsellers/“”.read(),“html.parser”)
BeautifulSoup(urlopen(“”)http://www.amazon.com/gp/bestsellers/“”.read(),“html.parser”)
回答得很好,非常感谢。它现在工作得很好。