候选数据网站的选择
选取原则:股票信息静态存在于HTML页面中,非js代码生成,没有Robots协议限制
选取方法:浏览器F12,源代码查看等
程序的结构设计:
步骤1:从东方财富网获取股票列表
步骤2:根据股票列表 逐个到百度股票获取个股信息
步骤3:将结果存储到文件
参考视频:https://www.bilibili.com/video/av9784617?p=47
代码:
import requests
import time
from bs4 import BeautifulSoup
import traceback
import re
def getHTMLText(url,code='utf-8'):
try:
r = requests.get(url,timeout=30)
r.raise_for_status()
r.encoding= code # 页面自动解析编码写法 r.encoding= r.apparent_encoding
return r.text
except:
return ""
def getStockList(lst,stockURL):
html = getHTMLText(stockURL)
soup = BeautifulSoup(html,"html.parser")
a = soup.find_all('a')
for i in a :
# print(type(i)) #<class 'bs4.element.Tag'>
# s = "连板"
# print(s)
# if s in str(i): #判断字符串中是否包含子串
try:
href= i.attrs['href']
lst.append(re.findall(r"\d{6}",href)[0]) #以s开头 然后是h或z字母(因为股票代码不是上海sh就是深圳sz开头) 注意:re.findall返回列表,如[sh100012] 然后再取值出sh100012 然后再append,否则就append进去[[sh100012]]了
except:
continue
def getStockInfo(lst,stockURL,fpath):
count=0 # 实现 进度条
for stock in lst:
url = stockURL + stock +".html" #拼接url
html = getHTMLText(url) # 获取股票页面内容
try:
if html == "": #空页面的处理
continue
infoDict = {}
soup = BeautifulSoup(html,'html.parser') # 解析网页
text =soup.text
# 正则匹配出股票名称
stockName = re.search(r'[\w\u4e00-\u9fcc]+',text).group(0)
# 正则匹配出股票代码
stockNumber = re.search(r'[0-9]\d{5}',text).group(0)
# 正则匹配出股票个股日历
p = re.compile(r"[个][股][日][\u4e00-\u9fa5]+[\s\S]+")
stockHistory=p.findall(text)
print(stockHistory)
stockHistory1= re.split(r" +",stockHistory[0]) #按照多个空格分割
print(stockHist