这个小众确好用的模块

前言:

我们提取网页的时候,经常会遇到正常的html网页里面没有我们需要提取的数据,但是却在网页源码里面在JavaScript里面有我们需要的数据,而且这些数据,大多都是用字典的形式呈现出来的,但是这些数据大多都有一个弊病,就是都是非常凌乱的,就算你用正则表达式提取出来,也是很凌乱的,无法像字典那样方便精准的提取我们需要的数据。今天我就给大家带来一个小模块,这个模块就可以解决我们的问题,它可以把这些凌乱的数据变成JSON一样的数据,这样我们能就可以把这些数据像字典一样提取出来了。

这个模块的叫chompjs,感兴趣的可以去这个网址https://pypi.org/project/chompjs/去了解,在这里我就不过多介绍了。我用一个小案例来给大家介绍这个模块的好用之处。

之前我在视频里面发过一篇爬取全国大学前30名的排行,但是这个仅限于是提取html网页里面的数据,也只能提取到前30名,无法提取出30名以后的大学数据。这次我带大家爬取一下全国所有大学的排行,一共有582所。

一、分析网页

在这里插入图片描述

这个是网站的主页,里面有全国各个大学的信息,但是有一点,这个网页里面只能正常爬取到第一页的内容,如果想爬取所有页的内容,就需要找到包含所以页内容的api接口。

在这里插入图片描述

可是我们定位到XHR选项里面,也没有包含内容的接口信息,通过多次的比对分析,原来包含内容信息的api接口是在JavaScript网页里面的,如图:

在这里插入图片描述

我们要知道JavaScript网页里面的数据是非常凌乱的,想精确提取出自己需要的数据,是完全不好弄的,

在这里插入图片描述

我们通过格式化这个JavaScript网页里面的数据,可以看出这里都是像字典一样包含了真正的数据,

在这里插入图片描述

就算匹配到我们能需要的数据,也不能像字典一样正常的提取出来,这就加大了我们提取的难度,但是今天我们使用chompjs这个模块就可以很简单的解决这个大问题。

现在说一下整体思路,我们先对api接口发送请求,获取响应数据后,在利用正则表达式匹配到我们需要那部分数据,然后通过chompjs把这部分数据转换json数据,最后提取出来我们需要的数据。

案例模块

import requests
import re
import chompjs
import pandas as pd

二、发送请求,获取响应数据

def parse_url(url):
    r = requests.get(url, headers=headers)
    return r.text

三、提取数据

def get_dx_datas(json_text):
    dx_data_list = []
    pattern = r'univData:(.*),indList:'
    json_str = re.search(pattern, json_text, re.S).group(1)
    json_datas = chompjs.parse_js_object(json_str)
    for num, json_data in enumerate(json_datas,start=1):
        dx_dict = {
            '大学排名': ,
            '大学中文名字': json_data.get('univNameCn'),
            '大学英文名字': json_data.get('univNameEn'),
            '大学总分': json_data.get('score'),
        }
        dx_data_list.append(dx_dict)
    return dx_data_list

四、保存数据

def save_data(dx_data_list):
    df = pd.DataFrame(dx_data_list, columns=['大学排名', '大学中文名字', '大学英文名字', '大学总分'])
    df.to_csv('dx_pm.csv', index=False)
    print('数据保存完成!!!!')

效果展示:

在这里插入图片描述

在这里插入图片描述

结语:

其实这个小案例,就是利用了chompjs这个模块强大的转换能力,把平时我们无法转换的看似像字典的数据,给转换成字典数据,方便我们能的精确提取,如果感兴趣,可以看我B站的视频,里面有详细的使用过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值