
import requests
from bs4 import BeautifulSoup
from datetime import datetime
import time
import json
import xlwt
def get_list(url):
res=requests.get(url)
res.encoding='utf-8'
html=BeautifulSoup(res.text,'html.parser')
stockList=[]
for item in html.select('.stockTable a'):
try:
stockObj={}
stockObj['name']=item.text
stockObj['url']=item.get('href')
stockList.append(stockObj)
except:
print('出现异常')
return stockList
def get_detail(url):
res=requests.get(url)
res.encoding='utf-8'
html=BeautifulSoup(res.text,'html.parser')
result={}
result['title']=''
result['code']=''
result['state']=''
result['nowtime']=''
result['url']=''
result['maxheight']=''
result['minheight']=''
result['childTitles']=[]
result['childValues']=[]
try:
result['title']=html.select('.stock_title h1')[0].text
except:
print('读取股票名称,出现异常',url)
try:
result['code']=html.select('.stock_title h2')[0].text
except:
print('读取股票代码,出现异常',url)
try:
result['state']=html.select('.stock_title em')[0].text
except:
print('读取股票状态,出现异常',url)
try:
result['nowtime']=html.select('.stock_title time')[0].text
except:
print('读取当前时间,出现异常',url)
try:
result['url']=url
except:
print('读取股票链接,出现异常',url)
try:
result['maxheight']=html.select('.s_height dd')[0].text
except:
print('读取最高,出现异常',url)
try:
result['minheight']=html.select('.s_height dd')[1].text
except:
print('读取最低,出现异常',url)
try:
childTitles=[]
for item in html.select('.s_date dt'):
childTitles.append(item.text)
result['childTitles']=childTitles
except:
print('读取股票各项指数值,出现异常',url)
try:
childValues=[]
for item in html.select('.s_date dd'):
childValues.append(item.text)
result['childValues']=childValues
except:
print('读取股票各项指数值,出现异常',url)
return result
if __name__ == "__main__":
stockList=get_list('https://hq.gucheng.com/gpdmylb.html')
firstChildTitleList=get_detail(stockList[0]['url'])['childTitles']
print('获取到'+str(len(stockList))+'个股票代码')
book = xlwt.Workbook(encoding='utf-8')
sheet = book.add_sheet('股票代码')
head = ['股票名称','股票代码','状态','时间','网址','最高','最低']
for h in range(len(head)):
sheet.write(0,h,head[h])
for h in range(len(firstChildTitleList)):
sheet.write(0,len(head)+int(h),firstChildTitleList[h])
for i,item in enumerate(stockList):
try:
stockObj=get_detail(item['url'])
sheet.write(i+1,0,stockObj['title'])
sheet.write(i+1,1,stockObj['code'])
sheet.write(i+1,2,stockObj['state'])
sheet.write(i+1,3,stockObj['nowtime'])
sheet.write(i+1,4,stockObj['url'])
sheet.write(i+1,5,stockObj['maxheight'])
sheet.write(i+1,6,stockObj['minheight'])
for j,child in enumerate(stockObj['childValues']):
sheet.write(i+1,7+j,child)
print (str(i),'写入成功')
except:
print (str(i),'出现异常',stockObj['url'])
book.save('股票代码.xls')
print('写入完毕!>>股票代码.xls')
