当前位置: 移动技术网 > IT编程>脚本编程>Python > 爬取东方财富网的部分股票信息(2)

爬取东方财富网的部分股票信息(2)

2020年07月14日  | 移动技术网IT编程  | 我要评论

爬取东方财富网的部分股票信息(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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网