首页 > 解决方案 > Python(html) 使用 bf4 从动态变化的 div/span 中获取数据

问题描述

我需要从https://cryptowat.ch/获取实时 BTC,但是当程序运行 5 次时它会停止,当我检查该网站时,我禁止了很多请求。我如何在没有数据的情况下获取数据用 Python 刷新整个网站?

这是代码:

import bs4
import requests
from bs4 import BeautifulSoup

def btc():
    r= requests.get("https://cryptowat.ch/")

    soup = bs4.BeautifulSoup(r.text, "lxml")

    number = soup.find_all('a',{'class':'_1roDdymkPS2zplXEDcBm0L _3z3AqahoD2pN2R7vFue-0o pointer'})[1].find("span").text
    #btc = [span.text for span in number]
    return number
"""while True:
    print("A jelenlegi BTC ár : "+str(bekero))"""


while True:
    print("A jelenlegi BTC ár : "+str(btc()))
    time.sleep(3)

标签: pythonpython-3.xbeautifulsouppython-requests

解决方案


您应该将 selenium 与 chrome webdriver 一起使用(https://chromedriver.chromium.org/getting-started

基本上,您要做的(使用 python 代码)是打开一个 chrome 窗口,将其定向到某个网站,如果您愿意,可以与网页进行交互,然后读取页面内容并将其传递给 BS4。

请注意,请求库不加载动态内容。

例子:

from selenium import webdriver

browser = webdriver.Chrome()
browser.get(url)

source = browser.find_element_by_xpath("/html").get_attribute('outerHTML')

然后将页面源传递给BS4


推荐阅读