0


数据收集—自动化采集脚本(爬虫)

1 背景知识介绍

1、什么叫自动化采集脚本:自动去采集网站上我们需要的数据。
2、批量采集数据:谷歌浏览器—百度—东方财富网。
①安装(pip install)和导入模块(import);
②本次操作需要的模块requests、pandas、re;re不用安装,是python自带的。
③模块说明:requests—用来请求网站的数据;pandas—用来操作表格;re—用来筛选数据的。
在这里插入图片描述
3、爬虫:请求某一个网站的数据。
①确定目标:请求哪一个网址;
②以什么样的身份去请求?
③请求

2 怎么找网址:以东方财富网为例

2.1、在谷歌浏览器中搜索百度,进入百度页面

在这里插入图片描述

2.2 在百度中搜索东方财富网。

在这里插入图片描述

2.3 因为不可能爬首页,要的是数据,所以本文以沪深京为例

在这里插入图片描述

2.4 可以看出:有5000多家上市公司的股票数据都在这里。

在这里插入图片描述

2.5 注意:网址

https://quote.eastmoney.com/center/gridlist.html#hs_a_board并不是纯数据的网址,还会有数据之外的文字(如行情中心等)。

2.6 如何获取纯数据的网址

按下F12或Fn+F12(哪个会出来就按哪个),打开开发者工具(有些可能是中文,我的电脑显示为英文),选择顶上的network,刷新网页。可见,这里面有73条数据。
在这里插入图片描述

2.7 确定73条数据那一条是需要的股票数据

利用搜索功能。比如博士眼镜的股票信息,就搜索其关键字,如300662、博士眼镜,搜索这些关键字就可以确定哪一个是需要的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.8 得到股票数据的网址

https://23.push2.eastmoney.com/api/qt/clist/get?cb=jQuery1124020177006179756685_1723650631843&pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&dect=1&wbp2u=|0|0|0|web&fid=f3&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23,m:0+t:81+s:2048&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1723650631844

代码:

#step1:确定目标网址
url='https://23.push2.eastmoney.com/api/qt/clist/get?cb=jQuery1124020177006179756685_1723650631843&pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&dect=1&wbp2u=|0|0|0|web&fid=f3&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23,m:0+t:81+s:2048&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1723650631844'#引号里面是网址

3 以什么样的身份去请求?伪装成一个浏览器

3.1 获取浏览器标识

#step2:获取浏览器标识
wz={'user-agent':'浏览器标识'}

3.2 怎么找浏览器标识,在上一步找网址的最下面

在这里插入图片描述

3.3 获取浏览器标识最终代码。

