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')
  • 相关阅读:
    如何将网格式报表打印成其它样式
    拥有与实力不相称的脾气是种灾难——北漂18年(23)
    8.8.1 Optimizing Queries with EXPLAIN
    mysql 没有rowid 怎么实现根据rowid回表呢?
    secondary index
    8.5.5 Bulk Data Loading for InnoDB Tables 批量数据加载
    mysql 中key 指的是索引
    8.5.4 Optimizing InnoDB Redo Logging 优化InnoDB Redo 日志
    8.5.3 Optimizing InnoDB Read-Only Transactions 优化InnoDB 只读事务
    8.5.1 Optimizing Storage Layout for InnoDB Tables InnoDB表的存储布局优化
  • 原文地址:https://www.cnblogs.com/yuanjian6/p/10166417.html
Copyright © 2011-2022 走看看