html股票數據代碼,股票數據的網站抓取(4.2)代碼優化

#coding=utf-8

from selenium import webdriver

import time

import os

import re

import sys

import threading

import Queue

import Tkinter as tk

from selenium.common.exceptions import NoSuchElementException

def myinit():

reload(sys)

sys.setdefaultencoding('utf8')

#獲取屏幕分辨率

def getscreeninfo():

#這個沒考慮多顯示器的問題

info={}

root = tk.Tk()

info['width_px'] = root.winfo_screenwidth()

info['height_px'] = root.winfo_screenheight()

info['width_mm'] = root.winfo_screenmmwidth()

info['height_mm'] = root.winfo_screenmmheight()

# 2.54 cm = in

info['width_in'] = info['width_mm'] / 25.4

info['height_in'] = info['height_mm'] / 25.4

info['width_dpi'] = info['width_px']/info['width_in']

info['height_dpi'] = info['height_px']/info['height_in']

return info

########################

#生成多個瀏覽器實例

def makebr(number):

brs=[]

for i in range(number):

br=webdriver.Firefox()

brs.append(br)

return brs

#設置所有瀏覽器實例大小

def setbrsize(brs,x,y):

for i in brs:

i.set_window_size(200,200)

#排列打開的瀏覽器

def layoutbrs(brs,x=0,y=0,dx=10,dy=10,mode=0,hang=0):

#mode 0,橫向, 1,縱向 2,矩形 3,對角線

#hang 0為盡量按正方形排列

screeninfo=getscreeninfo()

if(mode==0):

dy=0

elif(mode==1):

dx=0

if(mode!=2):

for i in brs:

i.set_window_position(x,y)

x=x+dx

y=y+dy

else:

#這個以后有空再弄

pass

#hang=math.ceil(math.sqrt(len(dbrs)))

#關閉所有瀏覽器

def closebr(brs):

for i in brs:

i.quit()

#######################

#獲得指定股票相關數據

def getinfo(mydriver,gourl):

title='//*[@id="name"]'

code='//*[@id="code"]'

hexinshujuxpath="/html/body/div[14]/div[1]/div[4]/div[1]"

restr=":".decode('utf8')

myre=re.compile(restr,re.I|re.M|re.S)

linetext=""

errorinfo=""

mydriver.get(gourl)

try:

gupiaoming=mydriver.find_element_by_xpath(title).text

gupiaocode=mydriver.find_element_by_xpath(code).text

hexinshuju=mydriver.find_element_by_class_name('pad5')

shujuhang=hexinshuju.find_elements_by_tag_name('tr')

for i in range(len(shujuhang)-2):

shujulie=shujuhang[i].find_elements_by_tag_name('td')

tmpshuju=myre.split(shujulie[0].text)

linetext=linetext+"~"+tmpshuju[1]

shuju=myre.split(shujuhang[8].text)

linetext=linetext+"~"+shuju[1]

tmpshuju=myre.split(shujuhang[9].text)

linetext=linetext+"~"+tmpshuju[1]

linetext="%s~%s%s"%(gupiaoming,gupiaocode,linetext)

#print "數據:",linetext

except NoSuchElementException,e:

#print "不是股票"

pass

except Exception:

errorinfo= "非預期錯誤"+gourl

print errorinfo

finally:

return linetext,errorinfo

#獲得所有股票鏈接

def geturls(br):

#通過link對象獲得鏈接地址的text文本

def getlinkurl(linklist):

my=[]

for x in linklist:

my.append(x.get_attribute('href'))

return my

sz=[]

sh=[]

br.get("http://quote.eastmoney.com/stocklist.html")

shxpath="/html/body/div[9]/div[2]/div/ul[1]"

szxpath="/html/body/div[9]/div[2]/div/ul[2]"

shgupiao=br.find_element_by_xpath(shxpath)

szgupiao=br.find_element_by_xpath(szxpath)

shgupiaolist=shgupiao.find_elements_by_tag_name('a')

szgupiaolist=szgupiao.find_elements_by_tag_name('a')

sh=getlinkurl(shgupiaolist)

sz=getlinkurl(szgupiaolist)

return sh,sz

#多線程執行用的函數

def thread_getinfo(br,jobslink_queue,jieguo_queue,errorinfo_queue):

while True:

try:

#獲得隊列里的地址

url=jobslink_queue.get(False) #False =Don't wait

except Queue.Empty:

print "完成退出"

#br.quit()

return

#print url

if(url!=None):

(linetext,errorinfo)=getinfo(br,url)

if(linetext!=""):

jieguo_queue.put(linetext)

