Beautiful Soup 4 CSS 选择器的工作方式与教程显示的方式不同

Posted

技术标签:

【中文标题】Beautiful Soup 4 CSS 选择器的工作方式与教程显示的方式不同【英文标题】:Beautiful Soup 4 CSS selector does not work the same way the tutorial show 【发布时间】:2013-10-31 05:35:47 【问题描述】:

我从 [Beautiful Soup 4 教程页面][1] 运行 示例 CSS 选择器 代码,但结果不同,有些给出正确的结果,有些则没有。在网站上,他们说它应该在 Python 2.7 和 3 中以相同的方式工作。我有 Python 2.7 并安装 Beautiful Soup 4。有人有同样的问题吗?

from bs4 import BeautifulSoup
import urllib2

html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""

soup = BeautifulSoup(html_doc)

我的测试(当然我在教程中使用相同的 html 文档):

soup.select("#link1 ~ .sister")
[]

他们的测试:

soup.select("#link1 ~ .sister")
# [<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
#  <a class="sister" href="http://example.com/tillie"  id="link3">Tillie</a>]

Click Here to See

【问题讨论】:

你能告诉我们你的soup变量初始化吗? 好的,我刚刚编辑了问题 刚刚试过你的代码,它对我有用。你用 pip 安装了漂亮的汤吗? 不,我下载了源码包并运行 $python setup.py install 我有同样的问题@HoangPham。努力为您提供解决方案。我用pip安装。 【参考方案1】:

我发现了你的问题。您使用的 BeautifulSoup 版本早于 4.3.2。

我刚刚安装了 4.1.2,并运行了您的代码。我遇到了同样的问题,我得到了一个空列表,现在我已经将它更新到 4.3.2,我又得到了兄弟姐妹的列表。

可以通过 pip 安装它,但您也可以获取最新的version from Pypi 并下载它。

【讨论】:

哇,太好了,它有效!非常感谢。我以为我下载了最新版本,因为我按照教程到 BeautifulSoup 包的下载页面。谢谢。 教程页面链接到没有最新版本的下载站点。 这里使用 python3.4 和 bs4.4 出现同样的问题:s

以上是关于Beautiful Soup 4 CSS 选择器的工作方式与教程显示的方式不同的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫编程思想(58): 用Beautiful Soup CSS选择器嵌套选择节点

Python爬虫编程思想(59): 用Beautiful Soup CSS选择器获取属性值与文本

2017.08.11 Python网络爬虫实战之Beautiful Soup爬虫

Python爬虫学习笔记.Beautiful Soup库的使用

Python爬虫学习笔记.Beautiful Soup库的使用

使用 Beautiful Soup 提取 css 链接