1. 程式人生 > >金融行業也能用到Python?這就是Python之所以能這麼火的原因吧!

金融行業也能用到Python?這就是Python之所以能這麼火的原因吧!

此處介紹資料夾,下面,我們對這6大模組進行詳細的介紹。

一、URL下載器

URL下載器包含兩步,首先下載網站左側導航欄的URL,然後通過導航欄的URL獲取每個子欄目包含的連結列表。

下面是獲取左側導航欄所有連結並生成導航檔案的程式碼

# -*- coding: utf-8 -*-
import pandas as pd
import urllib.request
from bs4 import BeautifulSoup
import re
import os
class get_catalog(object):
 '''生成和操作導航檔案'''
 def save_catalog(self):
 '''獲得證券之星左側自導航的內容和網址並儲存'''
#獲取網頁內容 url = 'http://quote.stockstar.com' request =urllib.request.Request(url = url) response = urllib.request.urlopen(request) content = response.read().decode('gbk') #擷取左側導航內容 soup = BeautifulSoup(content,"lxml") soup = BeautifulSoup(str(soup.find_all('div',class_ = "subMenuBox")),"lxml") #初始化一級子目錄和二級子目錄的資料框
catalog1 = pd.DataFrame(columns = ["cata1","cata2","url2"]) catalog2 = pd.DataFrame(columns = ["url2","cata3","url3"]) #整理目錄內容和其對應的連結 index1 = 0;index2 = 0 for content1 in soup.find_all('div',class_ = re.compile("list submenu?")): cata1 = re.findall('>(.*?)<',str(content1.h3.a)) for content2 in
content1.find_all('dl'): cata2 = re.findall('>(.*?)<',str(content2.dt.a).replace('\r\n','')) url2 = url + content2.dt.a['href'] catalog1.loc[index1] = {'cata1':cata1[0],'cata2':cata2[0].split()[0],'url2':url2} index1 += 1 for content3 in content2.find_all('li'): cata3 = re.findall('·(.*?)<',str(content3.a)) url3 = url + content3.a['href'] catalog2.loc[index2] = {'url2':url2,'cata3':cata3[0],'url3':url3} index2 += 1 #對一級子目錄表和二級子目錄表做表連線並儲存 catalog = pd.merge(catalog1,catalog2,on='url2',how='left') catalog.to_csv('catalog.csv') def load_catalog(self): '''判斷導航檔案是否存在並載入''' if 'catalog.csv' not in os.listdir(): self.save_catalog() print('網址導航檔案已生成') else: print('網址導航檔案已存在') catalog = pd.read_csv('catalog.csv',encoding='gbk',usecols=range(1,6)) print("網址導航檔案已載入") return(catalog) def index_info(self,catalog,index): '''建立每行的行名,作為存入資料庫的表名,並獲取每行終端的網址連結''' if str(catalog.loc[index]['cata3'])=='nan': table_name = catalog.loc[index]['cata1'] + '_' + catalog.loc[index]['cata2'] url = catalog.loc[index]['url2'] else: #+、()等符號不能作為資料庫表名,得替換或剔除 if '+' in catalog.loc[index]['cata3']: cata3 = catalog.loc[index]['cata3'].replace('+','') table_name = catalog.loc[index]['cata1'] + '_' + catalog.loc[index]['cata2'] + '_' + cata3 elif '(' in catalog.loc[index]['cata3']: cata3 = catalog.loc[index]['cata3'].replace('(','').replace(')','') table_name = catalog.loc[index]['cata1'] + '_' + catalog.loc[index]['cata2'] + '_' + cata3 else: table_name = catalog.loc[index]['cata1'] + '_' + catalog.loc[index]['cata2'] + '_' + catalog.loc[index]['cata3'] url = catalog.loc[index]['url3'] return(table_name,url) get_catalog

下面是獲取每個子欄目所有連結的程式碼

import pandas as pd
from selenium import webdriver
import time
import re
import math
from get_catalog import get_catalog
class get_urls(object):
 '''獲取每個欄目的連結列表'''
 def __init__(self,browser,url):
 self.browser = browser #瀏覽器物件
 self.url = url #待爬取的URL
 
 def get_browser(self):
 '''連線URL'''
 state = 0
 test = 0
 while state == 0 and test < 5:
 try:
 self.browser.get(self.url)
 state = 1
 print('成功連線 %s'%self.url)
 except:
 test += 1

 def get_element(self):
 '''獲取翻頁相關按鈕的連結列表'''
 self.get_browser()
 element_list=[]
 for i in range(1,8):
 try: 
 element = self.browser.find_element_by_xpath('//*[@id="divPageControl1"]/a[%d]'%i).get_attribute('href')
 element_list.append(element)
 except:
 time.sleep(0.2)
 return(element_list)

 def get_urllist(self):
 '''通過翻頁相關按鈕生成有效的頁碼連結列表'''
 element_list = self.get_element()
 if len(element_list)<=1:
 urls = [self.url]
 else:
 try:
 max_number = re.search('_(\d*)\.',element_list[len(element_list)-3])
 begin = max_number.start() + 1
 end = max_number.end() - 1
 int_max_number = int(element_list[len(element_list)-3][begin:end])
 urls = []
 for i in range(1,int_max_number + 1):
 url = element_list[len(element_list)-3][:begin] + str(i) + element_list[len(element_list)-3][end:]
 urls.append(url)
 except:
 urls = [self.url]
 return(urls)

