首页 > 解决方案 > 从网站抓取特定列时为空数据框

问题描述

我想尝试在 CNBC Nasdaq 100 网站特别是 Adob​​e 股票中抓取一些特定列(公司详细信息列),下面是我的代码片段

# Importing Libraries
from bs4 import BeautifulSoup
import requests
import csv
import pandas as pd

def get_company_info(url):
    original_url = url
    key = {}
    l = []

    page_response = requests.get(url, timeout=240)
    page_content = BeautifulSoup(page_response.content, "html.parser")

    name = page_content.find('div',{"class":"quote-section-header large-header"}).find("span",{"class":"symbol"}).text
    description = page_content.find_all('div',{"class":"moduleBox"})

    for items in description:
        for i in range(len(items.find_all("tr"))-1):
            # Gather data
            key["stock_desc"] = items.find_all("td", {"class":"desc"})[i].find('div',attrs={'id':'descLong'}).text
            shares = items.find_all("td").find("table",attrs={"id":"shares"})
            for rest_of_items in shares:
                for i in range(len(items.find_all("tr"))-1):
                    key["stock_outstanding-shares"] = items.find_all("td", {"class":"bold aRit"})[i].text
                    key["stock_ownership"] = items.find_all("td", {"class":"bold aRit"})[i].text
                    key["stock_market_cap"] = items.find_all("td", {"class":"bold aRit"})[i].text
                    key["stock_lastSplit"] = items.find_all("td", {"class":"bold aRit"})[i].text
                    # Print ("")
                    l.append(key)         

    key['name'] = name
    df = pd.DataFrame(l)
    print(df)

    return key, df

get_company_info("https://www.cnbc.com/quotes/?symbol=ADBE&tab=profile")

所以,我很想在数据框中得到结果,以便我可以更改为 CSV 文件,但我的代码一直显示空数据框结果,下面是显示的错误 错误空数据框

我想要的结果是这样的 期望的输出

标签: pythonweb-scrapingbeautifulsoup

解决方案


您要查找的信息在您请求的 url 中不可用。这是因为信息是由页面使用 JavaScript 获取的。这反过来又请求提供数据的不同 URL。

示例代码

from bs4 import BeautifulSoup
import requests

page=requests.get("https://apps.cnbc.com/view.asp?symbol=ADBE.O&uid=stocks/summary")

soup = BeautifulSoup(page.content, 'html.parser')

Name=soup.find("h5",id="companyName").text
stock_desc= soup.find("div",id="descLong").text

table=soup.find("table",id="shares")
details=table.find_all("td", class_="bold aRit")
stock_outstanding_shares= details[0].text
stock_ownership= details[1].text
stock_market_cap= details[2].text
stock_lastSplit= details[3].text

您可以创建数据框并导出到 csv。


推荐阅读