【问题标题】:How to Extract title from <a> tag within DIV using Python?如何使用 Python 从 DIV 中的 <a> 标记中提取标题?
【发布时间】:2021-03-08 17:31:50
【问题描述】:

我是 Python 新手, 我想提取放置在 Divs 中的 标签内的所有标题/s。 它可能有 0 个标题或多达 100 个。

它是子 DIV &lt;div class="Shl zI7 iyn Hsu"&gt;,其中包含 标记和标题。

这是第一个包含所有子 DIV 的主 DIV 代码:

<div class="Eqh F6l Jea k1A zI7 iyn Hsu"><div class="Shl zI7 iyn Hsu"><a data-test-id="search-guide" 
href="" title="Search for &quot;living room colors&quot;"><div class="Jea Lfz XiG fZz gjz qDf zI7 iyn 
Hsu" style="white-space: nowrap; background-color: rgb(162, 152, 139);"><div class="tBJ dyH iFc MF7 
erh tg7 IZT mWe">Living</div></div></a>

在上面的例子中,我想获得“客厅颜色”而不是 title= 前面的所有内容, 我想我以后可以有一些 RegEx,但我有从 HTML 解析中获取标题的问题。

我尝试过以下 Python:

import requests
from bs4 import BeautifulSoup

url = "https://www.pinterest.com/search/pins/?q=room%20color"
get_url = requests.get(url)
get_text = get_url.text
soup = BeautifulSoup(get_text, "html.parser")
DivTitle = soup.select('a.Shl.zI7.iyn.Hsu')[0].text.strip()
print(DivTitle)

我得到:IndexError:列表索引超出范围

当我搜索上述关键字时,搜索结果中出现了不止一个标题(建议关键字)。

感谢您的帮助。

编辑: 好的,我得到了这个工作,但我试图让它从 URL 解析而不是粘贴我的代码:

这是我使用的部分:

import requests
vgm_url = 'https://www.pinterest.com/search/pins/?q=skin%20care'
html_text = requests.get(vgm_url).text
soup = BeautifulSoup(html_text, 'html.parser')

但我什么也没得到,也没有错误。

【问题讨论】:

    标签: python html html-parsing title


    【解决方案1】:

    您的选择器错误,因为 DIV 具有您想要的类,而 A 是该 DIV 的子项。 title 是 A 元素的一个属性。

    from bs4 import BeautifulSoup
    
    data = '''\
    <html>
      <head>
        <meta name="generator"
        content="HTML Tidy for HTML5 (experimental) for Windows https://github.com/w3c/tidy-html5/tree/c63cc39" />
        <title></title>
      </head>
      <body>
        <div class="Eqh F6l Jea k1A zI7 iyn Hsu">
          <div class="Shl zI7 iyn Hsu">
            <a data-test-id="search-guide" href="" title="Search for &quot;living room colors&quot;">
              <div class="Jea Lfz XiG fZz gjz qDf zI7 iyn Hsu" style="white-space: nowrap; background-color: rgb(162, 152, 139);">
                <div class="tBJ dyH iFc MF7 erh tg7 IZT mWe">Living</div>
              </div>
            </a>
          </div>
        </div>
      </body>
    </html>
    '''
    
    soup = BeautifulSoup(data, 'html.parser')
    
    a = soup.select('div.Shl.zI7.iyn.Hsu a')[0]
    
    print(a['title'])
    

    【讨论】:

    • soup.select 返回一个可迭代对象。删除末尾的 [0] 然后循环。即for a in soup.select(...):
    • 感谢您的回复,因为我无法使用 URL 使其工作,所以我复制了整个 html 代码并尝试了它:a = soup.select('div.Eqh.F6l.Jea.k1A .zI7.iyn.Hsu a') for a in soup.select(...): print(a['title']) 但我收到此错误:AttributeError: 'ellipsis' object has no attribute 'replace'跨度>
    • 您我们应该用我的答案中的值替换 3 个点。我在打电话,无法为你做。
    • 感谢回复,现在可以了,我用:for a in soup.select('div.Eqh.F6l.Jea.k1A.zI7.iyn.Hsu a'):跨度>
    • 如何从 URL 解析它而不是粘贴我的 HTML 代码?我试过 request.get 但我什么也没得到,也没有错误,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多