zoukankan      html  css  js  c++  java
  • requests模块的基本使用

    requests模块的基本使用

    • 基于网络请求的模块。
    • 环境的安装:pip install requests
    • 作用:模拟浏览器发起请求
    • 分析requests的编码流程:
      • 1.指定url
      • 2.发起了请求
      • 3.获取响应数据
      • 4.持久化存储
    • 需求:爬取搜狗首页的页面源码数据
    import requests
    #1.指定url
    url = 'https://www.sogou.com/'
    
    #2.发起请求,get的返回值是一个响应对象
    response = requests.get(url)
    
    #3.获取响应数据,text属性返回的是字符串形式的响应数据
    page_text = response.text
    
    #4,持久化存储
    with open('./sogou.html','w',encoding='utf-8') as fp:
        fp.write(page_text)
    
    • 需求:简易的网页采集器
    url = 'https://www.sogou.com/web?query=人民币'
    response = requests.get(url)
    page_text = response.text
    with open('./人民币.html','w',encoding='utf-8') as fp:
        fp.write(page_text)
    
    • 上述代码出现的问题:
      • 出现了乱码
      • 数据的量级不够
    • 处理乱码
    url = 'https://www.sogou.com/web?query=人民币'
    response = requests.get(url)
    #修改响应数据的编码格式
    response.encoding = 'utf-8'
    page_text = response.text
    with open('./人民币.html','w',encoding='utf-8') as fp:
        fp.write(page_text)
    
    • 处理数据量级的问题:

      • 遇到了对应的反爬机制

      • 反爬机制:UA检测

        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
            
        # 代理用户信息,这个数据时浏览器的信息,是请求数据的头部信息,
        
      • 反反爬策略:UA伪装

      • UA伪装的实现:

        • 1.定义一个字典
        • 2.在字典中进行相关请求头信息的伪装
        • 3.将该字典作用到get方法的headers参数中即可
      • UA检测被作用到了大量的网站中,因此日后,爬虫程序编写中一定要直接加上UA的操作

    url = 'https://www.sogou.com/web?query=人民币'
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
    }
    response = requests.get(url,headers=headers)#UA伪装
    
    #修改响应数据的编码格式
    response.encoding = 'utf-8'
    
    page_text = response.text
    with open('./人民币.html','w',encoding='utf-8') as fp:
        fp.write(page_text)
    
    • 最终实现
      • 请求参数的动态化
      • 实现:
        • 1.定义一个字典
        • 2.字典中的键值就是url携带的参数
        • 3.将字典作用到get方法的params参数中
    url = 'https://www.sogou.com/web'
    
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
    }
    
    #参数动态化
    wd = input('enter a key word:')
    param = {
        'query':wd
    }
    response = requests.get(url,headers=headers,params=param)#UA伪装
    
    #修改响应数据的编码格式
    response.encoding = 'utf-8'
    
    page_text = response.text
    fileName = wd+'.html'
    with open(fileName,'w',encoding='utf-8') as fp:
        fp.write(page_text)
    print(fileName,'爬取成功!!!')
    
    enter a key word:波晓张
    波晓张.html 爬取成功!!!
    
    • 需求:爬取豆瓣电影的详情数据
    • 分析:
      • 更多的电影数据是通过将滚轮滑动到底部后发起了ajax请求请求到的电影数据
      • 对ajax请求的url进行捕获
      • 对ajax请求的url进行请求发送
    url = 'https://movie.douban.com/j/chart/top_list'
    fp = open('./movieData.txt','a+',encoding='utf-8')
    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)
        #json()将json串进行序列化
        movie_list = response.json()
        for dic in movie_list:
            name = dic['title']
            score = dic['score']
            fp.write(name+':'+score+'
    ')
        print('第{}页数据爬取成功!'.format(i))
    fp.close()
            
    
    第0页数据爬取成功!
    第1页数据爬取成功!
    第2页数据爬取成功!
    第3页数据爬取成功!
    第4页数据爬取成功!
    第5页数据爬取成功!
    第6页数据爬取成功!
    第7页数据爬取成功!
    第8页数据爬取成功!
    第9页数据爬取成功!
    
    
    • 肯德基餐厅查询http://www.kfc.com.cn/kfccda/storelist/index.aspx
    • 分析:
      • 动态加载数据
    • 动态加载数据
      • 概念:通过其他/另一个请求请求到的数据
      • 特性:可见非可得
      • 判定相关的页面数据是否为动态加载的数据?
        • 基于抓包工具定位到浏览器地址栏url对应的请求数据包,进行局部搜索:
          • 搜索到:这组被搜索的数据不是动态加载的,可以直接爬取
          • 没有搜到:这组数据是动态加载的,不可以直接爬取。
      • 如何捕获动态加载的数据?
        • 基于抓包工具进行全局搜索,最终可以定位到动态加载数据对应的数据包。
    import requests
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
    }
    data = {
        'cname': '',
        'pid': '',
        'keyword': '广州',
        'pageIndex': '1',
        'pageSize': '10',
    }
    url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
    response = requests.post(url=url,headers=headers,data=data)
    pos_data = response.json()
    pos_data
    
    
    {'Table': [{'rowcount': 27}],
     'Table1': [{'addressDetail': '广州路104号',
       'cityName': '南京市',
       'pro': '24小时,Wi-Fi,点唱机,店内参观,礼品卡,生日餐会',
       'provinceName': '江苏省',
       'rownum': 1,
       'storeName': '广州'},
      {'addressDetail': '天河路123号广州购书中心负一层',
       'cityName': '广州市',
       'pro': '24小时,Wi-Fi,点唱机,礼品卡',
       'provinceName': '广东省',
       'rownum': 2,
       'storeName': '购书中心'},
      {'addressDetail': '广州南站三楼B区餐饮夹层(B26-B27检票口上方)',
       'cityName': '广州市',
       'pro': '礼品卡',
       'provinceName': '广东省',
       'rownum': 3,
       'storeName': '南站二'},
      {'addressDetail': '小谷围广州大学城广州大学生活区商业中心首层A1028及二层A2009',
       'cityName': '广州市',
       'pro': '24小时,Wi-Fi,点唱机,店内参观,礼品卡',
       'provinceName': '广东省',
       'rownum': 4,
       'storeName': '大学城'},
     ]}
    
    
    #获取企业id
    ids = [] #存储所有企业的id
    url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
    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()
        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'])
    
    
    亳州嘉禾药业有限公司 安徽省亳州市谯城区三官工业街168号
    倍斯柔(广东)生物科技有限公司 佛山市三水区乐平镇西乐大道东39号登骏数码城二期厂房B3号301A、401A、501A单元(住所申报)
    佛山市方方洁生物科技有限公司 广东省佛山市南海区丹灶镇塱心工业区吴伟升厂房自编A座1楼、2楼(住所申报)
    青岛尚合生物科技有限公司 山东省青岛市莱西市夏格庄文昌路8号
    山东暨肽生物医药科技有限公司 山东省烟台市福山区振华街879号
    淳安千岛湖诚达实业有限公司 浙江省杭州市淳安县千岛湖镇永和路321号1幢2楼
    浙江好妆化妆品有限公司 浙江省金华市义乌市廿三里街道安商路37号
    美尚美生物技术(广州)有限公司 广州市花都区花山镇启源大道6号4栋304房
    广州市联盈日用化妆品有限公司 广州市花都区赤坭镇白坭经济社内
    浙江绿岛科技有限公司 海润街道工业大道5号
    广州市三荣化妆品有限公司 广州市白云区江高镇塘荔路3号A1栋、B栋
    广州市欣俊颜化妆品有限公司 广州市白云区白云湖街夏茅向西大道十九社工业区自编一号五楼
    广州甲美生物科技有限公司 广州市白云区均禾街石马村旺发大街自编25号
    广州卡丝蓝化妆品有限公司 广州市白云区江高镇神山雄郭西路128号3栋101房、201房
    广州市绿色春天化妆品科技研发有限公司 广州市白云区均禾街罗岗工业区企业路23号
    
    
  • 相关阅读:
    [转]IIS 6.0中配置HTTP Gzip压缩
    SmartPhone下解决rm、rmvb等格式电影播放的方案(参考意见)
    提取文件夹下所有文件,按类型进行提取
    重学JSP—设置CATALINA_HOME环境变量
    android学习笔记
    用myeclipse配置hibernate
    Java 回调函数 转自:http://blog.sina.com.cn/s/blog_48cf38890100go6x.html
    fastadmin单独控制编辑、删除按钮的展示和隐藏
    fastadmin导出图片
    php计算坐标距离
  • 原文地址:https://www.cnblogs.com/zhufanyu/p/11972800.html
Copyright © 2011-2022 走看看