• urllib模块基本用法


    urllib

    - python中自带的一个基于爬虫的模块。
    - 作用:可以使用代码模拟浏览器发起请求。 (含2个子模块 request parse)
    - 使用流程:
        - 指定url
        - 发起请求
        - 获取页面数据
        - 持久化存储

    # 需求:爬取搜狗首页的页面数据
     
    import urllib.request
    
    #1. 指定url  (必须以字符串形式)
    url = 'https://www.sogou.com/'
    #2. 发起请求:urlopen 可以根据指定的url发起请求,且返回一个相应对象
    response = urllib.request.urlopen(url=url)
    #3. 获取页面数据:read函数的返回值就是相应对象中存储的页面数据(bytes类型)
    page_text = response.read()
    #4. 持久化存储
    with open('./sogou.html','wb')as fp:
        fp.write(page_text)
        print('写入数据成功')
    # 需求: 爬起指定词条对应的页面数据
    
    import urllib.request
    import urllib.parse
    
    #指定url
    url= 'https://www.sogou.com/web?query='
    #url 特性:url不可以存在非ASCII编码的字符数据
    word = urllib.parse.quote('周杰伦')     #%E4%BA%BA%E6%B0%91%E5%B8%81
    url += word  #有效的url   https://www.sogou.com/web?query=%E4%BA%BA%E6%B0%91%E5%B8%81
    
    #发请求
    response = urllib.request.urlopen(url=url)
    
    #获取页面数据
    page_text = response.read()
    
    #持久化存储
    with open('zhoujielun.html','wb') as fp:
        fp.write(page_text)
        print('done')
    • 反爬机制:网站检查请求的UA,如果发现UA是爬虫程序,则拒绝提供网站数据
    • User-Agent(UA):请求载体的身份标识。
    • 反反爬机制:伪装爬虫程序的请求UA 
      import urllib.request
      
      url = 'http://www.baidu.com/'
      #UA伪装
      #1 自定制一个请求对象,写成字典的格式
      headers = {
          'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
      }
      request = urllib.request.Request(url=url, headers = headers)
      
      #2 针对自定制的请求对象发起请求
      response = urllib.request.urlopen(request)
      
      page_text = response.read()
      
      with open('baidu.html','wb') as fp:
          fp.write(page_text)
          

      urllib模块发起POST请求

      • 需求 :爬取百度翻译的翻译结果  。知识点: 抓包工具network下的XHR是针对ajax请求的

        import urllib.request
        import urllib.parse
        # 指定url
        url = 'https://fanyi.baidu.com/sug'
        
        #post请求携带的参数进行处理 流程:
        #1 将post请求参数封装到字典
        data = {
            'kw':'西瓜'
        }
        #2 使用parse模块中的urlencode(返回值类型为str)进行编码处理
        data = urllib.parse.urlencode(data)
        #3 将步骤2编码结果转换成byte类型
        data = data.encode()
        
        #发起post请求:urlopen函数的data参数表示的就是经过处理之后的post请求
        response = urllib.request.urlopen(url=url,data=data)
        
        page_text = response.read()  #返回值是一个json字符串
        
        with open('translate.html','wb') as f:
            f.write(page_text)
  • 相关阅读:
    2013-11-26的工作-【工作日志】
    grails下的httpclient
    如何解决grails2.3.2中不能运行fork模式
    华丽的bootstrap3碰到土鳖IE6
    grails中报Cannot create a session after the response has been committed异常的解决办法
    听自己喜欢的文章-【睿读】
    动态规划----完全背包问题
    动态规划----最长公共子序列(LCS)问题
    动态规划----数字三角形问题
    动态规划----钢条切割问题
  • 原文地址:https://www.cnblogs.com/lys666/p/10477684.html
Copyright © 2020-2023  润新知