06 Python网络爬虫 JsonPath实战

需求:

爬取中国大学排名网站的数据,并将学校名称、英文名称、标签、种类、城市、评分和排名保存到 MySQL 数据库中

编码思路:

  1. 设置要爬取的网址,以及请求头信息。
  2. 定义函数 getZHDX(),使用 requests 库发送请求获取网页数据,并将返回的 JSON 数据解析为 Python 对象。然后使用 jsonpath 库对数据进行筛选,获取学校名称、英文名称、标签、种类、城市、评分和排名,并将学校名称保存到名为 "name.json" 的 JSON 文件中。
  3. 定义函数 saveData(),连接 MySQL 数据库,获取游标,遍历获取到的数据,处理标签和英文名称,并将数据插入到数据库中。最后关闭游标和连接,并提交更改。
  4. 在主函数中调用 getZHDX() 函数,执行爬取和保存数据的操作。

'''
JsonPath实战-最好的大学

需求:
    1.将学校名称存储为name.json
    2.名称数据存储
        nameList    univNameCn
        enList      univNameEn
        tagList     univTags
        categoryList univCategory
        provinceList province
        scoreList    score
        rankList     ranking
    3.将所获取的信息全部存储到mysql数据库中
        caipiao===>univ
        id,name,en,tag,category,province,score,rank
'''
import requests,json,jsonpath,pymysql

# 1.设置url
url = "https://www.shanghairanking.cn/api/pub/v1/bcur?bcur_type=11&year=2023"

# 2.设置用户代理
headers  ={
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"
}

# 3.获取网页的数据
def getZHDX():
    # 3.1 获取响应文件对象
    response = requests.get(url=url,headers=headers)
    # 3.2 解码操作
    response.encoding = "utf-8"
    # 3.3 获取网页数据
    html = response.text
    # 3.4 将json格式转换为python的类型
    jsonObj = json.loads(html)
    # 3.5 查询学校名称
    nameList = jsonpath.jsonpath(jsonObj,'$..univNameCn')
    # 3.6 查询学校英文名称
    enList = jsonpath.jsonpath(jsonObj,'$..univNameEn')
    # 3.7 查看学校的标签
    tagList = jsonpath.jsonpath(jsonObj,'$..univTags')
    # 3.8 查看学校的种类
    categoryList = jsonpath.jsonpath(jsonObj, '$..univCategory')
    # 3.9 查询学校的城市
    provinceList = jsonpath.jsonpath(jsonObj,'$..province')
    # 3.10 查看学校的评分
    scoreList = jsonpath.jsonpath(jsonObj,'$..score')
    # 3.11 查看学校的排名
    rankList = jsonpath.jsonpath(jsonObj,'$..ranking')
    # 3.12 将学校名称保存到json文件中
    json.dump(nameList,open("name.json",'w'),ensure_ascii=False)
    # 3.13 将所有的数据进行数据库保存
    saveData(nameList,enList,tagList,categoryList,provinceList,scoreList,rankList)

# 4.保存到数据库
def saveData(nameList,enList,tagList,categoryList,provinceList,scoreList,rankList):
    # 4.1建立通道
    conn = pymysql.connect(
        host="127.0.0.1",
        user="root",
        password="1111"
    )
    # 4.2选择数据库
    conn.select_db("caipiao")
    # 4.3 获取游标
    cur = conn.cursor()
    # 4.4 循环遍历
    for i in range(0,len(nameList)):
        # 4.4.1 处理学校的标签类型
        tagData = ""
        for tag in tagList[i]:
            tagData += tag
            tagData += ","
        # 4.4.2 处理学校的英文
        en = str(enList[i].replace("'",""))
        # 4.4.3 设置sql语句
        sql = "insert into univ values(null,'%s','%s','%s','%s','%s',%f,'%s')"\
                %(nameList[i],en,tagData,categoryList[i],provinceList[i],scoreList[i],rankList[i])
        print(sql)
        # 4.4.5 执行
        cur.execute(sql)

    # 4.5 关闭
    cur.close()
    conn.commit()
    conn.close()

if __name__ == '__main__':
    getZHDX()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值