首页 > 解决方案 > 选择合适的标签传入 BeautifulSoup 的 select 方法

问题描述

所以我一直在阅读在线书籍“Automate the Boring Stuff with Python”,并且正在学习 BeautifulSoup。我的问题是我似乎无法根据我在 Chrome 中使用开发人员的工具找到的内容来选择合适的标签。

<div data-hveid=.....>
  <div class="rc">
   <a href="https://www.python.org/".....>
        <h3 class="LC20lb">Welcome to Python.org</h3>
# Using select to grab links to search results. 
linkElems = soup.select('r .a')

检查员结果的示例。 在本书中,目标是获取所有出现在谷歌搜索结果页面上的链接。为此作者使用了soup.select('r .a') 行。但是当我使用检查器时,我会看到“a href”标签。

就我自己而言,我还想抓取显示在搜索结果页面上的链接的标题/标题。检查器突出显示“h3 类”标签。我试图通过告诉 select 查找类属性等于“LC20lb”的标签来选择它,但我一直得到一个空列表作为输出。

所以我的问题是,一旦检查员帮助我们缩小焦点,我们如何知道哪个标签是合适的选择?就像作者怎么知道我们应该使用“.r a”而不是“a href”标签?一般来说,一旦选择器向我显示了特定元素,我应该选择多远,即哪个祖先?

标签: pythoncssbeautifulsoupcss-selectors

解决方案


如果你做'a href'你没有指定一个div类,所以它会得到一个href的所有实例,这将包括指向地图和驱动器等东西的链接。在你引用的代码中,你错过了“r” div 类

    <div data-hveid=.....>
      <div class="rc">
        <div class="r">        
          <a href="https://www.python.org/".....>
            <h3 class="LC20lb">Welcome to Python.org</h3>

因此,soup.select('.r a') 正在获取 "r" div 类(即搜索结果)中的所有 a 标签,而不是 a href 标签的所有实例。

希望这能回答你的问题!


推荐阅读