51Testing软件测试论坛

标题: 学python的那些事——初学Python之requests(1) [打印本页]

作者: 大C    时间: 2016-7-4 11:22
标题: 学python的那些事——初学Python之requests(1)
为了做接口测试,于是我决定去学习python,在学习的时候,我是只学到了函数,就直接跳到requests(爬虫)进行了学习。很难,但是也坚持过来了。
马上我们将会进入到requests模块,也是我们做接口测试的时候会接触的最多的模块。你准备好了吗?
在学习requests之前,我们先来了解一下,什么是爬虫
爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本

4、requests
     4.1 使用requests进行爬取
                下面是我编写的第一个爬虫的脚本

                import requests# 导入requests模块
                r = requests.get('https://daohang.qq.com').content# 通过requests.get方法访问地址https://daohang.qq.com,再使用r.content获取返回的bytes内容
                print(r) # 打印获取到的内容


                结果是不是很熟悉?没错,这里的结果和使用urlopen的时候打印r.read()的结果是一样的,因为这里选择了r.content方法,使结果返回的是bytes型的数据,其实等于是html = bytes(bytearray(html, encoding='utf-8')) 。而requests中如果想使结果变的更加美观则不需要urlopen那么复杂。在urlopen中,我们需要使用decode()方法进行解析,而requests中我们只需要将r.content改变为r.text就可以了
               
                import requests
                r = requests.get('https://daohang.qq.com').text
                print(r)

                看到结果了吗?是不是很神奇?
                  
                         注: urlopen通常是用来爬取网页内的内容 ,而requests.get/post通常是访问的网址接口类的来获取内容


     4.2 设置headers
import requests
headers = {
           "url":"",               # 配置headers中的各项参数,headers的作用类似一个字典,字典的键是唯一且不可变的
           "Host":"",
           "Referer":"",
           "User - Agent":"",
           }
url = '接口地址'
data = {"service":"","tab":"tab2","username":'xxxx',"password":'xxxx'} # 在data中设置各项参数,在访问的时候可以传参
repsonse = requests.get(url,headers = headers,data = data) .text# 通过requests.get方法对目标链接进行访问,并且调用headers与data两个参数,实现自动登录功能.并通过过r.text实现转码
print(repsonse) # 打印从页面中获取的内容

          运行上述代码,我们可以实现一个简单的接口,模拟登陆的功能。那么,为什么我们要去设置headers呢?有些时候,我们并不能够通过链接直接进行访问,所以这个时候,我们就需要通过设置headers,进行完全模拟请求的封包信息进行访问


     4.3 设置代理

               为了避免一些站点对访问的次数和IP的限制,我们在有些时候必须通过设置代理,以及更换代理来帮助我们工作。那么,怎么通过python,去设置代理呢,我们看下面这段代码
           import requests
             proxies = {'代理地址'}
             response = requests.get('http://python.jobbole.com/81341/',proxies = proxies).text
             print(response)


             这里,我们把代理的地址赋予proxies,再通过使用requests.get进行访问的时候,通过代理去访问,并获取到返回内容


     4.4 HTTP异常处理
               在实际工作中,我们可能因为这样或者是那样的原因,导致请求失败。那么这个时候,我们想要去解决这个错误,首先就是要去定位这个错误。在python中,可是使用URLError库,以及try-except语句来帮助我们捕获相应的异常。下面是一个例子。

            proxies = {'代理地址'}
          try:
               response = requests.get('http://python.jobbole.com/81341/', proxies=proxies).text
          except requests.HTTPError as e: # 捕获http的异常
               print(e.code)               # 打印http返回的状态码
          except requests.URLError as e: # 捕获URLError
               print(e.reason)             # 打印捕获到的URLError信息
          else:
               print(response)             # 打印爬取到的内容


          首先我们来看一下,这里为什么先去捕获HTTPError呢?在上面我们也讲了,HTTPError是URLError的子类,在编程中,都是子类在父类之前的,所以,这里我们先对HTTPError进行捕获,如果捕获不到HTTPError,我们再对URLError进行捕获,如果,没有捕获到异常,就打印出爬取的内容。



作者: 雷哥V5    时间: 2016-7-4 11:51
支持c妹,抱大腿
作者: 大C    时间: 2016-7-4 11:54
雷哥V5 发表于 2016-7-4 11:51
支持c妹,抱大腿

不要闹
作者: ajh0000    时间: 2016-7-4 13:36
支持大神C总
作者: qwe7023804    时间: 2016-7-4 14:23
我也准备写这个,可以一起学不?
作者: 大C    时间: 2016-7-4 15:06
qwe7023804 发表于 2016-7-4 14:23
我也准备写这个,可以一起学不?

加油,共勉。我会不定期更新学习笔记。一起学呗
作者: qwe7023804    时间: 2016-7-4 15:23
大C 发表于 2016-7-4 15:06
加油,共勉。我会不定期更新学习笔记。一起学呗

你都看的什么书,有推荐的吗
作者: 大C    时间: 2016-7-5 09:54
qwe7023804 发表于 2016-7-4 15:23
你都看的什么书,有推荐的吗

主要就是看廖雪峰和小甲鱼的。当然还有虫师




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2