'''
功能描述
目标:获取上交所和深交所所有股票的名称和交易信息
输出:保存到文件中
技术路线:requests-bs4-re
候选数据网站的选择
选取原则:股票信息静态存在于HTML页面中,非js代码生成,没有
Robots协议限制
选取方法:浏览器F12,源代码查看等
选取心态:不要纠结于某个网站,多找信息源尝试
程序的结构设计
步骤1:从东方财富网获取股票列表
步骤2:根据股票列表逐个到百度股票获取个股信息
步骤3:将结果存储到文件
'''
import requests
import re
from bs4 import BeautifulSoup
import traceback
def getHTMLText(url,code="utf-8"):
try:
r = requests.get(url)
r.raise_for_status()
r.encodind =code
return r.text
except:
return print("")
def getStockList(list, stockURL): # stockURL是获得股票列表的URL list用来存储
html = getHTMLText(stockURL,"GB2312")
soup = BeautifulSoup(html, "html.parser")
a = soup.find_all("a") # 返回一个a标签组成的列表,为什么?审查页面源代码你可看到所要的信息在a标签中
# 返回了一个列表,里面是所有a标签
for i in a:
try:
href = i.attrs["href"] # 找到herf属性
print(href) # 用来测试
print(re.findall(r'[s][hz]\d{6}', href)) # 用来测试
# 用正则表达式
list.append(re.findall(r'[s][hz]\d{6}', href)[0]) # 找到各支股票的代码信息 ,<>findall()返回一个列表
except:
continue
def getStockInfo(list, stockURL, fpath): # 找到股票信息
print(list) # 用来测试
count=0
for stock in list:
url = stockURL + stock + ".html" # 获得股票信息的链接
html = getHTMLText(url)
try:
if html == "": # 判断当前页面是不是空页面
continue
infolist = {}
soup = BeautifulSoup(html, "html.parser")
stockinfo = soup.find("div",attrs={"class": "stock-bets"}) # <>.find()只返回一个结果,原页面中是<div class="stock-bets">
# 返回的是字符串类型的
name = stockinfo.find_all(attrs={'class': "bets-name"})[0]
infolist.update({"股票名称": name.text.split()[0]}) # stockinfo.text---找到文本部分
keylist = stockinfo.find_all('dt')
valuelist = stockinfo.find_all("dd")
for i in range(len(keylist)):
key = keylist[i]
value = valuelist[i]
infolist[key] = value # 存储信息
with open(fpath, 'a', encoding="utf-8") as f:
f.write(str(infolist) + "\n")
count=count+1
print("\r当前进度:{:.2f}%".format(count*100/len(list)),end="")
except:
count = count + 1
print("\r当前进度:{:.2f}%".format(count * 100 / len(list)), end="")
# traceback.print_exc() # 可以知道出现异常的错误信息
continue
def main():
stock_list_url = 'http://quote.eastmoney.com/stocklist.html' # 获得股票列表的链接
stock_info_url = 'https://gupiao.baidu.com/stock/' # 获得股票信息的主体部分
output_file = 'D://IDE//Pycharm//Spider//Re//baiduStockInfo.txt' # 保存的路径
slist = [] # 存储股票信息
# 获得股票列表
getStockList(slist, stock_list_url)
# 获得股票信息
getStockInfo(slist, stock_info_url, output_file)
main()
print("all done")
python:股票数据定向爬取
猜你喜欢
转载自blog.csdn.net/Yk_0311/article/details/81667761
今日推荐
周排行