• 爬虫案例


    1、爬取肯德基的所有餐厅信息   kfc.com.cn/kfccda/storelist/index.aspx

       肯德基官网--餐厅查询--输入查询关键字--点击查询

            发现地址栏没有发生变化,说明发送的是ajax请求

    2、爬取国家药品监督管理局中基于中华人民共和国化妆品生产许可证相关数据

      125.35.6.84:81/xk/

      动态加载数据

      首页中对应的企业信息数据是通过ajax动态请求得到的。

      http://125.35.6.84:81/xk/itownet/portal/dzpz.jsp?id=0868a9efa23f4a18a5351e5f34b2b705

           通过分析详情页url发现

      --url的域名都是一样的,只有携带的参数(id)不一样

      --id值可以从首页对应的ajax请求到json串中获取

      --域名和id值拼接一个完整的企业对应的详情页面

    详情页的数据也是靠动态加载出来的

      http://125.35.6.84:81/xk/itownet/portal/dzpz.jsp?id=b77e2f05756c4479b8e61dfd0516d1e1

    观察后发现:所有的post请求的url都是一样的,只有参数id值是不同的。

    如果我们可以批量获取多家企业的id后,就可以将id和url形成一个完整的详情页

    http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList

    3、获取id,通过得到返回的json数据得到id

    4、在线json解析工具   http://www.kjson.com/

    import requests
    import json
    if __name__ == "__main__":
        url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
    
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'
        }
        data = {
            'n': 'true',
            'page': '1',
            'pageSize': '15',
            'productName':'',
            'conditionType': '1',
            'applyname':'',
            'applysn':''
        }
        id_list = [] #存储企业的id
        all_data_list = [] #所有企业详情数据
        json_ids = requests.post(url=url,headers=headers,data=data).json()
        for dic in json_ids['list']:
            id_list.append(dic['ID'])
    
       #根据id拼接ajax请求
       #获取企业详情数据
        post_url = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById"
        for id in id_list:
            data = {
                "id":id
            }
            detail_json = requests.post(url = post_url,headers=headers,data = data).json()
            #print(detail_json,'--------overing----------')
            all_data_list.append(detail_json)
        #持久化存储
        fp = open("./allData.json",'w',encoding='utf-8')
        json.dump(all_data_list,fp=fp,ensure_ascii=False)
        print("over!!!!")

    特别说明:这是根据老男孩IT学习所做的笔记,感谢佩奇老师,https://www.bilibili.com/video/BV11J411q73G
    想什么,就有什么,聚焦优秀
  • 相关阅读:
    初级工程师该如何去学习,如何去研发开关电源?
    CentOS-pam认证机制简介
    Linux-密码复杂度限制
    如何写一个简单的webserver(一):最简实现
    MySQL5.6绿色版安装(mysql-5.6.24-winx64.zip)
    Linux忘记roo密码的解决办法
    Linux中的netstat命令详解
    WireShark抓包分析(二)
    Wireshark抓取TCP包分析
    Wireshark 基本介绍和学习 TCP 三次握手
  • 原文地址:https://www.cnblogs.com/sunflying/p/13190268.html
Copyright © 2020-2023  润新知