Python:find在BeautifulSoup中可以在一台windows机器上正常工作,而在另一台上则不正确

2024-04-26 21:50:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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) 

当我在一台机器上运行它时,它运行得很好,当我在另一台机器上运行它时,我得到以下错误消息:

^{pr2}$

谁能帮我找出原因吗?两台机器都安装了Python2.7。 我真的很感谢你的帮助。在


Tags: 代码fromimport机器parserwindowshtmlli
1条回答
网友
1楼 · 发布于 2024-04-26 21:50:09

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

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

from bs4.diagnose import diagnose
data = urlopen("http://www.amazon.com/gp/bestsellers/").read()
diagnose(data)

因此,将安装了lxml的系统上的代码更改为:

^{pr2}$

将解析器改为html.par‌​ser就可以了。在

有趣的是,我可以在ubuntu上使用相同版本的bs44.3.2来运行代码,唯一的区别是我的lxml版本稍早3.4.1.0 vs 3.4.4.0。在

相关问题 更多 >