gpt4 book ai didi

python - BeautifulSoup select 函数在 Python3.5.2 和 Python3.4.2 之间的工作方式不同

转载 作者:太空宇宙 更新时间:2023-11-04 16:02:45 24 4
gpt4 key购买 nike

问题: 我有一个 html 文件,它包含一些标签,现在我想找到一个标签(表),其类属性值为 'targets',使用 BeautifulSoup4.5.1,它在python3.5.2(Mac Sierra)中工作正常,但在python3.4.2(raspberry pi)中不工作,我想弄清楚为什么。

这是示例 html 文件 (test.html):

<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<table class="maincontainer">
<tbody>
<tr>中文</tr>
<tr>
<td>
<table class="main">
<tbody>
<tr>
<td class="embedded">
<td></td>
<table class="targets"></table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</body>
</html>

下面是我在 python 文件中的写法:

str=''
with open('test.html','rt',encoding='utf-8') as f:
str=f.read()
from bs4 import BeautifulSoup
soup=BeautifulSoup(str)
table=soup.select('table[class="targets"]')

谁能告诉我以下这些问题:

  • 选择函数如何工作?
  • 为什么这在 3.4.2 中不起作用但在 3.5.2 中起作用?
  • 有解决这个问题的方法吗?

最佳答案

这是因为 3.5 和 3.4 Python 环境中安装的模块不同。当您没有显式传递所需的解析器名称时:

soup = BeautifulSoup(str)

BeautifulSoup would pick the parser automatically从已安装的模块之一中进行选择。如果你安装了 lxml,它会选择它,如果没有,它会选择 html5lib - 如果没有安装,它会选择内置的 html .解析器:

If you don’t specify anything, you’ll get the best HTML parser that’s installed. Beautiful Soup ranks lxml’s parser as being the best, then html5lib’s, then Python’s built-in parser.

换句话说,您应该明确定义解析器以避免任何 future 相关的问题。确定哪一个适用于您的特定情况并进行设置:

soup = BeautifulSoup(str, "html5lib")
# or soup = BeautifulSoup(str, "lxml")
# or soup = BeautifulSoup(str, "html.parser")

关于python - BeautifulSoup select 函数在 Python3.5.2 和 Python3.4.2 之间的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40743960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com