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

荐 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获取一下当前的系统时间,如下截图:
荐
                                                        Python+Mysql爬虫之爬取Json格式数据
把小数点前面的数字获取下来即可拼接到url中https://XXXX.com/js/anls-api/data/k360/numTrend/10080.do?_t=1595810996 ,访问结果如下图所示:
荐
                                                        Python+Mysql爬虫之爬取Json格式数据
我们可以使用JSONView插件,把数据格式化成好看的数据,也就是Json格式数据,和python中的字典类似了。这里需要去XX商店去下载:
利用XX访问助手插件实现访问:

下载链接:安装教程请百度
链接:https://pan.baidu.com/s/17WYnX3gJ2EgVSVeeVuTWKg
提取码:lvbt

安装好插件后,我们再刷新下,看一下数据格式,找规律方便提取数据。

荐
                                                        Python+Mysql爬虫之爬取Json格式数据
荐
                                                        Python+Mysql爬虫之爬取Json格式数据

由上图可以看出,我们所要的数据在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()

数据库需要自己先建库建表,然后在运行我的代码,这里库名和表名都在程序中体现出来,如不清楚看下面截图:

荐
                                                        Python+Mysql爬虫之爬取Json格式数据

数据保存纪录如下图:

荐
                                                        Python+Mysql爬虫之爬取Json格式数据

本文地址:https://blog.csdn.net/QQ128619/article/details/107603842