zoukankan      html  css  js  c++  java
  • Python网络爬虫之requests模块1

    Python网络爬虫之requests模块(1)
    引入
    Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。

    警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症、冗余代码症、重新发明轮子症、啃文档症、抑郁、头疼、甚至死亡。

    今日概要

    基于requests的get请求
    基于requests模块的post请求
    基于requests模块ajax的get请求
    基于requests模块ajax的post请求
    综合项目练习:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据
    知识点回顾

    常见的请求头
    常见的相应头
    https协议的加密方式
    今日详情

    • 基于如下5点展开requests模块的学习
      什么是requests模块
      requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求。功能强大,用法简洁高效。在爬虫领域中占据着半壁江山的地位。
      为什么要使用requests模块
      因为在使用urllib模块的时候,会有诸多不便之处,总结如下:
      手动处理url编码
      手动处理post请求参数
      处理cookie和代理操作繁琐
      ......
      使用requests模块:
      自动处理url编码
      自动处理post请求参数
      简化cookie和代理操作
      ......
      如何使用requests模块
      安装:
      pip install requests
      使用流程
      指定url
      基于requests模块发起请求
      获取响应对象中的数据值
      持久化存储
      通过5个基于requests模块的爬虫项目对该模块进行学习和巩固
      基于requests模块的get请求
      需求:爬取搜狗指定词条搜索后的页面数据
      基于requests模块的post请求
      需求:登录豆瓣电影,爬取登录成功后的页面数据
      基于requests模块ajax的get请求
      需求:爬取豆瓣电影分类排行榜 https://movie.douban.com/中的电影详情数据
      基于requests模块ajax的post请求
      需求:爬取肯德基餐厅查询http://www.kfc.com.cn/kfccda/index.aspx中指定地点的餐厅数据
      综合练习
      需求:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据http://125.35.6.84:81/xk/
    • 代码展示
      需求:爬取搜狗指定词条搜索后的页面数据
      import requests
      import os

    指定搜索关键字

    word = input('enter a word you want to search:')

    自定义请求头信息

    headers={
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
    }

    指定url

    url = 'https://www.sogou.com/web'

    封装get请求参数

    prams = {
    'query':word,
    'ie':'utf-8'
    }

    发起请求

    response = requests.get(url=url,params=param)

    获取响应数据

    page_text = response.text

    with open('./sougou.html','w',encoding='utf-8') as fp:
    fp.write(page_text)
    请求载体身份标识的伪装:

    User-Agent:请求载体身份标识,通过浏览器发起的请求,请求载体为浏览器,则该请求的User-Agent为浏览器的身份标识,使用爬虫程序发起的请求,则该请求的载体为爬虫程序,则该请求的User-Agent为爬虫程序的身份标识。可以通过判断该值来获知该请求的载体究竟是基于哪款浏览器还是基于爬虫程序。

    反爬机制:某些门户网站会对访问该网站的请求中的User-Agent进行捕获和判断,如果该请求的UA为爬虫程序,则拒绝向该请求提供数据。

    反反爬策略:将爬虫程序的UA伪装成某一款浏览器的身份标识。

    需求:登录豆瓣电影,爬取登录成功后的页面数据
    import requests
    import os
    url = 'https://accounts.douban.com/login'

    封装请求参数

    data = {
    "source": "movie",
    "redir": "https://movie.douban.com/",
    "form_email": "15027900535",
    "form_password": "bobo@15027900535",
    "login": "登录",
    }

    自定义请求头信息

    headers={
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
    }
    response = requests.post(url=url,data=data)
    page_text = response.text

    with open('./douban111.html','w',encoding='utf-8') as fp:
    fp.write(page_text)

    需求:爬取豆瓣电影分类排行榜 https://movie.douban.com/中的电影详情数据

    !/usr/bin/env python

    -- coding:utf-8 --

    import requests
    import urllib.request
    if name == "main":

    #指定ajax-get请求的url(通过抓包进行获取)
    url = 'https://movie.douban.com/j/chart/top_list?'
    
    #定制请求头信息,相关的头信息必须封装在字典结构中
    headers = {
        #定制请求头中的User-Agent参数,当然也可以定制请求头中其他的参数
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
    }
    
    #定制get请求携带的参数(从抓包工具中获取)
    param = {
        'type':'5',
        'interval_id':'100:90',
        'action':'',
        'start':'0',
        'limit':'20'
    }
    #发起get请求,获取响应对象
    response = requests.get(url=url,headers=headers,params=param)
    
    #获取响应内容:响应内容为json串
    print(response.text)
    

    需求:爬取肯德基餐厅查询http://www.kfc.com.cn/kfccda/index.aspx中指定地点的餐厅数据

    !/usr/bin/env python

    -- coding:utf-8 --

    import requests
    import urllib.request
    if name == "main":

    #指定ajax-post请求的url(通过抓包进行获取)
    url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
    
    #定制请求头信息,相关的头信息必须封装在字典结构中
    headers = {
        #定制请求头中的User-Agent参数,当然也可以定制请求头中其他的参数
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
    }
    
    #定制post请求携带的参数(从抓包工具中获取)
    data = {
        'cname':'',
        'pid':'',
        'keyword':'北京',
        'pageIndex': '1',
        'pageSize': '10'
    }
    #发起post请求,获取响应对象
    response = requests.get(url=url,headers=headers,data=data)
    
    #获取响应内容:响应内容为json串
    print(response.text)
    

    需求:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据
    import requests
    from fake_useragent import UserAgent

    ua = UserAgent(use_cache_server=False,verify_ssl=False).random
    headers = {
    'User-Agent':ua
    }

    url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
    pageNum = 3
    for page in range(3,5):
    data = {
    'on': 'true',
    'page': str(page),
    'pageSize': '15',
    'productName':'',
    'conditionType': '1',
    'applyname':'',
    'applysn':''
    }
    json_text = requests.post(url=url,data=data,headers=headers).json()
    all_id_list = []
    for dict in json_text['list']:
    id = dict['ID']#用于二级页面数据获取
    #下列详情信息可以在二级页面中获取
    # name = dict['EPS_NAME']
    # product = dict['PRODUCT_SN']
    # man_name = dict['QF_MANAGER_NAME']
    # d1 = dict['XC_DATE']
    # d2 = dict['XK_DATE']
    all_id_list.append(id)
    #该url是一个ajax的post请求
    post_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
    for id in all_id_list:
    post_data = {
    'id':id
    }
    response = requests.post(url=post_url,data=post_data,headers=headers)
    #该请求响应回来的数据有两个,一个是基于text,一个是基于json的,所以可以根据content-type,来获取指定的响应数据
    if response.headers['Content-Type'] == 'application/json;charset=UTF-8':
    #print(response.json())
    #进行json解析
    json_text = response.json()
    print(json_text['businessPerson'])

  • 相关阅读:
    关于String和StringBuilder、StringBuffer的一个简单性能测试
    HTML网页BODY中如何设置背景图拉伸的最有效方法
    JS鼠标事件大全
    去除链接虚线框的推荐方法
    CSS实现文字颠倒旋转效果
    三种方法解决IE6下png透明失效的问题
    js获取节点 dom操作
    IE HACK
    javascript作用域(Scope)
    RGB配色表
  • 原文地址:https://www.cnblogs.com/yangte/p/15006396.html
Copyright © 2011-2022 走看看