摘要:目的通過爬取基金持倉信息,我們可以了解基金的資金流向,說白了,就是知道大型基金公司都買了什么股票,買了多少。也可以跟蹤一些知名的基金,看看他們都買了什么股票,從而跟買或者不買,估值便宜的股票,又有很多基金入場,很可能這家公司大家都非??春?,...
目的
通過爬取基金持倉信息,我們可以了解基金的資金流向,說白了,就是知道大型基金公司都買了什么股票,買了多少。也可以跟蹤一些知名的基金,看看他們都買了什么股票,從而跟買或者不買,估值便宜的股票,又有很多基金入場,很可能這家公司大家都非??春?,未來業(yè)績很可能增長,可能是一次比較好的投資機會;而有些股票,估值已經(jīng)很高了,里邊還有很多的基金公司,這就需要注意了,很可能基本面發(fā)生一點點惡化,或者達不到預(yù)期,基金公司可能就會大幅的拋售,導(dǎo)致股價大跌。
本文分上、下兩個部分。
第一部分,講解如何爬取數(shù)據(jù)并存儲到mysql數(shù)據(jù)庫。
第二部分,對爬取出來的數(shù)據(jù)進行可視化分析。
1分析要爬取的網(wǎng)頁數(shù)據(jù)
需要獲取所有的基金代碼
http://fund.eastmoney.comllfund.html
with open("test.html", "w", encoding="utf-8") as f: f.write(driver.page_source) time.sleep(1) file = open("test.html", "r", encoding="utf-8") soup = BeautifulSoup(file, "lxml") driver.quit() try: fund = soup.select("#bodydiv > div > div > div.basic-new > div.bs_jz > div.col-left > h4 > a")[0].get_text() scale = soup.select("#bodydiv > div > div.r_cont > div.basic-new > div.bs_gl > p > label > span")[2].get_text().strip().split()[0] table = soup.select("#cctable > div > div > table") trs = table[0].select("tbody > tr") for tr in trs: code = tr.select("td > a")[0].get_text() name = tr.select("td > a")[1].get_text() price = tr.select("td > span")[0].get_text() try: round(float(price), 2) except ValueError: price = 0 num = tr.select("td.tor")[3].get_text() market = float(num.replace(",", "")) * float(price) data = { "crawl_date": today, "code": code, "fund": fund.split(" (")[0], "scale": scale, "name": name, "price": round(float(price), 2), "num": round(float(num.replace(",", "")), 2), "market_value": round(market, 2) } data=pd.DataFrame([data]) insert_sql(data) except IndexError: info = { "url": url } print(info)
獲取所有的基金代碼,循環(huán)調(diào)用get_info
def get_code(url):
html = requests.get(url, headers=headers)
html.encoding = "gbk"
document = etree.HTML(html.text)
info = document.xpath("// *[ @ id = "code_content"] / div / ul / li / div / a[1] /text()")
i = 0
for fund in info:
str = fund.split(")")[0]
code = str.split("(")[1]
url = "http://fundf10.eastmoney.com/ccmx_%s.html" % code
get_info(url)
if __name__ == "__main__":
found_url = "http://fund.eastmoney.comllfund.html"
get_code(found_url)
好了,4段簡單的代碼就可以講天天基金網(wǎng)里的數(shù)據(jù)都爬取到數(shù)據(jù)庫里了。
下次給大家講解如何用爬到的數(shù)據(jù)做可視化分析。
謝謝關(guān)注