爬取百度指数行业排行榜

写在前面: 我是「虐猫人薛定谔i」,一个不满足于现状,有梦想,有追求的00后
\quad
本博客主要记录和分享自己毕生所学的知识,欢迎关注,第一时间获取更新。
\quad
不忘初心,方得始终。自己的梦想,终有一天会实现!
\quad

❤❤❤❤❤❤❤❤❤❤

文章目录

  • 思路分析
  • 代码
  • 结果
  • 总结

思路分析

今天,我们要爬取的目标是百度指数的行业排行榜

爬取百度指数行业排行榜_第1张图片
目标已明确,下面进行网页分析。依旧是老套路,先来看一下网页的源码。

爬取百度指数行业排行榜_第2张图片
仔细浏览后,我们发现在该页面中,并没有找到我们需要的数据。那么数据在什么地方呢?不急,我们先来抓包分析一下。

爬取百度指数行业排行榜_第3张图片
请求的URL如下:

http://insight.baidu.com/base/search/rank/list?pageSize=5&source=0&toFixed=1&filterType=1&dateType=20200323~20200329&dimensionid=2&rateType=1000&filterNodes=&callback=_jsonpnp15vox7fc

这个URL看起来有很多参数,不过其中有一些对我们来说是没有用的,比如,那个callback就可以去掉。URL中的dimensionid参数是请求的数据类型,比如说,当dimensionid=2时,返回的是汽车的排名数据。

data = {
    'car': '2',
    'phone': '12',
    'makeup': '37',
    'star': '78',
    'tourist': '84',
    'university': '53',
    'estate': '88',
    'milkPowder': '68',
}

有了这个URL后,我们就可以发送请求获取数据了。
爬取百度指数行业排行榜_第4张图片

代码

# !/usr/bin/env python
# —*— coding: utf-8 —*—
# @Time:    2020/3/31 9:42
# @Author:  Martin
# @File:    industryrank.py
# @Software:PyCharm
import requests
import json
import os

"""
爬取百度指数行业排行榜
"""

# 请求的URL
url = 'http://insight.baidu.com/base/search/rank/list?pageSize=20&toFixed=1&filterType=1&dimensionid=%s&rateType=1000&source=0'

# 伪装请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}

data = {
    'car': '2',
    'phone': '12',
    'makeup': '37',
    'star': '78',
    'tourist': '84',
    'university': '53',
    'estate': '88',
    'milkPowder': '68',
}

for item in data:
    page_url = url % data[item]
    r = requests.get(page_url)
    r.encoding = 'utf-8'
    rank_data = json.loads(r.text)['data']['results']
    result = {
        'name': item,
        'result': rank_data['current'],
        'current_Date': rank_data['currDate']
    }
    print(result)
    # 保存文件
    if not os.path.exists('./result/'):
        os.makedirs('./result/')
    with open('./result/'+result['name']+'_'+result['current_Date']+'.json', 'w', encoding='utf-8') as f:
        json.dump(result, f, indent=4, ensure_ascii=False)
    print(item + " is OK!")

结果

爬取百度指数行业排行榜_第5张图片
爬取百度指数行业排行榜_第6张图片
爬取百度指数行业排行榜_第7张图片

总结

个人认为,本次爬取比较困难的地方就是URL的分析,只要这个地方处理好了,后面的基本上都是一些常规操作,比较简单。

爬取百度指数行业排行榜_第8张图片

你可能感兴趣的:(Web,Crawler)