python - BeautifulSoup:合并表并导出到 .csv
问题描述
我一直在尝试从不同的 url 下载数据,然后将其保存到 csv 文件中。
这个想法是从以下网址提取年度/季度数据: https ://www.marketwatch.com/investing/stock/MMM/financials/
年度的:
https://www.marketwatch.com/investing/stock/MMM/financials/cash-flow
季度:
https://www.marketwatch.com/investing/stock/MMM/financials/cash-flow/quarter
使用以下代码:
import requests
import pandas as pd
urls = ['https://www.marketwatch.com/investing/stock/AAPL/financials/cash-flow',
'https://www.marketwatch.com/investing/stock/MMM/financials/cash-flow']
def main(urls):
with requests.Session() as req:
goal = []
for url in urls:
r = req.get(url)
df = pd.read_html(
r.content, match="Cash Dividends Paid - Total")[0].iloc[[0], 0:3]
goal.append(df)
new = pd.concat(goal)
print(new)
main(urls)
我可以提取所需的信息(在示例中,2015 年和2016 年为2 家公司),但仅适用于 1 组(季度或年度)
我想合并表格年度 + 季度
为此,我在这段代码中认为:
import requests
import pandas as pd
from urllib.request import urlopen
from bs4 import BeautifulSoup
import csv
html = urlopen('https://www.marketwatch.com/investing/stock/MMM/financials/')
soup = BeautifulSoup(html, 'html.parser')
ids = ['cash-flow','cash-flow/quarter']
with open("news.csv", "w", newline="", encoding='utf-8') as f_news:
csv_news = csv.writer(f_news)
csv_news.writerow(["A"])
for id in ids:
a = soup.find("Cash Dividends Paid - Total", id=id)
csv_news.writerow([a.text])
但是在收到以下错误时:
解决方案
BeautifulSoup 元素没有属性text
,而是方法get_text()
csv_news.writerow([a.get_text()])
https://www.crummy.com/software/BeautifulSoup/bs4/doc/#get-text
推荐阅读
- elixir - 如何监督长生不老药中的方法
- reactjs - 收到错误类型错误:这是未定义的
- javascript - 如何在 Vue 类组件中使用 date-fns?
- node.js - 测试函数时替换变量的值
- office-js - 教程中的 Microsoft Office 加载项无响应
- magento2.2 - MISCONF Redis 配置为保存 RDB 快照,但目前无法持久保存在磁盘上。可能修改数据集的命令被禁用
- php - 如何在 FormData 对象中捕获返回值
- algorithm - 如何找到两列之间差异的绝对值之和?
- kubernetes - Helm 更改部署工件的名称
- java - Spring AOP切面不拦截注解的方法