从需要时间加载的网页中抓取数据时出现问题

2024-06-16 12:15:46 发布

您现在位置:Python中文网/ 问答频道 /正文

作为练习的一部分,我试图从网页上抓取数据,但网页的设置方式似乎让我的一些努力受挫。基本上,我认为网页加载我感兴趣的功能需要一段时间,因此,当我运行代码提取我想要的数据时,它失败了。这是网页:https://www.cbn.gov.ng/rates/ExchRateByCurrency.asp

我注意到,即使在检查源代码时,表部分也需要一段时间才能加载

这是我的密码:

from bs4 import BeautifulSoup as bs
from requests import get

html = get("https://www.cbn.gov.ng/rates/ExchRateByCurrency.asp").text

html = bs(html,"lxml")
html = html.find("div",id="ContentTextinner")

现在,如果我运行这个html.tbody,下面是我的输出: enter image description here

相比之下,网站本身,一旦完成加载,显然在部分中有很多内容:

enter image description here

在打开inspect视图重新加载网页时,我发现源代码本身直到一秒钟左右才完全加载。我想这可能就是为什么html.tbody显示为空的原因,即使在完全加载的页面中,它充满了有价值的信息。我想听听如何解决这个问题的建议,好吗


Tags: 数据fromhttpsimport网页bs源代码html
2条回答

您可以使用像selenium这样的库来实现这一点

例如:

from selenium import webdriver
from bs4 import BeautifulSoup as bs

driver = webdriver.Firefox()
driver.get("https://www.cbn.gov.ng/rates/ExchRateByCurrency.asp")

html = driver.page_source
print(html.find("div",id="ContentTextinner"))

driver.quit()

我想这就是你想要的:

import requests as r

res = r.get('https://www.cbn.gov.ng/rates/outputExchangeRateJSN.asp')
if res.status_code == 200:
    data = res.json()
    # Do something with the data
else:
    print(f"Error: {res.status_code}")

您将以JSON的形式获取数据,并从中提取您需要的内容

这是因为请求是动态发出的,以填充页面的主体,这就是为什么您无法从第一个页面中找到内容

您也可以使用此链接将其作为CSV文件下载,所有内容:CSV_File

相关问题 更多 >