python获取基金数据,爬虫爬取基金数据
本文主要介绍python爬虫获取资金的基本信息。文章基于上一篇文章的内容和Python的相关资料,可以参考一下朋友。
00-1010 1前言2如何抓取基本信息3 xpath获取数据4 bs4获取数据5显示最终结果
目录
上一篇文章Python爬虫获取资金列表。我们已经讲过如何从基金网站获取基金的列表信息。这一招延续上一篇,继续分享如何抢基金展示的基本信息。展示的内容包括基金的基本信息,如基金公司、基金经理、创建时间、跟踪标的、持仓明细等信息。
1 前言
#这里我直接贴地址。这个地址是从基金列表跳转过来的,然后点击基金简介就可以得到。
http://fundf10.eastmoney.com/jbgk_005585.html
基金的详情页面和基金的基本信息页面:
我们现在要做的是如何捕捉基金的基本概况数据。遗憾的是,这次的工作并不像上次那样可以通过接口调用直接获取结果,而是需要我们解析页面html,通过获取元素来解析我们需要的信息。这时,我们需要使用xpath来获取所需的元素。
2 如何抓取基本信息
为了解析html数据,我们通常使用xpath来获取页面的数据。在这里,我们也更喜欢这个xpath,那么如何使用呢?首先,你需要安装相关的类库。
#安装lxml
pip安装lxml
用浏览器打开,然后点击【检查】使用所选基金的基本信息,然后如图选择【复制XPath】即可得到数据所在的表格位置。
从lxml导入etree
# .
#解析返回的数据结果以形成html文档
html=etree。HTML(响应_正文)
result=etree.tostring(html,pretty_print=True)
#打印获得的结果。
打印(结果)
#抓住数据的位置。这个位置的数据由浏览器的xpath定位决定
table _ body=html . XPath(//*[@ id= body div ]/div[8]/div[3]/div[2]/div[3]/div/div[1]/table/tbody )
#打印数据结果
打印(表体)
按常理,这里应该可以得到基金的基本新结果,但没想到,算错了,得到的结果竟然是空的,令人费解。我认为api不够熟练,无法正确获取。直到我仔细研究了返回的页面信息,才发现根本没有tbody元素,这可能是浏览器渲染的结果。也就是说,通过xpath定位元素位置来获取数据可能行不通。事实上,这是真的。基金基本信息的数据放在页面的脚本页签里,所以这篇文章真的不行。也许xpath与Selenium结合使用来进行页面自动化测试。有机会我们再研究一下这个。
3 xpath 获取数据
由于直接获取页面元素的方式行不通,我们只需要解析返回的页面来获取数据。在java语言中,我们可以使用joup来解析和获取数据,但是python是如何操作的呢?这需要通过使用bs4来解决。安装方法如下:3360
# BS4简称Python,是对解析html非常有用的第三方类库。
pip安装beautifulsoup4
主要的解析方法如下图所示。接下来,我们使用lxml解析html数据。如果我们使用html5lib,我们需要先安装它,然后才能使用pip安装html5l。
ib。
解析数据的思路是这样的,我们看到浏览器返回的结果是包含table>tr>td
这样的结构,我们先获取到基金对应信息的table
,然后获取到table
中的td
,因为这个表格展示内容是固定的,我们选取对应的数据下标即可获取对应的数据。
# 解析返回的报文soup = BeautifulSoup(resp_body, lxml)
# 获取数据的table标签所有数据
body_list = soup.find_all("table")
# 基金信息对应的是第二个
basic_info = body_list[1]
# 打印结果并循环输出td的内容
print(basic_info)
td_list = basic_info.find_all("td")
for node in td_list:
print(node.get_text())
这里涉及两个方法find_all
和get_text
,第一个是元素选择器,可以根据标签class进行搜索,第二个是获取元素中的内容。
5 最终结果展现
经常不断的尝试,最终的最简版代码如下所示:
from lxml import etreeimport requests
from prettytable import PrettyTable
import datetime
# 使用BeautifulSoup解析网页
from bs4 import BeautifulSoup
# 获取基金基本信息
def query_fund_basic(code):
# http://fundf10.eastmoney.com/jbgk_005585.html
response = requests.get("http://fundf10.eastmoney.com/jbgk_{}.html".format(code))
resp_body = response.text
soup = BeautifulSoup(resp_body, lxml)
body_list = soup.find_all("table")
basic_info = body_list[1]
# print(basic_info)
tr_list = basic_info.find_all("td")
# 暂存一下列表
tmp_list = []
tmp_list.append(tr_list[2].get_text().replace("(前端)", ""))
tmp_list.append(tr_list[1].get_text())
tmp_list.append(tr_list[8].get_text())
tmp_list.append(tr_list[10].get_text())
tmp_list.append(tr_list[5].get_text().split("/")[0].strip())
tmp_list.append(tr_list[5].get_text().split("/")[1].strip().replace("亿份", ""))
tmp_list.append(tr_list[3].get_text())
tmp_list.append(tr_list[18].get_text())
tmp_list.append(tr_list[19].get_text())
return tmp_list
if __name__ == __main__:
print("start analyze !")
code_list = ["005585", "000362"]
# 需要关注的基本信息如右所示 基金代码 基金名称 基金公司 基金经理 创建时间
# 基金份额 基金类型 业绩基准 跟踪标的
head_list = ["code", "name", "company", "manager", "create_time",
"fund_share", "fund_type", "comp_basic", "idx_target"]
# 生成表格对象
tb = PrettyTable()
tb.field_names = head_list # 定义表头
for node in code_list:
tb.add_row(query_fund_basic(node))
# 输出表格
print(tb)
reslt = str(tb).replace("+", "")
print(reslt)
最终打印的结果如下所示,感觉很期待:
接来下我们会利用数据库进行存储基金的基本信息,然后基于此才能抓取基金的变动信息进行分析,距离激动人心的时刻已经很近了。
到此这篇关于Python爬虫获取基金基本信息的文章就介绍到这了,更多相关Python获取信息内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。