python - 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)
解决方案
您应该将 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
推荐阅读
- python - mypy 是否有子类可接受的返回类型?
- node.js - 在 promise.then 和 res.send 之前未按需要修改对象字段
- google-cloud-platform - 如何在 YAML/JINJA 中基于已部署的 VM 创建实例模板
- rest - 如何使用ngrx从API发出GET请求?(Angular 7)
- node.js - 如何在 node.js 中集成 neo4j 驱动程序
- c# - 检查 db ef 6 中存在的实体“列表”
- java - 无法将存储在 firebase 中的内容查看到回收站视图
- angular - 材质树控件不显示来自 http 服务的异步数据
- c++ - 在单元测试中测试连接丢失(在节俭的 C++ 应用程序中或一般情况下)
- node.js - 无法使用 Multer / Express 从多部分表单返回 POST 数据