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('登录成功!')
    

          

  • 相关阅读:
    关于表格
    split函数
    javac classpath和java classpath
    ORA01460: 转换请求无法实现或不合理 的原因
    业务流程学习(1)
    启动oracle10监听器错误:本地计算机上的OracleOraDb10g_home1TNSListener服务启动后又停止了 解决方案
    CF1594F. Ideal Farm
    CF1373G. Pawns
    CF1373F. Network Coverage
    CF1515F. Phoenix and Earthquake
  • 原文地址:https://www.cnblogs.com/chmusk/p/11078940.html
Copyright © 2011-2022 走看看