爬取财务报表通常涉及以下步骤:
准备工作
确保安装了`requests`和`lxml`库,可以使用`pip install requests lxml`命令进行安装。
创建数据抓取器
创建一个名为`DataScraper`的类,用于封装数据抓取相关的方法,如获取报表数据、解析并提取表头信息、将数据写入CSV文件。
分析网页结构
使用浏览器的开发者工具观察网页,特别是网络标签页中的XHR请求,找到报表数据的请求URL。
编写爬虫脚本
使用`requests`库发送HTTP请求,获取报表数据。
使用`lxml`库解析HTML内容,提取所需数据。
可以使用`pandas`库将数据保存到CSV文件或其他格式。
处理分页和动态加载
如果报表有多页,需要编写分页逻辑,模拟点击下一页按钮。
对于动态加载的内容,可以使用`selenium`库模拟浏览器操作。
注意事项
遵守网站的`robots.txt`文件规定,尊重网站的爬取规则。
注意处理可能的反爬虫机制,如设置合适的请求头、使用代理IP等。
爬取完成后,检查数据内容是否符合预期,并进行必要的数据清洗。
import requests
from lxml import html
import pandas as pd
class DataScraper:
def __init__(self, base_url):
self.base_url = base_url
def fetch_data(self, company_code, year, report_period):
url = f"{self.base_url}/{company_code}/{year}/{report_period}"
response = requests.get(url)
tree = html.fromstring(response.content)
解析数据,提取所需字段
示例:提取公司名称、股票代码、年报全称、下载链接等
company_name = tree.xpath('//div[@]/text()')
stock_code = tree.xpath('//div[@]/text()')
annual_report_name = tree.xpath('//div[@]/text()')
download_link = tree.xpath('//div[@]/a/@href')
return {
"company_name": company_name,
"stock_code": stock_code,
"annual_report_name": annual_report_name,
"download_link": download_link
}
def save_to_csv(self, data, file_path):
df = pd.DataFrame([data])
df.to_csv(file_path, index=False)
示例使用
scraper = DataScraper("http://example.com/financial-reports")
data = scraper.fetch_data("000001", 2020, "annual")
scraper.save_to_csv(data, "financial_reports.csv")
请根据实际的网站结构和报表数据格式调整代码中的XPath选择器和数据处理逻辑。如果需要处理更复杂的页面交互或动态内容加载,可能需要使用`selenium`库。