contextlib模块
之前的内容已经提到过读写文件的方法,必须在使用完毕后正确关闭它们,要么使用try...finally,要么使用with语句。
对于with方法,实际上并不是只有读写文件可以用,任何对象只要实现了上下文管理,就可以用with语句。
实现上下文管理是通过 和 这两个方法实现的。
@contextmanager
上面的写法比较繁琐,contextlib模块中的 可以提供相同的功能,比如改写上面的代码:
@contextmanager这个decorator接受一个generator,用yield语句把with ... as var把变量输出出去,然后,with语句就可以正常地工作了。
并且@contextmanager还能够实现在某段代码前后自动执行特性代码。
@closing
如果一个对象没有实现上下文,可以通过使用closing()来把它变为上下文对象。
closing()方法的实现非常简单,把任意对象变为上下文对象,并支持with语句。
urllib模块
urllib提供了许多用于操作URL的功能。
Get
urllib的 模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应:
如果我们要想模拟浏览器发送GET请求,就需要使用Request对象,通过往Request对象添加HTTP头,我们就可以把请求伪装成浏览器。例如,模拟iPhone 6去请求豆瓣首页:
Post
如果要以POST发送一个请求,只需要把参数data以bytes形式传入。下面是模拟微博登录的代码
Handler
如果还需要更复杂的控制,比如通过一个Proxy去访问网站,则需要利用ProxyHandler来处理。
领取专属 10元无门槛券
私享最新 技术干货