首页 > 解决方案 > 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())

标签: pythonbeautifulsoup

解决方案


页面是使用 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&section=Income+Statement'

使用与上面相同的代码,但使用另一个 url,将为您提供 json 格式的损益表。

你可以从那里拿走它。到处搜索 - 关于这个主题有很多可用的信息。祝你好运。


推荐阅读