python - Python Beautifulsoup - 从“检查”中刮取元素
问题描述
我正在尝试使用 BeautifulSoup从stockrow.com获取一些数据。
然而,检查和查看源代码之间似乎存在一些差异(我使用 chrome,但我认为这对 Pyton 来说不是问题)。
这会导致一些麻烦,因为源代码本身不显示任何html 标记,例如h1
. 但是,当我使用检查工具时,它们会出现。
我试图刮掉的部分(除其他外) - 这是使用检查工具显示的:
<h1>Teva Pharmaceutical Industries Ltd<small>(TEVA)</small></h1>
我当前的代码,打印一个空列表:
import bs4 as bs
import urllib.request
class Stock:
stockrow_url = "https://stockrow.com"
url_suffix = "/financials/{}/annual"
def __init__(self, ticker : str, stock_url=stockrow_url, url_suffix = url_suffix):
# Stock ticker
self.ticker = ticker.upper()
# URLs for financial statements related to the ticker
self.stock_url = stock_url + "/{}".format(self.ticker)
sauce = urllib.request.urlopen(self.stock_url).read()
soup = bs.BeautifulSoup(sauce, 'html.parser').h1
print(soup)
self.income_url = self.stock_url + url_suffix.format("income")
self.balance_sheet_url = self.stock_url + url_suffix.format("balance")
self.cash_flow_url = self.stock_url + url_suffix.format("cashflow")
teva = Stock("teva")
print(teva.get_income_statement())
解决方案
页面是使用 jscript 动态生成的,beautifulsoup 无法处理。您可以使用 selenium 等或通过查找 API 调用来捕获信息。
在这种情况下,您可以使用 TEVA 获取背景信息
import json
import requests
hdr = {'User-Agent':'Mozilla/5.0'}
url = "https://stockrow.com/api/companies/TEVA.json?ticker=TEVA"
response = requests.get(url, headers=hdr)
info = json.loads(response.text)
info
同样,损益表也隐藏在这里:
url = 'https://stockrow.com/api/companies/TEVA/financials.json?ticker=TEVA&dimension=MRY§ion=Income+Statement'
使用与上面相同的代码,但使用另一个 url,将为您提供 json 格式的损益表。
你可以从那里拿走它。到处搜索 - 关于这个主题有很多可用的信息。祝你好运。
推荐阅读
- keras - LSTM 文本分类精度差 Keras
- asp.net-core - Asp.Net Core 没有注册类型的服务
- linux - 如何避免定义的 seconds() 方法和 ptime seconds(default) 方法的冲突?
- jquery - jquery bootstrap typeahead 无法绑定事件
- html - 为什么我的 Grid 元素的高度计算不正确?
- ios - RxSwift - 订阅行为(观察者:)
- ethereum - 以太坊私有网络 - 动态 genesis.json 分配
- android - 如何在购物应用中添加购物车功能?
- quickbooks - 从 c# 应用程序添加账单时如何在 QuickBooks 中添加帐户参考
- jsonschema - How to create an integer, json-schema, validation rule that validates an integer is not equal to 0(zero)?