【发布时间】:2018-11-04 19:03:53
【问题描述】:
我正在尝试使用BeautifulSoup 抓取以下网址:
https://www.investopedia.com/markets/stocks/aapl/#Financials
我试图解析我用检查找到的这个部分:
<div class="value">
<div class="marker position" style="left: 89.25%;"></div>
<div class="text position" style="left: 89.25%;">1.43</div>
</div>
MyCode如下:
import bs4 as bs
import requests
def load_ticker_invest(ticker):
resp = requests.get('https://www.investopedia.com/markets/stocks/{}/#Financials'.format(ticker))
soup = bs.BeautifulSoup(resp.text, 'html.parser')
trend = soup.div.find_all('div', attrs={'class':'value'})
return trend
print (load_ticker_invest('aapl'))
我得到的结果是一个空白列表:
[]
我该如何解决这个问题?
【问题讨论】:
-
我现在无法检查(在我的手机上),但你确定这个 HTML 实际上是在 HTML 源代码中,还是从一些使用 Javascript 的 API 中提取的?如果是后者,那么您无法通过抓取获得它,而必须直接使用 API(这通常更容易,假设它们允许公共访问)。
-
我刚刚在我的笔记本电脑上检查过——在查看源代码后搜索“marker-position”没有任何结果,即使像你一样我可以通过检查看到该 HTML。所以正如我所说,它必须在客户端动态生成。至少他们的一个缩小的 JS 文件中有一堆 Ajax 调用,不幸的是,其中很多都被混淆了,所以我还没有找到你正在追踪的特定数据来自哪里的 URL。
-
它不在 HTML 源代码中并且认为它是从 API 中提取的,你能告诉我如何访问 API 吗?
-
恐怕我不知道,这不是我使用过的网站,我对交易或投资一无所知 :) 我认为没有比挖掘网站的 javascript 代码更好的方法了并试图找出它是从哪个 URL 派生的——但这不是一件容易的事。
标签: python web-scraping beautifulsoup