get_urls
# coding:utf - 8
class UrlManager(object):
 '''URL管理器'''
 def __init__(self):
 self.new_urls = set() #未爬取URL集合
 self.old_urls = set() #已爬取URL
 def has_new_url(self):
 '''判斷是否有未爬取的URL'''
 return(self.new_url_size()!=0)
 def get_new_url(self):
 '''獲取一個未爬取的URL'''
 new_url = self.new_urls.pop()
 self.old_urls.add(new_url)
 return(new_url)
 def add_new_url(self,url):
 '''將新的URL新增到未爬取的URL集合中'''
 if url is None:
 return
 if url not in self.new_urls and url not in self.old_urls:
 self.new_urls.add(url)
 def add_new_urls(self,urls):
 '''將新的URL列表新增到未爬取的URL集合中'''
 if urls is None or len(urls)==0:
 return
 for url in urls:
 self.add_new_url(url)
 def new_url_size(self):
 '''獲取為爬取URL集合的大小'''
 return(len(self.new_urls))

UrlManager

三、HTML下載器

HTML下載器用來下載網頁,這時候需要注意網頁的編碼,已保證下載的網頁沒有亂碼。

獲取網頁內容時可能會遇到IP被封的情況,所以我們得爬取一個代理IP池,供HTML下載器使用。

下面是獲取代理IP池的程式碼

import urllib.request
import re
import time

            
           

相關推薦

金融行業Python就是Python之所以這麼原因

此處介紹資料夾,下面,我們對這6大模組進行詳細的介紹。一、URL下載器URL下載器包含兩步,首先下載網站左側導航欄的URL,然後通過導航欄的URL獲取每個子欄目包含的連結列表。下面是獲取左側導航欄所有連結並生成導航檔案的程式碼# -*- coding: utf-8 -*- i

matlab矩陣操作不要for迴圈

1.MATLAB儘量少用for迴圈來操作矩陣,多用本身的矩陣操作函式 比如,想將矩陣的第三列通過第二列計算得到,以下兩種方式得到的結果一致,但不用for更簡潔。 a = 6; feature_labelnum(:,3) = a * sqrt(feature_labelnum(:,2));

現在有哪些梯子軟體還?知乎網友推薦國外最好的Top 3

現在有哪些梯子軟體還能用?自從2014年開始我們就無法訪問Google、Youtube等一些國外網站了,但是作為一名典型的程式設計師,或者在外貿公司裡上班的童鞋,經常需要查一些資料或者用一些國外網站的工具,之前也分享過一些翻牆的辦法,現在好多也都已經失效了。今天分享一下最新可

兩年Java,你憑什麼要15k?程式設計師:嫉妒了?白菜價好

昨天小編看到一位網友寫了一篇短文,結合網友們的評論,還是還挺有意思的。所以拿來和大家分享下:兩年Java,你憑什麼問公司要15k?憑學歷?還是憑長相?Java的基礎你確定你都滾瓜爛熟了嗎?資料結構你確定你都會了嗎?前端程式碼你確定你上手就能寫了嗎?半個小時內搭好一套簡易的SS

SQL Server 2008 機器名連線,不IP地址連線問題 的一個解決方法

     一開始: telnet IP 1433 連線失敗      接著我在伺服器端 找到      Microsoft SQL Server 2008 -->配置工具--> SQL Server 配置管理器      然後在右鍵點選SQL Server

我想沒有哪篇文章比我python入門更完整更系統更全面了

模塊 標記 wordcloud 聊天 演示 創建 star 推薦 pillow 隨著人工智能、大數據的時代到來,學習Python的必要性已經顯得不言而喻。我經常逛youtube,發現不僅僅是以編程為職業的程序員,證券交易人員,生物老師,高級秘書......甚至許多自由撰稿人

+ 拼接字串? 這次我要吊打面試官

好久沒維護《吊打面試官》系列了,今天再來一篇,這次真的要吊打了,哈哈!(看往期吊打系列請在後臺回覆:吊打,我會陸續更新……) 我們做 Java 程式設計師以來,不管是工作當中,還是面試過程中,都知道:字串拼接不能用 String,要用 StringBuilder 或者是 StringBuffer,以至於它們都

知識匯總都在裏了,趕緊點開看看

htm blog bnf web前端 term 如果 .net 註意 rip 微信公眾號:Web前端精髓 Web前端技術由html、css和JavaScript三大部分構成,是一個龐大而復雜的技術體系,其復雜程度不低於任何一門後端語言。而我們在學習它的時候往往是

