1. <em id="yud1w"><acronym id="yud1w"><u id="yud1w"></u></acronym></em>
      
      
      <button id="yud1w"></button>

      python

      当前位置:首页?>?requests爬虫?>?当前文章

      requests爬虫

      requests模块的get请求基本使用案例

      2019-07-18 162赞 python中国网
      每篇文章努力于解决一个问题!python高级、python面试全套、操作系统经典课等可移步文章底部。

        基于requests模块的简单get请求。

        需求:爬取百度首页。

        注意User-Agent:

        User-Agent:是请求头header的一部分,客户端的身份标识,使用浏览器发起的请求,身份标识为浏览器。

        User-Agent检测:网站服务器端通过检测User-Agent值辨别该请求是否为爬虫程序,因为正常用户对网站发起的请求的载体一定是某款浏览器,如果网站检测到某一请求载体身份标识不是浏览器,则让其请求失败。

        UA伪装:通过修改/伪装爬虫请求的User-Agent使得爬虫程序看起来像浏览器。具体实现见下属代码:

      # -*- coding: utf-8 -*-
      import requests
      
      #自定义请求头信息:UA伪装,将User-Agent键值对加到headers参数中即可
      headers={
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
          }
      url = 'https://www.baidu.com/'
      
      #发起请求,timeout参数设定的秒数过后停止等待响应
      r = requests.get(url=url,headers=headers,timeout=10)
      #指定解码方式(非必须项,requests可以自动判断)
      r.encoding = 'utf-8'
      
      #获取响应数据
      page_text = r.text
      
      #存储数据
      with open('baidu.html','w',encoding='utf-8') as f:
          f.write(page_text)
      
      print('网页编码是',r.encoding) #打印默认值,如果人为定义了则打印的是你设置的值
      print('请求的url是',r.url)
      print('响应头',r.headers)
      print('相应状态码',r.status_code)
      print('请求历史',r.history)
      print('是否重定向',r.is_redirect)
      # print('二进制内容',r.content)
      # 通过dir函数查看返回结果r包含哪些属性和方法
      print(dir(r))
      
      
      D:python3installpython.exe D:/python/py3script/test.py
      网页编码是 utf-8
      请求的url是 https://www.baidu.com/
      响应头 {'Bdpagetype': '1', 'Bdqid': '0x9a4a4d880009d2ce', 'Cache-Control': 'private', 'Connection': 'Keep-Alive', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html', 'Cxy_all': 'baidu+f46bb602e124780d589733fe09b0b454', 'Date': 'Wed, 17 Jul 2019 07:13:17 GMT', 'Expires': 'Wed, 17 Jul 2019 07:12:40 GMT', 'P3p': 'CP=" OTI DSP COR IVA OUR IND COM "', 'Server': 'BWS/1.1', 'Set-Cookie': 'BAIDUID=079CE5E7DEF0FF536737DCAC48512046:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, BIDUPSID=079CE5E7DEF0FF536737DCAC48512046; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, PSTM=1563347597; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, delPer=0; path=/; domain=.baidu.com, BDSVRTM=0; path=/, BD_HOME=0; path=/, H_PS_PSSID=1445_21087_29523_29518_28518_29099_28839_29220_26350_29071_28704; path=/; domain=.baidu.com', 'Strict-Transport-Security': 'max-age=172800', 'Vary': 'Accept-Encoding', 'X-Ua-Compatible': 'IE=Edge,chrome=1', 'Transfer-Encoding': 'chunked'}
      相应状态码 200
      请求历史 []
      是否重定向 False
      ['__attrs__', '__bool__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__nonzero__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_content', '_content_consumed', '_next', 'apparent_encoding', 'close', 'connection', 'content', 'cookies', 'elapsed', 'encoding', 'headers', 'history', 'is_permanent_redirect', 'is_redirect', 'iter_content', 'iter_lines', 'json', 'links', 'next', 'ok', 'raise_for_status', 'raw', 'reason', 'request', 'status_code', 'text', 'url']
      
      Process finished with exit code 0
      
      

        注意:访问r.text之时,requests会使用其推测的文本编码。大多数情况下requests模块可以正确解码,但是会有识别错误的时候,用r.encoding属性来指定解码方式,这样r.text就能使用正确解码了。

        此外:平时上网打不开网页我们会多刷新几次,所以爬虫请求网页也应该如此,以上程序太过简陋,我们可以借用递归来加强这个程序。

      # -*- coding: utf-8 -*-
      import requests
      
      def get_html(url,retry=2):
          try:
              r = requests.get(url=url,headers=headers,timeout=10)
          except Exception as e:
              print(e)
              if retry > 0:
                  get_html(url,retry-1)
          else:
              r.encoding = 'utf-8'
              page_text = r.text
              return page_text
      
      
      if __name__ == "__main__":
      
          # 自定义请求头信息
          headers = {
              'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
          }
          url = 'https://www.baidu.com/'
          html = get_html(url)
          with open('baidu.html','w',encoding='utf-8') as f:
              f.write(html)
      
      
      
      代码解释:
      1、用自定义函数get_html封装requests请求
      2、利用递归函数设置参数retry=2,请求失败则减1再请求直到retry <= 0
      
      

      文章评论

      requests模块的get请求基本使用案例文章写得不错,值得赞赏
      国产99视频精品免视看6