【问题标题】:Getting class text with multiple spaces - BeautifulSoup获取具有多个空格的类文本 - BeautifulSoup
【发布时间】:2018-06-09 03:42:09
【问题描述】:

我正在尝试使用 BeautifulSoup 获取类中的文本,但该类有多个空格。转换为文本,我得到AttributeError: 'NoneType' object has no attribute 'text'。这让我觉得我实际上并没有获得该课程的文本。

这是我用来获取文本的行。 ticket_count = soup.find('div', class_ = 'ui black circular label ticket-count')

问题是类名中的空格吗?

【问题讨论】:

  • 如果它是给定元素 (docs here) 中类属性的确切值,这应该可以工作。你能提供一些输入的html吗?
  • 更新您尝试抓取的url 和预期输出
  • 这是课程imgur.com/a/KivYEa4
  • 语法看起来正确,类名是唯一的还是在网页上多次出现?如果您可以分享url,将会有所帮助。
  • 我无法重现该问题。也许元素是动态生成的(通过 javascript)。如果是这种情况,您可能会对 selenium 之类的内容感兴趣。

标签: python beautifulsoup


【解决方案1】:

我猜你想知道什么时候有票。该网页使用 JavaScript 轮询网络套接字连接以查看票证是否可用。网络套接字返回 JSON。您可以通过使用 Python 轮询 web-socket 来模仿该行为。以下代码每 5 秒轮询一次 Web 套接字,直到票证可用,然后打印详细说明可用票证的 JSON 对象。 (如果您还没有安装 websocket,则需要安装。)

import json
from websocket import create_connection
import time


def run():
    while 1:
        time.sleep(5)
        ws = create_connection("wss://mothership.splendourtickets.com/stream")
        r = ws.recv()
        ws.close()
        for t in json.loads(r)['tickets']:
            if not t['ticketCount'] == 0:
                return (t)

if __name__ == "__main__":
    ticket = run()
    print (json.dumps(ticket, indent=4, sort_keys=True))

票证可用时的输出:

{
    "id": "1",
    "name": "Three Day Ticket",
    "ticketCount": 1,
    "ticketCountStr": "1",
    "type": "eventTicket"
}

【讨论】:

  • 哇,非常感谢!这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多