欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-30 19:12:39
爬取东方财富网的部分股票信息(2)目标:爬取东方财富网的部分股票的名称、代码、涨跌幅、融资余额、融资融券余额、股东户数编程语言:Python 3.7开发IDE:Visual Studio 2019这一次我们来爬取股票的股东户数,因为股东户数在另一个页面中,所以我选择重新建一个项目来专门爬取股东户数。还是上次的开头,随便选一只股票,进入到它的股东研究页面。常规操作先来一遍,检查显示有股东户数的表格,发现数据都在一个id为“Table0”的“table”标签里面。然后在网页源代码里搜“Tab...

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

  • 目标:爬取东方财富网的部分股票的名称、代码、涨跌幅、融资余额、融资融券余额、股东户数
    编程语言:Python 3.7
    开发IDE:Visual Studio 2019

这一次我们来爬取股票的股东户数,因为股东户数在另一个页面中,所以我选择重新建一个项目来专门爬取股东户数。

  • 还是上次的开头,随便选一只股票,进入到它的股东研究页面。
    常规操作先来一遍,检查显示有股东户数的表格,发现数据都在一个id为“Table0”的“table”标签里面。然后在网页源代码里搜“Table0”,发现也是被写在js里面的,直接get显然无法爬取数据。
    那就又要从网页请求入手了

  • 按F12找到网络按钮,选择XHR按钮,然后刷新一下网页。这时你会发现XHR一栏里多了一个url,点开发现是股东户数表格里的一系列数据,是严格遵循js格式的,直接转化为python对象然后字典匹配内容就成功拿到数据了。
    爬取东方财富网的部分股票信息(2)
    (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里有没有要的数据。一般来说用这种方法去爬一些公开的网站数据已经足够了。)

来看一下爬虫的结果:
爬取东方财富网的部分股票信息(2)
两次爬到的数据可以保存在.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