##爬虫
    -通用网络爬虫
        其的主要目的是将互联网上的资源下载到本地形成一个镜像备份。类似百度等搜索引擎
    
    -聚焦爬虫
        其面向特定需求的爬虫程序,与通用爬虫的区别在于对数据进行筛选尽量爬取相关数据
    
    -爬虫优化
        1.尽量减少请求次数
        2.web页面不好爬取时爬app和h5页面(手机)    
        
##HTTP和HTTPS
    --超文本传输协议
    HTTP 端口80
    HTTPS时加入了ssl安全传输协议   端口443
    
    
##get请求方式获取
    ---get方式一般用于向服务器获取数据
     --parse用于url编码
        实际使用是将url地址与想要查询的数据信息拼接形成完整地url
        例如
        # https://tieba.baidu.com/f?ie=utf-8&kw=火影忍者&fr=search   
        # https://tieba.baidu.com/f?kw=火影忍者&ie=utf-8&pn=50     
        base_url = ‘http://wwww.baidu.com/f?‘
        # 搜索信息关键字
        wd = input(‘搜索信息关键字‘)
        pn = input(‘pn值‘)
        q_data = {
            ‘wd‘ = wd,
            ‘pn‘ = pn,
        } 
        # 对q_data进行编码使用parse模块
        q_data = parse.urlencode(q_data)
        # 拼接url
        full_url = base_url + q_data
        # 构造请求对象
        req = request.Request(url=full_url,headers=headers)
        # 获取响应对象
        response = request.urlopen(req).read().decode(‘utf-8‘)
        
        
##post请求方式
    --post方式需要向服务器发送一些数据
        需要注意的是post传数据时不仅要使用parse转码还需要将其转化为字节形式
        例如:
                base_url = ‘http://wwww.baidu.com/‘
                headers = {
                    ‘User-Agent‘: "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0",
                }
                # post携带数据
                kw = input(">>")
                data = {
                    ‘kw‘: kw
                }
                parse_data = parse.urlencode(data)
            
                req = request.Request(url=base_url,data=bytes(data,encoding=‘utf-8‘),headers=headers)
                response = request.urlopen(req).read().decode(‘utf-8‘)
    
    
##cookies
    --获取cookies
        cookies_object = cookiejar.CookieJar()
        cookies_handler = request.HTTPCookieProcessor(cookies_object)
        http_handler = request.HTTPHandler()
        https_handler = request.HTTPSHandler()
        opener = request.build_opener(http_handler,https_handler,cookies_handler)
##ssl
    ---免认证
        # 忽略未经核实的ssl证书认证
        ssl._create_default_https_context = ssl._create_unverified_context()    
##登录网页爬取开心网
    ---登录url
        https://security.kaixin001.com/login/login_post.php
        邮箱:loginemail
        密码:password
##有道翻译
    ‘‘‘
    分析:
    爬取步骤  
        1 获取url
        2 data数据填写 headers数据填写
        3 构造request对象生成响应
    data中的数据{
                i  "job"
                from   "AUTO"
                to "AUTO"
                smartresult    "dict"
                client "fanyideskweb"
                salt   "15842516730329"
                sign   "60f53618f3fa667e6d3192148c8c1a03"
                ts "1584251673032"
                bv "e2a78ed30c66e16a857c5b6486a1d326"
                doctype    "json"
                version    "2.1"
                keyfrom    "fanyi.web"
                action "FY_BY_REALTlME"
    }  
    headers中的数据{
                Host: fanyi.youdao.com
                User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0
                Accept: application/json, text/javascript, */*; q=0.01
                Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
                Accept-Encoding: gzip, deflate  # 此行使用时需要注释掉 不要接受压缩信息文件
                Content-Type: application/x-www-form-urlencoded; charset=UTF-8
                X-Requested-With: XMLHttpRequest
                Content-Length: 236 
                Origin: http://fanyi.youdao.com
                Connection: keep-alive
                Referer: http://fanyi.youdao.com/
                # 我写代码时cookie有问题换了别人的cookie值可以正常爬取而我的会生成{‘errorcode’:50}错误
                Cookie: OUTFOX_SEARCH_USER_ID=-140868279@123.121.59.79; OUTFOX_SEARCH_USER_ID_NCOO=1766192849.313334; _ntes_nnid=700fcdc75a16b68417175b615d961ea3,1537510225088; YOUDAO_MOBILE_ACCESS_TYPE=1; JSESSIONID=aaa_XsoMzWSA17Bi3OCdx; ___rl__test__cookies=1584251673023
    }  
    难点
        因为是post方式提交的数据所以在浏览器调试模式中查找请求方式为post的进行查看
        post提交数据中i 为查询的数据   salt、sign和ts    会发生变化
        获取salt和sign 的加密方式   在   fanyi.min.js    文件中使用代码格式化工具https://tool.oschina.net/codeformat/js 查找salt与sign关键字
        salt: i    i = r + parseInt(10 * Math.random(), 10);
        sign:  n.md5("fanyideskweb" + e + i + "Nw(nmmbP%A-r6U3EUn]Aj")
        ts:r       r = "" + (new Date).getTime(),
    ‘‘‘
    
    
##豆瓣电影分类排行
    分析
    爬取步骤
        1.获取url