【问题标题】:BeautifulSoup doesn't find, findAll, or get a div by its IDBeautifulSoup 无法通过 ID 查找、findAll 或获取 div
【发布时间】:2017-11-29 12:22:18
【问题描述】:

过去两天我一直在不停地做这个...... 我正在尝试使用 BeautifulSoup 通过其 ID 获取特定的 div:

import requests
from bs4 import BeautifulSoup

r = requests.get('www.example.com', cookies=cookies_dict)
soup = BeautifulSoup(r.content, 'html.parser')
div_text = soup.get('div', {'id': 'this_div_id'}).text
print div_text

我得到的只是一本字典:

{'id': 'this_div_id'}

现在,我检查以确保 'this_div_id' 实际上在 r.content 内:

>>> 'this_div_id' in r.content
True

我很乐意收到任何帮助和建议。

【问题讨论】:

  • {'id', 'this_div_id'}set,而不是 dictdict 将是 {'id': 'this_div_id'})。撇开这一点不谈,如果没有源 html(或至少足以重现问题),就不可能回答您的问题。
  • 不幸的是我不能在这里添加。 div 包含在许多其他元素中,这让我想知道 BeautifulSoup 是否只能在 HTML 中走这么远直到它停止。
  • “不幸的是,我无法在此处添加。div 位于许多其他元素中” => 这如何阻止您发布准确再现问题的 html 片段???
  • 自我更正:实际上可以在没有最小 html 源的情况下回答问题...但这并不意味着在没有 MCVE 的情况下发布调试问题是可以的。

标签: python python-2.7 beautifulsoup python-requests


【解决方案1】:

Err...也许您应该再次查看BeautifulSoup 文档?-)

模块bs4.element中get方法的帮助:

get(self, key, default=None) 未绑定 bs4.BeautifulSoup 方法 返回标签的 'key' 属性的值,或 为“默认”提供的值(如果没有) 属性。

我认为您需要 find() 方法:

>>> html = """<html><body><div><div><div id='this_div_id'>haha</div></div></div>"""
>>> from bs4 import BeautifulSoup
>>> s = BeautifulSoup(html, 'html.parser')
>>> s.find("div")
<div><div><div id="this_div_id">haha</div></div></div>
>>> s.find("div", id="this_div_id")
*<div id="this_div_id">haha</div>
>>> 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-18
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多