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.mzph.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;现在国内也渐渐掀起少儿学习编程的风潮。孩子学电脑编程&#…