zoukankan      html  css  js  c++  java
  • 爬虫开发3.requests模块

    requests模块

    - 基于如下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请求
      • 基于requests模块ajax的post请求
      • 综合练习
        • 需求:爬取搜狗知乎指定词条指定页码下的页面数据

    - 代码展示

      怎么看网页是get还是post请求?

        点击这里查看get还是post请求特点

    • 需求:爬取搜狗指定词条搜索后的页面数据(基于get请求)
      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)
      

    需求:登录豆瓣电影,爬取登录成功后的页面数据(基于post请求)

    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)

      

    基于ajax加载

    网页中的代码来源一般是服务器将整个网页的数据全部返回,但这在访问量大的情况下会给服务器带来不小的压力,

    因此有些时候采用的是ajax,只给部分内容,其余的有关数据方面的信息只在用户需要时返回。由于ajax的异步的特性,

    所以不会影响到用户的访问体验。有些网页内容使用AJAX加载,只要记得,AJAX一般返回的是JSON,

    直接对AJAX地址进行post或get,就返回JSON数据了

    • 需求:爬取豆瓣电影分类排行榜 https://movie.douban.com/中的电影详情数据
      • 确定ajax对应的请求路径,和提交的数据
    • 实现代码

    • 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
      import os
      #指定搜索关键字
      word = input('enter a word you want to search:')
      #指定起始页码
      start_page = int(input('enter start page num:'))
      end_page = int(input('enter end page num:'))
      #自定义请求头信息
      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://zhihu.sogou.com/zhihu'
      #创建文件夹
      if not os.path.exists('./sougou'):
          os.mkdir('./sougou')
      for page in range(start_page,end_page+1):
          #封装get请求参数
          params = {
              'query':word,
              'ie':'utf-8',
              'page':str(page)
          }
          #发起post请求,获取响应对象
          response = requests.get(url=url,params=params)
          #获取页面数据
          page_text = response.text
          fileName = word+'_'+str(page)+'.html'
          filePath = './sougou/'+fileName
          with open(filePath,'w',encoding='utf-8') as fp:
              fp.write(page_text)
              print('爬取'+str(page)+'页结束')
  • 相关阅读:
    Java 泛型 泛型的约束与局限性
    Java 泛型 泛型方法
    Java 泛型 泛型数组
    Java 泛型 协变性、逆变性
    Java 泛型 协变式覆盖和泛型重载
    Java 泛型 泛型代码和虚拟机
    Insertion Sort List
    Remove Duplicates from Sorted List II
    String to Integer (atoi)
    SpringMvc源码入门
  • 原文地址:https://www.cnblogs.com/sunny666/p/10542596.html
Copyright © 2011-2022 走看看