【问题标题】:Getting "None" when parsing out data on python,BS4在 python,BS4 上解析数据时得到“无”
【发布时间】:2019-07-18 11:16:37
【问题描述】:

一段时间以来一直在尝试制作一个可以从网站拆分数据的python程序。我遇到了bs4 python 库,并决定将它用于该工作。

问题是我总是得到 None 的结果,这是我无法理解的

我只想得到一个位于a@href 中的单词,它位于一个 div 类中,为此,我编写了一个类似的函数:

def run(self):
    response = requests.get(self.url)
    soup = BeautifulSoup(response.text, 'html.parser')
    finalW = soup.find('a', attrs={'class': 'target'})
    print(finalW)

使用这段代码,我希望得到一个字,但它只返回None。 我也很有可能在这个目录的路径上犯了一个错误,所以我发布了一张我想从 HTML 中提取的东西的图片:

【问题讨论】:

  • 您应该添加原始数据,而不是图像链接或屏幕截图。
  • 可以分享网址吗?
  • 您是否检查过此 html 元素是否存在于源代码中,或者是否稍后通过某些 javascript/ajax 调用添加了该元素,该调用会修改 DOM 对象。 requests 只会获得原始来源。您不会得到任何添加或修改原始源元素的更新或修改。
  • 已经检查过了,Chris Doyle。当我使用 finde_all 命令时,我清楚地看到了该 HTML 文件中的所有 A href,包括我正在寻找的东西

标签: python beautifulsoup


【解决方案1】:

bs4 找不到查询时,返回 None。

在您的情况下,html 或多或少是这样的。

...
<div class='target'>
    <a href="somelonglink">neededlink</a>
    <a href="someotherlink">notneededlink</a>
...
</div>
...

soup.find('a', attrs={'class': 'target'}) 因此将无法计算您的查询,因为a 中没有属性。

如果您确定您的链接在下面的查询中排在第一位。

soup.find('div', {'class': 'target'}).find('a')['href']

【讨论】:

  • 再次报错:'NoneType' 对象不可下标
  • 我敢肯定,如果你的 html 是你在图片中所说的那样,这将起作用。
  • 不,它没有。然而,我发现了我的错误。非常感谢伙计!
  • 你的错误是什么?
  • 好吧,我意识到我没有得到任何类型的对象,因为没有对象。所以我发现我应该首先进入这个,在我的例子中是“目标”,div 类,然后在其中寻找一些东西。就结果而言,我只包括了两行,它们显示了程序在哪里寻找 div 类“target”的父 div 类。再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 1970-01-01
  • 2022-08-02
  • 1970-01-01
相关资源
最近更新 更多