if(errorinfo!=""):

errorinfo_queue.put(errorinfo)

#######################

#多線程控制函數

def saveinfoabc(info_filename,error_filename,urllist):

jobslink=Queue.Queue(0)

jieguo=Queue.Queue(0)

errorsinfo=Queue.Queue(0)

for x in urllist[200:250]:#為測試方便這里只取了50,如果要全下載,取消[]就好

jobslink.put(x)

#啟動線程

for x in range(THREAD_NUM):

t=threading.Thread(target=thread_getinfo,args=(brs[x],jobslink,jieguo,errorsinfo))

t.start()

f=open(info_filename,'w')

e=open(error_filename,'w')

mycount=0

while (threading.activeCount()>1) or (not jobslink.empty()):

while jieguo.qsize()>0 or errorsinfo.qsize()>0:

if(jieguo.qsize()>0):

jieguotxt=jieguo.get()

f.write(jieguotxt+"\n")

if(errorsinfo.qsize()>0):

error=errorsinfo.get()

e.write(error+"\n")

mycount=mycount+1

if(mycount%100)==0:

print "%d: 活動線程:%d,剩余連接數:%d,結果剩余條數:%d,錯誤剩余條數:%d"%(mycount,threading.activeCount(),jobslink.qsize(),jieguo.qsize(),errorsinfo.qsize())

time.sleep(0.01)

e.close()

f.close()

print "數據下載完成"

######################

myinit()

br=webdriver.Firefox()

print "獲得所有鏈接地址"

(sh,sz)=geturls(br)

br.quit()

#info_filename='shinfo.txt'

#error_filename='sherror.txt'

THREAD_NUM=10

brs=makebr(THREAD_NUM)

setbrsize(brs,200,300)

layoutbrs(brs ,0,0,80,80,0)

saveinfoabc('shinfo.txt','sherror.txt',sh)

saveinfoabc('szinfo.txt','szerror.txt',sz)

closebr(brs)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456963.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456963.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456963.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

對象屬性和類屬性

class Person(object):#這里的屬性實際上屬于類屬性(用類名調用)name "person"def __init__(self,name):#對象屬性self.name nameprint(Person.name) per Person("tom") #對象屬性的優先級高于類屬性 print(per.name) #動態的給對…

commons-fileupload、smartUpload和commons-net-ftp

1.本地上傳 在許多Web站點應用中都需要為用戶提供通過瀏覽器上傳文檔資料的功能,例如,上傳個人相片、共享資料等。在DRP中,就有這個一個功能,需要將對應的物料圖片上傳并顯示。對于上傳功能,其實在瀏覽器端提供了很好的…

11月14號站立會議(從即日14號起到24號截至為final階段工作期)

小組名稱:飛天小女警 項目名稱:禮物挑選小工具 小組成員:沈柏杉(組長)、程媛媛、楊鈺寧、譚力銘 代碼地址:HTTPS:https://git.coding.net/shenbaishan/GIFT.git SSH:gitgit.coding.net:shenbais…

初學大數據之Pycharm常用的快捷鍵總結

pycharm快捷鍵及一些常用設置,有需要的朋友可以參考下。 加粗的都是個人認為比較常用的快捷鍵 AltEnter 自動添加包 Ctrlt SVN更新 Ctrlk SVN提交 Ctrl / 注釋(取消注釋)選擇的行 CtrlShiftF 高級查找 CtrlEnter 補全 Shift Enter 開始新行 TAB ShiftTAB…

搖一搖 聲音 html5,HTML5搖一搖以及音頻播放問題優化總結

前言感想:不放過任何一個WARNING、ERROR或者不夠好的體驗點,持續不斷優化,精益求精,我們就能夠得到提高。1. 搖一搖不夠靈敏、搖動很多次沒有響應的問題、原來搖一搖代碼是從網絡Copy的,活動上線后,發現部分…

調用API發送短信python

import http.client import urllibhost "106.ihuyi.com" sms_send_uri "/webservice/sms.php?methodSubmit"# 用戶名是登錄用戶中心->驗證碼短信->產品總覽->APIID account "xxxxxxxx" # 密碼 查看密碼請登錄用戶中心->驗證碼短…

JAVA內部類使用

一、什么是內部類? 一個類的定義放在另一個類的內部,這個類就叫做內部類 二、內部類有那些特性? 1、內部類仍然是一個獨立的類,在編譯之后內部類會被編譯成獨立的.class文件,但是前面冠以外部類的類名和$符號 。  2、…

初學大數據之模塊集成:Pycharm安裝numpy,scipy,sklearn等包時遇到的各種問題的一鍵解決方法