#step2:获取浏览器标识
wz={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'}

4 请求数据

4.1 需要用到工具requests.

#step3:请求数据,requests模块的获取功能get,给定网址和身份,就可以返回给我们需要的数据。
res=requests.get(url,wz)#网址和身份

4.2 运行结果

在这里插入图片描述

4.3 网页中的数据是可以在运行结果中找到的

可见,python得到的数据里面有我们需要的数据,也有我们不需要的数据。
在这里插入图片描述
在这里插入图片描述

5 筛选需要的数据(re,用来筛选数据的模块)

①先举一个理解怎么筛选的例子,有一个文本:
text=‘小明喜欢喝茶,喜欢唱歌,喜欢爬山,喜欢打篮球,她有很多很多爱好’。现在需要知道小明喜欢什么。

import re
text='小明喜欢喝茶,喜欢唱歌,喜欢爬山,喜欢打篮球,她有很多很多爱好'#提取小明喜欢的#将喜欢 和 逗号 中间的东西提取出来#.*? 表示有几个算几个
name=re.findall('喜欢(.*?),',text)print(name)

在这里插入图片描述

6 提取股票代码等,观察每一个股票代码前面和后面。

在这里插入图片描述

#step4:利用re模块筛选需要的数据#提起股票代码import re
codelist=re.findall('"f12":"(.*?)","f13"',res.text)print(codelist)

在这里插入图片描述

#提取股票名称
namelist=re.findall('"f14":"(.*?)","f15"',res.text)print(namelist)

在这里插入图片描述

#提取最新价格
new_price=re.findall('"f2":(.*?),"f3"',res.text)print(new_price)

在这里插入图片描述
以此类推,可以提取每一个属性下的数据。
在这里插入图片描述

7 组合数据

7.1 散乱数据说明

上一步拿到的数据是这样,但是并没有对应起来,想按照名称-代码-最新价组合起来。
在这里插入图片描述

7.2 列表相关的知识点

name=['张三','李四','王五']

1、列表中有多少个元素

len(name)#3个

2、索引:张三是0,李四是1,王五是2。如果要找张三:data[0]

3、range函数,打印某个东西5次。0、1、2、3、4左闭右开。
在这里插入图片描述

7.3 组合数据

codelist有20个数据;
namelist有20个数据;
new_price有20个数据;(纯手动数的,代码就用len实现)

#step5:组合数据for i inrange(0,len(codelist)):#print(codelist[i],namelist[i],new_price[i])  代码不是很好,单独打印
    newlist=[codelist[i],namelist[i],new_price[i]]#将它们组合为一个新的列表print(newlist)

在这里插入图片描述
但是我们可以发现,截至目前为止,只拿到了第一页的20条数据。但是我们可以推测,每一页数据的网址肯定有一定的相似性。
在这里插入图片描述
回到网址里观察:pn=1,即pagenumber=1
在这里插入图片描述
现在想要pn从1到282:利用for page in range(1:283):
改url的格式:
在这里插入图片描述
在这里插入图片描述

8 完整版代码(笔记版)

后面pycharm没出结果,改用jupyter可以出结果。

import requests # 请求模块import re #筛选模块import pandas  #表格模块#--------------------------------------------------------------#创建一个空列表,储存最终版数据
totaldata =[]for pn inrange(1,283):#step1:确定目标网址
    url=f'https://23.push2.eastmoney.com/api/qt/clist/get?cb=jQuery1124020177006179756685_1723650631843&pn={pn}&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&dect=1&wbp2u=|0|0|0|web&fid=f3&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23,m:0+t:81+s:2048&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1723650631844'#引号里面是网址#step2:以什么样的身份去请求:浏览器标识
    wz={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'}#step3:请求数据,requests模块的获取功能get,给定网址和身份,就可以返回给我们需要的数据。
    res=requests.get(url,wz)#网址和身份#print(res.text)#res不是一个东西,而是由多个属性组成的#res.text 以文本的形式存储#res.content 以二进制的形式存储#step4:利用re模块筛选需要的数据#提起股票代码
    codelist=re.findall('"f12":"(.*?)","f13"',res.text)#print(codelist)#提取股票名称
    namelist=re.findall('"f14":"(.*?)","f15"',res.text)#print(namelist)#提取最新价格
    new_price=re.findall('"f2":(.*?),"f3"',res.text)#print(new_price)#step5:组合数据for i inrange(0,len(codelist)):#左闭右开
        newlist=[codelist[i],namelist[i],new_price[i]]#将它们组合为一个新的列表#print(newlist)
        totaldata.append(newlist)#把每一次运行的20条数据汇总到totaldata中#step6:写入表格
    data = pandas.DataFrame(totaldata)
    data.to_excel('A股实时数据.xlsx')

在这里插入图片描述
在这里插入图片描述

9 完整版代码(精简版)

import requests # 请求模块import re #筛选模块import pandas  #表格模块#创建一个空列表,储存最终版数据
totaldata =[]for pn inrange(1,283):#获取文本数据
    url=f'https://23.push2.eastmoney.com/api/qt/clist/get?cb=jQuery1124020177006179756685_1723650631843&pn={pn}&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&dect=1&wbp2u=|0|0|0|web&fid=f3&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23,m:0+t:81+s:2048&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1723650631844'#引号里面是网址
    wz={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'}
    res=requests.get(url,wz)#网址和身份#从文本里提取需要的数据
    codelist=re.findall('"f12":"(.*?)","f13"',res.text)
    namelist=re.findall('"f14":"(.*?)","f15"',res.text)
    new_price=re.findall('"f2":(.*?),"f3"',res.text)#组合需要的数据for i inrange(0,len(codelist)):#左闭右开
        newlist=[codelist[i],namelist[i],new_price[i]]#将它们组合为一个新的列表#将每一页的数据汇总到一起
        totaldata.append(newlist)#把每一次运行的20条数据汇总到totaldata中#写入表格
    data = pandas.DataFrame(totaldata)
    data.to_excel('A股实时数据.xlsx')
标签: 自动化 爬虫 运维

本文转载自: https://blog.csdn.net/qq_40264559/article/details/141202716
版权归原作者 朵朵zeng 所有, 如有侵权,请联系我们删除。

“数据收集—自动化采集脚本(爬虫)”的评论:

还没有评论