RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1272155
Accepted
Clark Devlin
Clark Devlin
Asked:2022-04-20 00:04:29 +0000 UTC2022-04-20 00:04:29 +0000 UTC 2022-04-20 00:04:29 +0000 UTC

如何加快汇率解析?

  • 772

有一个程序可以解析欧元和美元。
一切正常,但速度明显缓慢:该功能需要 3 到 5 秒......

from requests import get
from bs4 import BeautifulSoup as bs


def get_wal():
    headers = {
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
        "Host":"myfin.by:443",
        "Accept-Encoding": "gzip, deflate, sdch, br",
        "Content-Type": "application/x-www-form-urlencoded",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
    }

    body = get('https://myfin.by/currency/minsk', headers=headers)
    for_bs = body.text
    soup = bs(for_bs, 'html.parser')

    usd_span = soup.find_all('span', {'class':'bl_usd_ex'})
    usd = usd_span[0].text
    eur_span = soup.find_all('span', {'class': 'bl_eur_ex'})
    eur = eur_span[0].text

    return usd, eur

我怎样才能加快速度?

python
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. CrazyElf
    2022-04-20T01:56:18Z2022-04-20T01:56:18Z

    显然,您运行脚本的服务器非常慢,或者白天站点上的负载更多。我只是通过 Google Colab 尝试过,大部分时间都是从网站加载页面,你无能为力。如果只是突然他们有一个 API 或一个移动版本,但我没有立即找到它。您唯一可以做的就是将解析器更改为lxml,它会更快一点:

    soup = bs(for_bs, 'lxml')
    

    使用 Colab 中的这个解析器,大约需要 0.8 秒 - 页面加载,另外 0.5 秒 - 解析 BS,总共大约 1.5 秒,但即使使用您指定的解析器,在 Colab 中加载大约需要 1.7 秒。

    • 3
  2. Best Answer
    Jack_oS
    2022-04-21T15:14:25Z2022-04-21T15:14:25Z

    从CrazyElf 的回答中扩展移动版主题:

    import requests
    from bs4 import BeautifulSoup
    
    url = 'https://m.myfin.by/currency/minsk'        # адрес мобильной версии
    headers = {'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'}
    
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.content, 'html.parser')
    
    usd = soup.find('div', class_='bl_usd_ex').text  # тут котировки в div-ах,
    eur = soup.find('div', class_='bl_eur_ex').text  # не span, как в десктопной
    
    print(f'usd: {usd}, eur: {eur}')
    

    运行时测试:

    $ time python sample_handing.py 
    usd: 2.5864, eur: 3.1186
    
    real    0m0,881s
    user    0m0,266s
    sys     0m0,012s
    

    使用 lxml 作为解析器的变体:

    soup = BeautifulSoup(r.content, 'lxml')
    

    将加快处理速度:

    $ time python sample_handing.py
    usd: 2.5996, eur: 3.1235
    
    real    0m0,750s
    user    0m0,378s
    sys     0m0,016s
    
    • 3

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5