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

      

posted @ 2018-11-04 16:20  ch_musk  阅读(193)  评论(0编辑  收藏  举报