使用python建立自己的第一個神經網路模型

神經網路(NN),也被稱為人工神經網路(ANN),是機器學習領域中學習演算法的子集,大體上借鑑了生物神經網路的概念。目前,神經網路在計算機視覺、自然語言處理等領域應用廣泛。德國資深機器學習專家Andrey Bulezyuk說到,“神經網路正在徹底改變機器學習,因為它們能夠有效

招,冷淡的店鋪變火爆

傳統行業 ngx www. 傳統 其它 聯網 小店 移動互聯 是你 一家在激烈競爭中由盛轉衰的壽司創業店,如何借助移動互聯網的強大連接能力,通過簡單的一招,在短短4個月內就吸粉數萬,成功成為潮男潮女排長隊購買的商圈網紅店?隨著互聯網的爆發,其對實體經濟中的很多行業帶來了致命

垃圾Python遠端開關機,打死我不用,哇,遠端開關機真好

隨著天氣的變冷,在有暖呼呼的暖寶寶熱手的時候,小夥伴們還願意用自己溫暖的小手去摸冷冰冰的滑鼠嗎?今天我就給大家推薦個Python遠端開關機方法,當然有些小夥伴會說這垃圾Python遠端開關機不就能裝個逼嘛,有什麼了不起的,小編最初也是這麼想的,直到用了之後,哇!真香!   Pyth

一行Python程式碼可以下載任意網站視訊,零基礎小白輕鬆學會

前言 對於Python爬蟲很多人都不陌生,可以用它來批量下載文字、圖片、視訊等,其中涉及的知識點也是比較多的,但是Python中有一個方法,一行程式碼就能爬取任意網站上面的視訊,只要你安裝了Python環境就可以,哪怕是小白也能輕鬆學會。 You-Get You-Get是一個基於 Pyt

30種祕密武器, 你成為區塊鏈高手

古羅馬,“乘法”是隻有御用數學家才能理解的深奧概念——而當阿拉伯數字出現,孩童亦能於紙上演算。 新工具不僅提升效率,還可為前人所不能。作為活躍開發領域之一,區塊鏈新技術、工具、平臺、語言與框架層出不窮,然而面對紛繁複雜的選擇,開發者難以面面俱到。《區塊鏈大本營 | 新工具》欄

Python爬了一半的資料出BUG了,等等一半資料還

相信你一定有過這樣的經歷:大晚上好不容易寫好一個爬蟲,添加了種種可能出現的異常處理,測試了很多遍都沒有問題,點選了 RUN 開始正式執行 。 第二天早上一睜眼就滿心歡喜地衝到電腦前,結果發現爬蟲半夜斷了,你氣得想要砸電腦,然後你看了一下 MongoDB 中爬了一半的資料,在想是刪掉重新爬,還是保留下來接著爬

Python爬了一半的數據出BUG了,等等一半數據還

caption 分享 怎麽辦 斷點續傳 怎麽 response content .get upsert 相信你一定有過這樣的經歷:大晚上好不容易寫好一個爬蟲,添加了種種可能出現的異常處理,測試了很多遍都沒有問題,點擊了 RUN 開始正式運行 。 第二天早上一睜眼就滿心歡喜地

為何區塊鏈成為金融行業的香餑餑?只因5個關鍵因素

比特 替代 時間 自動化 ipp 每年 受限 轉儲 user 區塊鏈,過去雖然充滿炒作,但現在,已經成為金融行業的香餑餑。下面讓我們看看,區塊鏈能成為金融行業“好幫手”的5個關鍵因素。1、即時結算  一筆交易可以在幾秒鐘內結算完畢,而當前的金融體系有時可能需要長達一周的時間

Python爬蟲手機進行抓包?沒錯這個技巧我只告訴你

今天要說說怎麼在我們的手機抓包 我們知道了 HTTP 的請求方式 以及在 Chrome 中摸清了一些套路 但是 除了對資料進行解析

什麼庫寫 Python 命令列程式?看一篇夠了

作者:HelloGitHub-Prodesire HelloGitHub 的《講解開源專案》系列,專案地址:https://github.com/HelloGitHub-Team/Article 一、前言 在近半年的 Python 命令列旅程中,我們依次學習了 argparse、docopt、cl

IPHONE6 近來1年不會開放NFC的API給開發人員,就是僅僅來做支持了如今

company its put ech tran repo article -s cati IPHONE6 近來1還不會開放NFC的API給開發人員,也就是僅僅能用來做支持了如今,可是能夠肯定的是,以後肯定會放發出來的。就像指紋傳感器一樣,如今也開放出來了。前

繼承於QObject的類一定不使用信號槽?(一個代理類進行發射行了)

-c 問題 ges object 編譯過程 報錯 第三方庫 nal 解決 首先不能繼承QObject的情況在開發中遇到得並不多,筆者在一年多的Qt項目開發中只遇到兩三次。而且都是因為引進了第三方庫導致編譯過程中報錯。 要想解決這個問題其實不難,因為筆者遇到的問題都是想定義