最近在學習機器學習,要用Python寫程序,習慣了用IDE軟件,所以就使用Pycharm軟件。但是在導入類似numpy,sklearn等模塊的時候,發現了各種問題(如Python版本與模塊之間的兼容等各類問題),上網找了許多方法&…

html 圓環實現多種顏色,SVG實現多彩圓環倒計時效果的示例代碼

圓環倒計時我們經常見到,實現的方法也有很多種。但是本文將介紹一種全新的實現方式,使用SVG來實現倒計時功能。本文主要用到了SVG的stroke-dasharray和stroke-dashoffset特性。下圖是倒計時運行效果:SVG倒計時案例下面說說相關的實現代碼。cs…

調用API發送郵件163郵箱Python

#發郵件的庫 import smtplib# from email.mime.text import MIMEText #SMTP服務器 SMTPSever "smtp.163.com" #發郵件的地址 sender "18332191389163.com" #發送這郵箱的密碼 passwd "xxxxxxxx"#設置發送的內容 message "liu wang is …

u-boot文件夾

參考網址: http://www.cnblogs.com/PengfeiSong/p/6392056.html http://www.360doc.com/content/14/1114/14/8890849_425067013.shtml 轉載于:https://www.cnblogs.com/lijimmy/p/6580870.html

初學大數據之Python中5個最佳的數據科學庫的學習

在下載了pycharm軟件以及通過前兩篇文章,配置了相應的模塊包之后,那就開始對常用的模塊的學習,以便后期利用這些模塊對數據做模型化處理。 如果你已經決定把Python作為你的編程語言,那么,你腦海中的下一個問題會是&…

配置mq

mq的實現可以是apache的&#xff0c;也可以是ibm的&#xff0c;配置不同的地方是connectionFactory和queue和topic應用的包不同 <!-- 配置鏈接器&#xff0c;注入apache的實現 --><bean id"connectionFactory"class"org.springframework.jms.connectio…

模擬銀行自動提款系統python

列出對象及屬性名稱行為...py 人 類名&#xff1a;Person 屬性&#xff1a;姓名 身份證號 電話 卡 行為&#xff1a;卡 類名&#xff1a;Card 屬性&#xff1a;卡號 密碼 余額 行為&#xff1a;銀行 類名&#xff1a;Bank 屬性&#xff1a;用戶列表 提款機提款機 類名&#xf…

幫助文件html打不開,chm幫助文件打不開全是代碼?這幾種解決方法了解一下

win10系統chm幫助文件打不開怎么辦?近期使用win10 版本 1809 (OS 內部版本 17763.864)系統的用戶反應電腦打不開這個chm幫助文件的情況&#xff0c;打開后顯示不正常&#xff0c;針對這樣的問題如何解決呢?針對chm文件打開異常的現象大家可以參考本文中飛飛系統介紹的方法來修…

關于四種語言中substring()方法參數值的解析

1.關于substring(a,b)Jsvar str"bdqn";var resultstr.substring(1,2);alert(result);第一個參數&#xff1a;開始的位置&#xff0c;從0開始數第二個參數&#xff0c;結束的索引&#xff0c;從1開始數&#xff0c;而不是獲取幾個長度SQLselect substring(bdqn,2,1)第…

python中tkinter的使用-上

00基礎代碼 import tkinterwin tkinter.Tk() win.title("Liuwang") win.geometry("400x40020020")win.mainloop() 01簡單示例 #創建主窗口 win tkinter.Tk() #設置標題 win.title("Liuwang") #設置大小和位置 win.geometry("400x40020…

滾動條樣式修改

/*滾動條*/ ::-webkit-scrollbar { width: 4px; height: 4px; background-color: #F5F5F5; } /*定義滾動條軌道 內陰影圓角*/ ::-webkit-scrollbar-track { -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.…

sklearn中常用的數據預處理方法

常見的數據預處理方法&#xff0c;以下通過sklearn的preprocessing模塊來介紹; 1. 標準化&#xff08;Standardization or Mean Removal and Variance Scaling) 變換后各維特征有0均值&#xff0c;單位方差。也叫z-score規范化&#xff08;零均值規范化&#xff09;。計算方式是…

兒童學計算機編程好處,兒童學習編程有什么好處

原標題&#xff1a;兒童學習編程有什么好處前幾年中國家長可能對少兒編程教育感到陌生。但隨著這兩年美國STEM教育在中國的流行&#xff0c;以及今年國務院普及中小學階段人工智能、編程教育規劃的發布&#xff0c;現在國內也漸漸掀起少兒學習編程的風潮。孩子學電腦編程&#…