东方财富网爬虫小记
1.网页是如何存储数据
以创业板为例
打开开发人员工具,选定到当前页面网址
点击preview与response栏,发现页面中所显示的数据并不在网页源码中
ok!我们可以直接在抓包工具中进行搜索
点击该结果并查看preview和response,发现显示的数据和页面显示的结果一致
再确认
数据条目一致,恭喜你,找到了需要的数据了,进行下一步。
2.对数据进行分析
将获取的链接打开
以上数据和页面显示数据一模一样好吗!在上述地址进行一定的改变甚至可以进行翻页等操作(pn表示页码,pz表示一页含有多少数据)。
但是显示的这些数据中含有很多标识信息,而我们不需要这些信息,所以将需要的数据取出就可以了
ok.那么到了我们最后的环节,将这些数据获取下来保存至数据库中。
3.获取需要的数据
直接上代码
import requests
import json
import pymysql
# 链接数据库
conn = pymysql.connect(host='localhost', port=3306, user='root', password='test123', database='world', charset='utf8')
cu = conn.cursor()
# 建表
sql = "create table if not exists DongFangCaiFu(" \
"`代码` int(6) not null primary key," \
"`名称` varchar(255) not null," \
"`最新价` decimal(10,2)," \
"`涨跌幅` decimal(10,2)," \
"`涨跌额` decimal(5,2)," \
"`成交量` int(10)," \
"`成交额` decimal(65,2)," \
"`振幅` decimal(10,2)," \
"`最高` decimal(10,2)," \
"`最低` decimal(10,2)," \
"`今开` decimal(10,2)," \
"`昨收` decimal(10,2)," \
"`量比` decimal(10,2)," \
"`换手率` decimal(10,2)," \
"`市盈率` decimal(10,2)," \
"`市净率` decimal(10,2)" \
");"
# 插入语句
insert_sql = "insert into DongFangCaiFu values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
cu.execute(sql)
# 访问url获取数据
url = 'http://45.push2.eastmoney.com/api/qt/clist/get?'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/91.0.4472.77 Safari/537.36',
}
parma = {
# 'pn': '3', # 页码
# 'pz': '20' # 一页数据条数
'cb': 'jQuery11240025479411443658728_1623143222865',
'pn': '1',
'pz': '20',
'po': '1',
'np': '1',
'ut': 'bd1d9ddb04089700cf9c27f6f7426281',
'fltt': '2',
'invt': '2',
'fid': 'f3',
'fs': 'm:0 t:80',
'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',
'_': '1623143222866'}
res = requests.get(url, headers=headers, params=parma)
res = res.text[118:-4]
json_data = json.loads(res)
for item in json_data:
cu.execute(insert_sql, (item['f12'], item['f14'], item['f2'], item['f3'], item['f4'], item['f5'], item['f6'],
item['f7'], item['f15'], item['f16'], item['f17'], item['f18'], item['f10'], item['f8'],
item['f9'], item['f23']))
conn.commit()
cu.close()
conn.close()
结果
在获取时选择获取第一页20个结果,如有需要可自行更改代码
再来看一下网页上的数据
简直一模一样!!