zoukankan      html  css  js  c++  java
  • requests 爬虫

    requests 库只是一个工具,是工具就有它的使用方式,下面是使用 requests 库的 GET 方法请求网站URL的方法

    import requests
    response = requests.get("https://www.baidu.com/?tn=monline_3_dg")
    print(response.text)

    requests 库的通用代码函数框架

    # 爬取网页的通用代码框架(加入异常处理方法)
    import requests
    
    # 定义一个爬虫通用框架函数
    def getHTMLText(url):
        try:
            # 通过get方法请求url并设定响应时间
            r = requests.get(url,timeout=30)
            # 如果状态码不是200,引发 HTTPError 异常
            r.raise_for_status()
            # 解析返回数据的编码方式
            r.encoding = r.apparent_encoding
            # 输出返回网页的内容
            return r.text
        except:
            return "产生异常"

    更改请求头 headers,

    • 先构造一个键值对:kv = {"user-agent":"Mozilla/5.0"}

    • 修改爬虫的头部信息: r = requests.get(url,headers = kv)

    • Mozilla/5.0:是一个标准的浏览器标识

    # 爬取网页的通用代码框架(加入异常处理方法)
    import requests
    
    # 定义一个爬虫通用框架函数
    def getHTMLText(url):
        try:
    kv
    = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36"} # 通过get方法请求url并设定响应时间 r = requests.get(url,headers = kv,timeout=30) # 如果状态码不是200,引发 HTTPError 异常 r.raise_for_status() # 解析返回数据的编码方式 r.encoding = r.apparent_encoding # 输出返回网页的内容 return r.text except: return "产生异常"

    更改请求头爬取拉勾网实例

    import requests
    url = "https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput="
    try:
        kv = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36"}
        r = requests.get(url,timeout=30,headers=kv)
        r.raise_for_status
        r.encoding = r.apparent_encoding
        print(r.text)
    except:
        print("请求异常")

    使用 post 方法发送请求

    # 发送 post 请求
    import requests
    url = 'https://www.lagou.com/zhaopin/Python/?labelWords=label'
    data = {
        "first":"true",
        "pn":1,
        "kd":"python"
    }
    kv = {'Referer':'https://www.lagou.com/zhaopin/Python/?labelWords=label',
         'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36'}
    r = requests.post(url,headers=kv,data=data)
    print(r.text)
    print(r.json())

    使用代理 IP

    • 只需在(get 或 post )传递 proxies 参数就可以了实例代码如下:
      import requests
      url = 'http://httpbin.org/get'
      kv = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36'}
      pr = {
          "http":"101.64.32.100:808"
      }
      r = requests.get(url,headers=kv,proxies=pr)
      # 使用打开文件的方式
      with open('xx.html','w',encoding='utf-8') as fp:
          fp.write(r.text)

      requests处理cookie信息

      import requests
      
      r = requests.get("https://www.baidu.com/")
      print(r.cookies)
      # 以字典的方式展示cookies信息
      print(r.cookies.get_dict())

      session

      • 如果使用 requests ,要共享 cookie 的目的,那么可以 requests 库给我们提共的 session 对象,这里的 session 只是一个绘画对象而已

      登入人人网实例

      import requests
      
      url = "http://www.renren.com/PLogin.do"
      
      data = {"email":"970138074@qq.com","password":"pythonspider"}
      kv = {
          "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36"
      }
      # 登入
      session = requests.Session()
      session.post(url,data=data,headers=kv)
      # 访问个人中心
      resp = session.get("http://www.renren.com/880151247/profile")
      with open('renren.html','w',encoding='utf-8') as fp:
          fp.write(resp.text)

      要获取网站上的视频或图片就将获取的内容返回为二进制格式,实例如下:

      import requests
      response = requests.get('https://github.com/favicon.ico')
      print(type(response.text),type(response.content))
      print(response.text)
      # content 是获取内容的二进制内容
      print(response.content)

      有时候我们获取的内容格式为 json 格式可以这样解析

      import requests
      response = requests.get("http://httpbin.org/get")
      print(type(response.text))
      print(response.json())
      print(type(response.json()))

      以下是 requests 库的各种请求的返回内容

      import requests
      response = requests.get('https://www.baidu.com/?tn=monline_3_dg')
      # 打印response的类型
      print(type(response))
      # 查看返回的状态码
      print(response.status_code)
      # 打印返回的值的属性
      print(type(response.text))
      # 打印返回的值
      print(response.text)
      # 查看返回的cookies值
      print(response.cookies)
      import requests
      requests.post('https://www.baidu.com/?tn=monline_3_dg')
      requests.put('https://www.baidu.com/?tn=monline_3_dg')
      requests.delete('https://www.baidu.com/?tn=monline_3_dg')
      requests.head('https://www.baidu.com/?tn=monline_3_dg')
      requests.options('https://www.baidu.com/?tn=monline_3_dg')
  • 相关阅读:
    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
    输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
    输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
    输入一个链表,反转链表后,输出链表的所有元素。java实现
    少一点虚荣,多一点务实
    Mysql存储引擎__笔记
    osi七层模型和两主机传输过程:
    redis_笔记
    zookeeper_笔记
    rest和soap_笔记
  • 原文地址:https://www.cnblogs.com/yuanjian6/p/10166417.html
Copyright © 2011-2022 走看看