zoukankan      html  css  js  c++  java
  • python的爬虫入门学习2

    0.urlopen()方法的timeout参数用于设置什么:

              用于设置超时时间(答:timeout 参数用于设置连接的超时时间,单位是秒)

    1. 如何从 urlopen() 返回的对象中获取 HTTP 状态码?

    用getcode()方法

    
    response = urllib.request.urlopen(url)#打开url网址
    code = response.getcode()#获取HTTP状态码
    

    2. 在客户端和服务器之间进行请求-响应时,最常用的是哪两种方法?

    答:GET 和 POST。

               response=urllib.request.urlopen("url")

               或response=urllib.request.Response("url")

                  Response.urlopen()

    3. HTTP 是基于请求-响应的模式,那是客户端发出请求,服务端做出响应;还是服务端发出请求,客户端做出响应呢

    回答:是客户端发出请求,服务器响应

    4.User-Agent 属性通常是记录什么信息

    记录的是用户与服务器交互的信息

    答:普通浏览器会通过该内容向访问网站提供你所使用的浏览器类型、操作系统、浏览器内核等信息的标识。

    5.如何通过 urlopen() 使用 POST 方法向服务端发出请求?

    答:urlopen 函数有一个 data 参数,如果给这个参数赋值,那么 HTTP 的请求就是使用 POST 方式;

    如果 data 的值是 NULL,也就是默认值,那么 HTTP 的请求就是使用 GET 方式

    6. 使用字符串的什么方法将其它编码转换为 Unicode 编码

    答:decode。decode 的作用是将其他编码的字符串转换成 unicode 编码,相反,encode 的作用是将 unicode 编码转换成其他编码的字符串

    html=response.read().decode(" Unicode ")

    7. JSON 是什么鬼

    答:JSON 是一种轻量级的数据交换格式,说白了这里就是用字符串把 Python 的数据结构封装起来,便与存储和使用

    是一种传递对象的语法,对象可以是name/value 数组

    8.配合 EasyGui,给“下载一只猫“的代码增加互动(关于easygui安装)

    • 让用户输入尺寸;
    • 如果用户不输入尺寸,那么按默认宽400,高600下载喵;
    • 让用户指定保存位置
    import easygui as g
    import urllib.request
    
    def main():
        msg = "请填写喵的尺寸"
        title = "下载一只喵"
        fieldNames = ["宽:", "高:"]
        fieldValues = []
        size = width, height = 400, 600
        fieldValues = g.multenterbox(msg, title, fieldNames, size)
    
        while 1:
            if fieldValues == None:
                break
            errmsg = ""
    
            try:
                width = int(fieldValues[0].strip())
            except:
                errmsg += "宽度必须为整数!"
    
            try:
                height = int(fieldValues[1].strip())
            except:
                errmsg += "高度必须为整数!"    
    
            if errmsg == "":
                break
            
            fieldValues = g.multenterbox(errmsg, title, fieldNames, fieldValues)
    
        url = "http://placekitten.com/g/%d/%d" % (width, height)
    
        response = urllib.request.urlopen(url)
        cat_img = response.read()
    
        filepath = g.diropenbox("请选择存放喵的文件夹")
    
        if filepath:
            filename = '%s/cat_%d_%d.jpg' % (filepath, width, height)
        else:
            filename = 'cat_%d_%d.jpg' % (width, height)
    
        with open(filename, 'wb') as f:
            f.write(cat_img)
    
    if __name__ == "__main__":
        main()

    9.登陆豆瓣客户端

    import re
    import urllib.request
    from http.cookiejar import CookieJar
    
    # 豆瓣的登录url 
    loginurl = 'https://www.douban.com/accounts/login'
    cookie = CookieJar()
    opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor)
    
    data = {
        "form_email":"your email",
        "form_password":"your password",
        "source":"index_nav"
    }
    data = {}
    data['form_email'] = '你的账号'
    data['form_password'] = '你的密码'
    data['source'] = 'index_nav'
    
    response = opener.open(loginurl, urllib.parse.urlencode(data).encode('utf-8'))
    
    #验证成功跳转至登录页
    if response.geturl() == "https://www.douban.com/accounts/login":
        html = response.read().decode()
        
        #验证码图片地址
        imgurl = re.search('<img id="captcha_image" src="(.+?)" alt="captcha" class="captcha_image"/>', html)
        if imgurl:
            url = imgurl.group(1)
            # 将验证码图片保存至同目录下
            res = urllib.request.urlretrieve(url, 'v.jpg')
    
            # 获取captcha-id参数
            captcha = re.search('<input type="hidden" name="captcha-id" value="(.+?)"/>' ,html)
    
            if captcha:
                vcode = input('请输入图片上的验证码:')
                data["captcha-solution"] = vcode
                data["captcha-id"] = captcha.group(1)
                data["user_login"] = "登录"
    
                # 提交验证码验证
                response = opener.open(loginurl, urllib.parse.urlencode(data).encode('utf-8'))
    
                # 登录成功跳转至首页 '''
                if response.geturl() == "http://www.douban.com/":
                    print('登录成功!')
    

          

  • 相关阅读:
    欧拉回路 定理
    UESTC 1087 【二分查找】
    POJ 3159 【朴素的差分约束】
    ZOJ 1232 【灵活运用FLOYD】 【图DP】
    POJ 3013 【需要一点点思维...】【乘法分配率】
    POJ 2502 【思维是朴素的最短路 卡输入和建图】
    POJ 2240 【这题貌似可以直接FLOYD 屌丝用SPFA通过枚举找正权值环 顺便学了下map】
    POJ 1860【求解是否存在权值为正的环 屌丝做的第一道权值需要计算的题 想喊一声SPFA万岁】
    POJ 1797 【一种叫做最大生成树的很有趣的贪心】【也可以用dij的变形思想~】
    js 实现slider封装
  • 原文地址:https://www.cnblogs.com/chmusk/p/11078940.html
Copyright © 2011-2022 走看看