Python实战项目:抓取琼斯指数股票信息

Python实战项目:抓取琼斯指数股票信息

  • 实战要求:
  • 源码:
  • 运行截图:

实战要求:

琼斯指数网页源地址
Python实战项目:抓取琼斯指数股票信息_第1张图片
需要抓取的股票信息:
Python实战项目:抓取琼斯指数股票信息_第2张图片
需求:
1.获取股票代码 ------------数组的索引
2.获取前5行的股票数据 -----------数组的切片
3.返回第一只股票的股价 ----------数组的索引 行索引 列索引
4.计算平均的股价 ---------------np.mean()
5.找出股价大于180的公司的名称 ---- bool_索引 arr>180
6.找出股票前三名的公司-------------sort() 取出前三个

源码:

很简单,先打开开发者工具,获得信息的html信息,然后代码在前面也有演示,贴一个链接:
Python菜鸟爬虫技巧(定个小目标,先爬他一个亿)
Python爬取豆瓣电影评分Top250
不过多赘述,直接上源码:

import codecs
import csv
import numpy as np
import requests
from lxml import etree

file = codecs.open('./code.csv','w',encoding='utf-8')
wr = csv.writer(file)
wr.writerow(['name','code','price'])

num=1
while num <=2:
    url='https://money.cnn.com/data/markets/dow/?page='+str(num)
    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
    }
    response=requests.get(url,headers = header)
    obj = etree.HTML(response.text)
    item = obj.xpath('.//div[@class="mod-quoteinfo"]/div[3]/div[3]/div[1]/table/tbody/tr')
    for i in item:
        try:
            name=i.xpath('./td[1]/text()')[0].strip()
            #print("公司名字:",name)
        except:
            pass
        try:
            code=i.xpath('./td[1]/a')[0].text
            #print("股票代码:",code)
        except:
            pass
        try:
            price=i.xpath('./td[2]/span')[0].text
            #print("价格:",price)
        except:
            pass
        wr.writerow([name,code,price])
        data = np.loadtxt('./code.csv',dtype=np.str,delimiter=',') 
    num = num+1
print(data)

数据处理部分代码:

#1.获取股票代码
data_list = data.tolist()[1:]
code = [i[1] for i in data_list]
print(code)
print('-------------------------------------')
#2.获取前五行的股票数据
print(data[1:6])
print('-------------------------------------')
#3.返回第一只股票的股价
print(data[1][2])
print('-------------------------------------')
#4.计算平均的股价
price=[i[2] for i in data_list]
price_arr=np.array(price,dtype=np.float64)
print(price_arr.mean())
print('-------------------------------------')
#5.找出股价大于180的公司的名称
bool_arr=price_arr>180
company=[i[0] for i in data_list]
company_arr=np.array(company)
print(company_arr[bool_arr])
print('-------------------------------------')
#6.找出股价前三名公司
sort_price_arr=np.sort(price_arr)
one=sort_price_arr[-1]
two=sort_price_arr[-2]
three=sort_price_arr[-3]

one_bool_arr=price_arr==one
two_bool_arr=price_arr==two
three_bool_arr=price_arr==three

print(company_arr[one_bool_arr])
print(company_arr[two_bool_arr])
print(company_arr[three_bool_arr])

琼斯指数网页通过?page=xx跳转,因此写一个while函数,循环1到2访问抓取即可。

运行截图:

这一次实战最重要的是数据的处理,列表的使用,熟练使用python的 numpy库函数,领会到python针对数据处理所体现出的强大功能。

很明显我们已经把30支股票的信息获取并转换成列表的方式,保存在本地的code.csv文件中。
注意,要先去代码的同级目录下新建文件名为code.csv。如果目录不同最好在代码中写上完整的文件路径。
Python实战项目:抓取琼斯指数股票信息_第3张图片
code.csv文件内容展示
Python实战项目:抓取琼斯指数股票信息_第4张图片

运行截图2:数据的处理、展示
Python实战项目:抓取琼斯指数股票信息_第5张图片
我们分别获取到了:
1.获取股票代码
2.获取前5行的股票数据
3.返回第一只股票的股价
4.计算平均的股价
5.找出股价大于180的公司的名称
6.找出股票前三名的公司

你可能感兴趣的:(python爬虫)