• Python(爬虫)- 动态加载案例分析


    requests

    """
    基于网络请求的模块。
    环境的安装:pip install requests
    作用:模拟浏览器发起请求
    分析requests的编码流程:
    1.指定url
    2.发起了请求
    3.获取响应数据
    4.持久化存储
    """
    
    """
    处理数据量级的问题:
    遇到了对应的反爬机制
    反爬机制:UA检测
    反反爬策略:UA伪装
    UA伪装的实现:
    1.定义一个字典
    2.在字典中进行相关请求头信息的伪装
    3.将该字典作用到get方法的headers参数中即可
    UA检测被作用到了大量的网站中,因此日后,爬虫程序编写中一定要直接加上UA的操作
    """
    

    简单案例一

    """
    url = 'https://www.cnblogs.com/zhaoganggang/p/12873354.html'
    response = requests.get(url)
    
    page_text = response.text
    page_text.encode('utf-8')
    print(page_text)
    """
    

    简单案例二豆瓣 ajax

    """
    需求:爬取豆瓣电影的详情数据
    分析:
    更多的电影数据是通过将滚轮滑动到底部后发起了ajax请求请求到的电影数据
    对ajax请求的url进行捕获
    对ajax请求的url进行请求发送
    """
    """
    url= 'https://movie.douban.com/j/chart/top_list'
    headers = {
        'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
    }
    for i in range(0,10):
        param = {
        'type': '13',
        'interval_id': '100:90',
        'action':'',
        'start': str(i*20),
        'limit': '20',
        }
        response = requests.get(url=url,params=param,headers=headers)
        mov_list = response.json()
        for mov in mov_list:
            name = mov['title']
            sor = mov['score']
            print(name+':'+sor)
            """
    

    简单案例三肯德基+动态加载

    """
    肯德基餐厅查询http://www.kfc.com.cn/kfccda/storelist/index.aspx
    分析:
    动态加载数据
    动态加载数据
    概念:通过其他/另一个请求请求到的数据
    特性:可见非可得
    判定相关的页面数据是否为动态加载的数据?
    基于抓包工具定位到浏览器地址栏url对应的请求数据包,进行局部搜索:
    搜索到:这组被搜索的数据不是动态加载的,可以直接爬取
    没有搜到:这组数据是动态加载的,不可以直接爬取。
    如何捕获动态加载的数据?
    基于抓包工具进行全局搜索,最终可以定位到动态加载数据对应的数据包。
    """
    """
    headers = {
        'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
    }
    
    url = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword"
    
    data = {
    'cname': '',
    'pid': '',
    'keyword': '北京',
    'pageIndex': '1',
    'pageSize': '10',
    }
    
    response = requests.post(url=url,headers=headers,data=data)
    pos_data = response.json()
    # print(pos_data)
    data_list = pos_data['Table1']
    for i in data_list:
        storeName=i.get('storeName')
        addressDetail=i.get('addressDetail')
        pro=i.get('pro')
        provinceName=i.get('provinceName')
        s = "{}:{}:{}:{}".format(storeName,addressDetail,pro,provinceName)
        print(s)
    """
    

    简单案例四药监总局+动态加载

    """
    药监总局数据爬取,爬取的是每一家企业的详情数据
    分析:
    
    打开了某一家企业的详情页面,看到了企业的详情数据
    判定改家企业的详情数据是否为动态加载的?
    进行局部搜索
    没有搜索到,说明数据是动态加载出来的
    捕获动态加载的数据?
    全局搜索,定位到了动态加载数据对应的数据包,提取出了url和请求参数
    成功的捕获到了一家企业对应的详情数据
    通过上述方式继续分析第二家企业,发现:
    
    每一家企业对应动态加载数据的url都一样:http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById,只要请求参数id的值不一样!说明id值标识的就是每一家企业的唯一标识。
    捕获每一家企业的id
    
    在首页中,通过抓包工具对企业名称进行搜索,对应的数据包中发现了企业名称和id
    url:http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList
    """
    """
    # 获取企业id
    ids = []  # 所有企业id  爬取多个数据
    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/78.0.3904.108 Safari/537.36"
    }
    
    for page in range(1,6):
        data = {
            "on": "true",
            "page": str(page),
            "pageSize": "15",
            "productName":"",
            "conditionType": "1",
            "applyname":"",
            "applysn":"",
    
        }
        company_datas_json = requests.post(url=url, headers=headers, data=data).json()
        # print(company_datas_json)
        for dic in company_datas_json['list']:
            _id = dic['ID']
            ids.append(_id)
    detail_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
    for _id in ids:
        data = {
        'id': _id
        }
        company_json = requests.post(url=detail_url, headers=headers,data=data).json()
        print(company_json['epsName'],company_json['epsProductAddress'])
    """
    
    """
    #爬取单个数据
    headers = {
        'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
    }
    url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
    data = {
    'id': 'ff83aff95c5541cdab5ca6e847514f88'
    }
    
    
    response = requests.post(url=url,headers=headers,data=data).json()
    print(response)
    """
    
  • 相关阅读:
    Console
    在IOS10系统中无法定位问题
    c# js 时间
    ConcurrentDictionary,ConcurrentStack,ConcurrentQueue
    转 控件拖动 未验证
    消息处理模拟点击
    C ProcessAsUser
    SessionChange
    installer
    mysql主从同步配置
  • 原文地址:https://www.cnblogs.com/zgboy/p/12968607.html
Copyright © 2020-2023  润新知