鱼C论坛

 找回密码
 立即注册

课后作业054讲

已有 342 次阅读2019-12-11 10:35 |个人分类:课后作业

测试题:
0. urlopen() 方法的 timeout 参数用于设置什么?
答:设置网址访问超时时间。
1. 如何从 urlopen() 返回的对象中获取 HTTP 状态码?
答:使用urlopen().getcode()
2. 在客户端和服务器之间进行请求-响应时,最常用的是哪两种方法?
答:get 和 post
3. HTTP 是基于请求-响应的模式,那是客户端发出请求,服务端做出响应;还是服务端发出请求,客户端做出响应呢?
答:一般post是客户端发出的请求,get是服务器发出的。
4. User-Agent 属性通常是记录什么信息?
答:系统环境,比如操作系统、浏览器版本
5. 如何通过 urlopen() 使用 POST 方法像服务端发出请求?
答:urlopen(url,data)
6. 使用字符串的什么方法将其它编码转换为 Unicode 编码?
答:encode()
7. JSON 是什么鬼?
答复:是一种轻量级的数据交换格式

动动手:
0. 配合 EasyGui,给“下载一只猫“的代码增加互动:
  • 让用户输入尺寸;
  • 如果用户不输入尺寸,那么按默认宽400,高600下载喵;
  • 让用户指定保存位置。

程序实现如下图:



答:




1. 写一个登录豆瓣的客户端。
这道题可能要难为大家了,因为需要 N 多你没学过的知识!
不过我也不打算让你断送希望,下边是一个可行的 Python 2 的代码片段,请修改为 Python 3 版本。其中一些库和知识点你可能还没学过,但凭借着过人的自学能力,你可以在不看答案的情况下完成任务的,对吗?
程序实现如下图:

Python 2 实现代码:
  1. # -- coding:gbk --
  2. import re
  3. import urllib, urllib2, cookielib

  4. loginurl = 'https://www.douban.com/accounts/login'
  5. cookie = cookielib.CookieJar()
  6. opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))

  7. params = {
  8. "form_email":"your email",
  9. "form_password":"your password",
  10. "source":"index_nav" #没有的话登录不成功
  11. }

  12. #从首页提交登录
  13. response=opener.open(loginurl, urllib.urlencode(params))

  14. #验证成功跳转至登录页
  15. if response.geturl() == "https://www.douban.com/accounts/login":
  16.     html=response.read()

  17.     #验证码图片地址
  18.     imgurl=re.search('<img id="captcha_image" src="(.+?)" alt="captcha" class="captcha_image"/>', html)
  19.     if imgurl:
  20.         url=imgurl.group(1)
  21.         #将图片保存至同目录下
  22.         res=urllib.urlretrieve(url, 'v.jpg')
  23.         #获取captcha-id参数
  24.         captcha=re.search('<input type="hidden" name="captcha-id" value="(.+?)"/>' ,html)
  25.         if captcha:
  26.             vcode=raw_input('请输入图片上的验证码:')
  27.             params["captcha-solution"] = vcode
  28.             params["captcha-id"] = captcha.group(1)
  29.             params["user_login"] = "登录"
  30.             #提交验证码验证
  31.             response=opener.open(loginurl, urllib.urlencode(params))
  32.             ''' 登录成功跳转至首页 '''
  33.             if response.geturl() == "http://www.douban.com/":
  34.                 print 'login success ! '

报错了,被禁爬了、

本讲总结:
  1. 发出请求的永远是客户端,做出响应的永远是服务端

路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 23:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部