requests基础

爬虫的基本原理:爬虫本质上是模拟人浏览信息的过程,只不过他通过计算机来达到快速抓取筛选信息的目的。所以我们想要写一个爬虫,最基本的就是要将我们需要抓取信息的网页原原本本的抓取下来。这个时候就要用到requests库了。

1、requests的安装

requests库本质上就是模拟了我们用浏览器打开一个网页,发起请求是的动作。它能够迅速的把请求的html源文件保存到本地。

requests安装比较简单,pip install requests

2、requests的使用

开始要导入 Requests 模块:

1 import requests

然后,尝试获取某个网页。

1 r = requests.get('https://douban.com')

现在,有一个名为 r 的Response 对象。可以从这个对象中获取所有我们想要的信息。

Requests 简便的 API 意味着所有 HTTP 请求类型都是显而易见的。例如,你可以这样发送一个 HTTP POST 请求:

1 r = requests.post("http://httpbin.org/post")

其他 HTTP 请求类型:PUT,DELETE,HEAD 以及 OPTIONS 

1 r = requests.put("http://httpbin.org/put")
2 r = requests.delete("http://httpbin.org/delete")
3 r = requests.head("http://httpbin.org/get")
4 r = requests.options("http://httpbin.org/get")

传递 URL 参数

requests.get(url,params=None,**kwargs)方法

 1 #这个方法可以接收三个参数,其中第二个默认为None 第三个可选
 2 def get(url, params=None, **kwargs)
 3 #作用是模拟发起GET请求
 4 Sends a GET request.
 5 #模拟获取页面的url链接
 6 :param url: URL for the new :class:Request object. 
 7 #额外参数 字典或字节流格式,可选
 8 :param params: (optional) Dictionary or bytes to be sent in the query string for the :class:Request. 
 9 # 十二个控制访问参数,比如可以自定义header
10 :param **kwargs: Optional arguments that request takes. 
11 # 返回一个Response对象
12 :return: :class:Response <Response> object 
13 :type: requests.Response

下面着重讲一下 **kwargs 这个参数

kwargs: 控制访问的参数,均为可选项

params : 字典或字节序列,作为参数增加到url中

data : 字典、字节序列或文件对象,作为Request的内容 json : JSON格式的数据,作为Request的内容

headers : 字典,HTTP定制头

cookies : 字典或CookieJar,Request中的cookie

auth : 元组,支持HTTP认证功能

files : 字典类型,传输文件

timeout : 设定超时时间,秒为单位

proxies : 字典类型,设定访问代理服务器,可以增加登录认证

allow_redirects : True/False,默认为True,重定向开关

stream : True/False,默认为True,获取内容立即下载开关

verify : True/False,默认为True,认证SSL证书开关

cert : 本地SSL证书路径

url: 拟更新页面的url链接

data: 字典、字节序列或文件,Request的内容

json: JSON格式的数据,Request的内容

例如:

1 payload = {'key1': 'value1', 'key2': 'value2'}
2 r = requests.get("http://httpbin.org/get", params=payload)
3 
4 #结果
5 print(r.url)
6 http://httpbin.org/get?key2=value2&key1=value1

注意字典里值为 None 的键都不会被添加到 URL 的查询字符串里。

还可以将一个列表作为值传入:

1 payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
2 
3 r = requests.get('http://httpbin.org/get', params=payload)
4 print(r.url)
5 http://httpbin.org/get?key1=value1&key2=value2&key2=value3

响应内容:

我们能读取服务器响应的内容。

requests.Response

  • status_code状态码
  • headers应答的http头
  • json应答的json数据
  • text应答的Unicode编码的文本
  • content应答的字节流数据
  • cookies应答的cookies.自动处理。

常用的两个控制访问参数:

a. 假设我们需要在GET请求里自定义一个header头文件:

 1 import requests
 2 
 3 hd = {'User-agent':'123'}
 4 r = requests.get('http://www.baidu.com', headers=hd)
 5 print(r.request.headers)
 6 '''
 7 OUT:
 8 {'User-agent': '123', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive
 9 '}
10 '''

b. 假设我们要自定义一个代理池

1 pxs = { 'http': 'http://user:pass@10.10.10.1:1234',
2         'https': 'https://10.10.10.1:4321' }
3 r = requests.get('http://www.baidu.com', proxies=pxs)

3、requests抓取网页的通用框架

 1 import requests
 2 
 3 def getHtmlText(url):
 4     try:
 5         r = requests.get(url, timeout=30)
 6         # 如果状态码不是200 则应发HTTOError异常
 7         r.raise_for_status()
 8         # 设置正确的编码方式
 9         r.encoding = r.apparent_encoding
10         return r.text
11     except:
12         return "Something Wrong!"

 

posted @ 2017-06-25 18:18  Freeman耀  阅读(304)  评论(0编辑  收藏  举报