爬取东方财富网的部分股票信息(2)
爬取东方财富网的部分股票信息(2)
- 目标:爬取东方财富网的部分股票的名称、代码、涨跌幅、融资余额、融资融券余额、股东户数
编程语言:Python 3.7
开发IDE:Visual Studio 2019
这一次我们来爬取股票的股东户数,因为股东户数在另一个页面中,所以我选择重新建一个项目来专门爬取股东户数。
-
还是上次的开头,随便选一只股票,进入到它的股东研究页面。
常规操作先来一遍,检查显示有股东户数的表格,发现数据都在一个id为“Table0”的“table”标签里面。然后在网页源代码里搜“Table0”,发现也是被写在js里面的,直接get显然无法爬取数据。
那就又要从网页请求入手了 -
按F12找到网络按钮,选择XHR按钮,然后刷新一下网页。这时你会发现XHR一栏里多了一个url,点开发现是股东户数表格里的一系列数据,是严格遵循js格式的,直接转化为python对象然后字典匹配内容就成功拿到数据了。
(XHR为向服务器发送请求和解析服务器响应提供了流畅的接口,能够以异步方式从服务器取得更多信息,是ajax技术的核心。以前学过一点前端,只是很浅薄地了解过一点)
代码如下:
import requests
from bs4 import BeautifulSoup
import json
import re
url = 'http://quote.eastmoney.com/stock_list.html'
html=requests.get(url)
soup=BeautifulSoup(html.content,'lxml')
a = soup.find("div",attrs = {"class":"quotebody"}).find_all("li")
for k in a:
Stock_Number = re.findall(r'[(](.*?)[)]',k.get_text())
Stock_Name = re.sub('\(.*?\)','',k.get_text())
first_number = Stock_Number[0]
if first_number[0:1] == '6' :
part1 = 'http://f10.eastmoney.com/ShareholderResearch/ShareholderResearchAjax?code=SH'
data_url = part1 + str(Stock_Number[0])
json_data = json.loads(requests.get(data_url).text)
print(Stock_Name,Stock_Number[0])
i = 0
while(i < 10):
print(json_data['gdrs'][i]['rq'],json_data['gdrs'][i]['gdrs'])
i = i + 1
else:i = 0
else:continue
(其实和第一部分差别不大,思路基本是一样的。简单的爬虫基本都是这个思路,先看数据有没有写在网页源码里,然后再看js、XHR里有没有要的数据。一般来说用这种方法去爬一些公开的网站数据已经足够了。)
来看一下爬虫的结果:
两次爬到的数据可以保存在.txt或者.csv文件里,或者储存到本地数据库里。爬到的这些数据还可以做简单的数据分析,比如用图像来表示股票价格走势。
第一次的代码基本都放在文章里了,为方便ctrl+C、ctrl + V,我就再放一次完整代码了。
import requests
import re
from bs4 import BeautifulSoup
import json
url = 'http://quote.eastmoney.com/stock_list.html'
html=requests.get(url)
soup=BeautifulSoup(html.content,'lxml')
a = soup.find("div",attrs = {"class":"quotebody"}).find_all("li")
for k in a:
if(k.get_text() != ""):
Stock_Number = re.findall(r'[(](.*?)[)]',k.get_text())
Stock_Name = re.sub('\(.*?\)','',k.get_text())
first_number = Stock_Number[0]
else:continue
if first_number[0:1] == '6' :
part1 = 'http://datacenter.eastmoney.com/api/data/get?type=RPTA_WEB_RZRQ_GGMX&sty=ALL&source=WEB&p='
part2 = '&ps=50&st=date&sr=-1&filter=(scode=%22'
part3 = '%22)&rt=53137855'
data_page = 0
while(data_page < 7):
data_page = data_page + 1
dataurl = part1 + str(data_page) + part2 + first_number + part3
if(requests.get(dataurl)):
datahtml = json.loads(requests.get(dataurl).text)
number = 0
if(datahtml['result']):
while(number < len(datahtml['result']['data'])):
##日期
Stock_Date = datahtml['result']['data'][number]['DATE'][0:10]
##收盘价
Stock_SPJ = float(datahtml['result']['data'][number]['SPJ'])
##涨跌幅
if(datahtml['result']['data'][number]['ZDF'] != None):
Stock_ZDF = float(datahtml['result']['data'][number]['ZDF'])
else:Stock_ZDF = 0
##融资余额
Stock_RZYE = float(datahtml['result']['data'][number]['RZYE'])
##融资融券余额
Stock_RZRQYE = float(datahtml['result']['data'][number]['RZRQYE'])
print(Stock_Name,Stock_Number,Stock_Date,Stock_SPJ,Stock_RZYE,Stock_RZRQYE)
number = number + 1
else:break
else: continue
我也是最近才开始接触python,对爬虫很感兴趣。但一开始学的时候很艰难,所以想写一点自己的经历帮助刚接触的小白,代码的优化程度低,很多操作也写得繁杂,整体水平不高,只当个参考就可以了。
本文地址:https://blog.csdn.net/weixin_45729582/article/details/107298217
上一篇: python:面向对象练习
下一篇: 处暑吃啥好?处暑节气的含义是什么?