荐 Python+Mysql爬虫之爬取Json格式数据
程序员文章站
2021-12-29 11:52:43
项目开始1、准备事项需要用到的包:requests、json、time、pymysql请求路径:https://75676a.com/js/anls-api/data/k360/numTrend/10080.do?_t=%s这里附加说明一下,路径中10080为最长获取记录,也就是一个星期的出奖记录,获取1条记录把10080改成1即可,后面_t为服务器当前系统时间,单位为秒。2、Json数据提取根据url,我们用谷歌浏览器访问,查看数据格式,分析和查找规律后,再提取数据至mysql中存储。我们先...
项目开始
1、准备事项
需要用到的包:requests、json、time、pymysql
请求路径:https://XXXX.com/js/anls-api/data/k360/numTrend/10080.do?_t=%s
这里附加说明一下,路径中10080为最长获取记录,也就是一个星期的出奖记录,获取1条记录把10080改成1即可,后面_t为服务器当前系统时间,单位为秒。
2、Json数据提取
根据url,我们用XX浏览器访问,查看数据格式,分析和查找规律后,再提取数据至mysql中存储。
我们先利用交互式ipython获取一下当前的系统时间,如下截图:
把小数点前面的数字获取下来即可拼接到url中https://XXXX.com/js/anls-api/data/k360/numTrend/10080.do?_t=1595810996 ,访问结果如下图所示:
我们可以使用JSONView插件,把数据格式化成好看的数据,也就是Json格式数据,和python中的字典类似了。这里需要去XX商店去下载:
利用XX访问助手插件实现访问:
下载链接:安装教程请百度
链接:https://pan.baidu.com/s/17WYnX3gJ2EgVSVeeVuTWKg
提取码:lvbt
安装好插件后,我们再刷新下,看一下数据格式,找规律方便提取数据。
由上图可以看出,我们所要的数据在bodyList列表中,每一个字典下键名为openNum下的值,为一个列表,而列表中的值就是我们要提取的数据,我们通过先提取大列表,然后通过循环,把一个个数据提出来即可,然后可以保存到文件也可以,数据库也可以,在下认为保存在数据库中方便日后增删改查方便,我这里使用mysql数据库保存。程序思路了,废话不多说,那么上代码。
3、代码及展示数据
import requests
import time
import json
import pymysql
class Spider_756:
def __init__(self):
self._t = time.time()
# self.local_time = time.localtime(time.time())
self.url = 'https://75676a.com/js/anls-api/data/k360/numTrend/10080.do?_t=%s' % (self._t)
self.url_1 = 'https://75676a.com/js/anls-api/data/k360/numTrend/1.do?_t=%s' % (self._t) # 爬取一条记录
self.headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
'cookie': 'JSESSIONID=378756B066D3F86D6321782C06FF5954',
'Referer': 'https://75676a.com/wap/index.html',
}
self.proxy = '116.196.85.150:3128'
self.proxies = {
"http": "http://%(proxy)s/" % {'proxy': self.proxy},
"https": "http://%(proxy)s/" % {'proxy': self.proxy}
}
def get_data(self, delayed):
res = requests.get(url=self.url if delayed else self.url_1, headers=self.headers, proxies=self.proxies).text
return json.loads(res)['bodyList']
def save_all_data(self, delay):
body_list = self.get_data(delay) # 获取数据
# 创建连接对象
db_conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', database='spider756',
charset='utf8')
# 获得Cursor对象
cursor = db_conn.cursor()
# 插入原生SQL语句
insert_data = '''INSERT INTO dice(dice1,dice2,dice3,result,size,odd_even) VALUES(%s,%s,%s,%s,%s,%s);'''
for result in body_list:
temp = result['openNum']
dice1 = temp[0]
dice2 = temp[1]
dice3 = temp[2]
if (dice1 + dice2 + dice3) % 2 == 0:
temp.append(dice1 + dice2 + dice3)
temp.append('大') if (dice1 + dice2 + dice3) > 10 else temp.append('小')
temp.append('双')
try:
# 执行SQL语句
cursor.execute(insert_data, temp)
db_conn.commit()
except:
db_conn.rollback()
print("插入数据失败")
else:
temp.append(dice1 + dice2 + dice3)
temp.append('大') if (dice1 + dice2 + dice3) > 10 else temp.append('小')
temp.append('单')
try:
cursor.execute(insert_data, temp)
db_conn.commit()
except:
db_conn.rollback()
print("插入数据失败")
db_conn.close()
print(f'插入数据到数据库完成')
def run(self):
delay = True
self.save_all_data(delay)
if __name__ == '__main__':
running = Spider_756()
running.run()
数据库需要自己先建库建表,然后在运行我的代码,这里库名和表名都在程序中体现出来,如不清楚看下面截图:
数据保存纪录如下图:
本文地址:https://blog.csdn.net/QQ128619/article/details/107603842
推荐阅读
-
Python爬取数据保存为Json格式的代码示例
-
PHP爬虫之百万级别知乎用户数据爬取与分析
-
荐 Python爬虫:基于Scrapy爬取京东商品数据并保存到mysql且下载商品图片
-
Python爬虫之简单的爬取百度贴吧数据
-
Python3爬虫学习之MySQL数据库存储爬取的信息详解
-
Python爬虫实战案例之爬取喜马拉雅音频数据详解
-
荐 Python爬取公交车数据(一):Requests+JSON网络站点爬取8684公交站点公交站台数据
-
python爬虫之Appium爬取手机App数据及模拟用户手势
-
荐 Python3 爬虫实战 — 前程无忧招聘信息爬取 + 数据可视化
-
04 Python网络爬虫 <<爬取get/post请求的页面数据>>之requests模块