在本文中,我们将介绍如何使用Python编写一个简单的数据抓取器,用于爬取东方财富网上的各类财务报表数据。我们将利用requests
和lxml
库进行数据请求和解析,并将抓取到的数据保存到CSV文件中。
1. 准备工作
首先,确保你已经安装了以下Python库:
pip install requests
pip install lxml
2. 创建数据抓取器
我们将创建一个名为DataScraper
的类,用于封装所有数据抓取相关的方法。数据抓取器的主要功能包括:
- 获取报表数据
- 解析并提取表头信息
- 将数据写入CSV文件
2.1 初始化
在DataScraper
类的__init__
方法中,我们将初始化一些必要的属性,如报表类型、报表名称等。此外,我们还需要设置请求URL和请求头,以便稍后进行数据请求。
class DataScraper:
def __init__(self):
self.pagename_type = {
# ...
}
self.pagename_en = {
# ...
}
self.en_list = []
self.url = 'https://datacenter-web.eastmoney.com/api/data/v1/get'
self.headers = {
# ...
}
2.2 获取报表数据
我们定义一个名为get_table
的方法,用于向东方财富网发送请求并获取报表数据。传入页数作为参数,返回当前页的报表数据。
def get_table(self, page):
# ...
2.3 解析表头
在抓取数据之前,我们需要解析表头信息。我们创建一个名为get_header
的方法,传入一个包含所有英文表头的列表。该方法将请求报表页面,使用lxml
库解析HTML,并提取中文表头信息。
def get_header(self, all_en_list):
# ...
2.4 写入表头
接下来,我们创建一个名为write_header
的方法,用于将解析到的表头信息写入CSV文件。在该方法中,我们首先调用get_header
方法获取表头信息,然后使用csv.writer
将其写入CSV文件。
def write_header(self, table_data):
# ...
2.5 写入报表数据
定义一个名为write_table
的方法,用于将抓取到的报表数据逐行写入CSV文件。在该方法中,我们遍历抓取到的数据,并将每一行数据写入CSV文件。
def write_table(self, table_data):
# ...
2.6 获取时间列表
为了让用户选择爬取的报表时间,我们定义一个名为get_timeList
的方法。该方法将发送请求到东方财富网,解析并提取可选的时间列表。
def get_timeList(self):
# ...
3 使用数据抓取器
在创建好DataScraper类之后,我们可以使用以下代码来实例化它并爬取所需的报表数据:
if __name__ == '__main__':
scraper = DataScraper()
timeList = scraper.get_timeList()
for index, value in enumerate(timeList):
if (index + 1) % 5 == 0:
print(value)
else:
print(value, end=' ; ')
timePoint = str(input('\n请选择时间(可选项如上):'))
pagename