4

我正在尝试使用 Django 中的 BeautifulSoup 版本 4(使用带有 mod_python 的 Apache2)动态呈现 HTML 页面。但是,只要我将任何 HTML 字符串传递给 BeautifulSoup 构造函数(参见下面的代码),浏览器就会挂起等待网络服务器。我在 CLI 中尝试了等效代码,它就像一个魅力。所以我猜这与 BeautifulSoups 环境有关,在这种情况下是 Django + Apache + mod_python。

import bs4
import django.shortcuts as shortcuts

def test(request):
    s = bs4.BeautifulSoup('<b>asdf</b>')
    return shortcuts.render_to_response('test.html', {})

我已经使用 pip 安装了 BeautifulSoup pip install beautifulsoup4,. 我尝试使用标准 Debian 软件包安装 BeautifulSoup3 apt-get install python-beautifulsoup,然后以下等效代码可以正常工作(来自浏览器和 CLI)。

from BeautifulSoup import BeautifulSoup
import django.shortcuts as shortcuts

def test(request):
    s = BeautifulSoup('<b>asdf</b>')
    return shortcuts.render_to_response('test.html', {})

我查看了 Apache 的访问和错误日​​志,但它们没有显示任何信息,即停止的请求发生了什么。我还检查了 /var/log/syslog 和 /var/log/messages,但没有更多信息。

这是我使用的 Apache 配置:

<VirtualHost *:80>
    DocumentRoot /home/nandersson/src
    <Directory /home/nandersson/src>
        SetHandler python-program
        PythonHandler django.core.handlers.modpython
        SetEnv DJANGO_SETTINGS_MODULE app.settings
        PythonOption django.root /home/nandersson/src
        PythonDebug On
        PythonPath "['/home/nandersson/src'] + sys.path"
    </Directory>

    <Location "/media/">
        SetHandler None
    </Location>
    <Location "/app/poc/">
        SetHandler None
    </Location>
</VirtualHost>

我不确定如何进一步调试,不确定它是否是错误。任何人都知道如何解决这个问题或遇到类似问题?

4

4 回答 4

15

我正在使用 Apache2 和 mod_python。我通过显式传递“html.parser”来解决挂起问题。

s = bs4.BeautifulSoup('<b>asdf</b>', 'html.parser')
于 2012-10-03T09:05:41.290 回答
2

这可能是此处描述的 Cython 和 mod_wsgi 之间的交互,并在此处在 Beautiful Soup 上下文中进行了探索。以下是与您类似的早期 问题。

于 2012-10-04T19:03:54.317 回答
2

尝试

doc = BeautifulSoup(html, 'html5lib')

在我的情况下,'html.parser' 经常导致 HTMLParseError https://groups.google.com/forum/?fromgroups=#!topic/beautifulsoup/x_L9FpDdqkc

于 2013-02-24T10:41:53.897 回答
1

大约一年前我遇到过同样的问题,刚刚尝试使用新版本的 BeautifulSoup 4.3.2 进行类似的设置(django+mod_wsgi+apache2),似乎问题已得到解决。

于 2014-03-21T17:48:44.617 回答