凡是过往,皆为序章

0%

Python爬虫_01(requests库)

这部分是python记录爬虫功能的笔记,刚刚入门,这篇总结 requests 库的使用。


关于更多requests库的知识,可以查看官方网站

request 库需要安装,比较容易,不再赘述。

requests库中有七个常用方法。

get()方法

获取一个网页最简单的方法就是

1
r = requests.get(url)

该方法用于构造一个向服务器请求资源的Request对象,该对象为requests库内部生成的。该方法返回的内容是一个包含服务器资源的Response对象,用r表示,代表一个Response对象。

get方法的完整使用如下:

1
requests.get(url [, params = None, **kwargs])

参数含义:

  • url:拟获取页面的url链接
  • params:url中的额外参数,字典或字节流格式,可选
  • **kwargs:12个控制访问的参数

通过查看requests库的源码我们可以发现,七个方法中,其他六个方法都是对get的调用,所以也可认为只有一个get()方法。

Response对象

Response对象包含爬虫返回的所有内容。

Response对象的属性

理解Requests库的异常

爬取网页的通用代码框架

网络连接有风险,异常处理很重要。

Request对象的异常

Response对象的异常

爬取页面的通用代码框架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import requests


def getHTMLText(url):
try:
r = requests.get(url, timeout = 30)
r.raise_for_status() # 如果状态码不是200,引发HTTPError异常
r.encoding = r.apparent_encoding # 使得返回内容的解码是正确的
return r.text
except:
return '产生异常'


if __name__ == '__main__':
url = 'http://www.baidu.com'
print(getHTMLText(url))

HTTP协议及requests库方法

一些方法的简单举例

Requests库的主要方法解析

1. requests.request(method, url, \kwargs)

  • method:请求方式,对应get/put/post等7种
  • url:拟获取页面的url链接
  • **kwargs:控制访问的参数,共13个

method的7种

1
2
3
4
5
6
7
r = requests.request('GET', url, **kwargs)
r = requests.request('HEAD', url, **kwargs)
r = requests.request('POST', url, **kwargs)
r = requests.request('PUT', url, **kwargs)
r = requests.request('PATCH', url, **kwargs)
r = requests.request('delete', url, **kwargs)
r = requests.request('OPTIONS', url, **kwargs) # 不常用

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

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

  2. data : 字典、字节序列或文件对象,作为Request的内容

  3. json : JSON格式的数据,作为Request的内容

  4. headers : 字典,HTTP定制头

  5. files : 字典类型,传输文件

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

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

  8. cookies : 字典或CookieJar,Request中的cookie

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

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

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

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

  13. cert:本地SSL证书路径

2. requests.get(url, params=None, \kwargs)

url : 拟获取页面的url链接

params : url中的额外参数,字典或字节流格式,可选

**kwargs: 12个控制访问的参数

3. requests.head(url, \kwargs)

url : 拟获取页面的url链接

**kwargs: 12个控制访问的参数

4. requests.post(url, data=None, json=None, \kwargs)

url : 拟更新页面的url链接

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

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

**kwargs: 12个控制访问的参数

5. requests.put(url, data=None, \kwargs)

url : 拟更新页面的url链接

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

**kwargs: 12个控制访问的参数

6. requests.patch(url, data=None, \kwargs)

url : 拟更新页面的url链接

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

**kwargs: 12个控制访问的参数

7. requests.delete(url, \kwargs)

url : 拟删除页面的url链接

**kwargs: 12个控制访问的参数

其他注意事项

HTTP请求头常见参数

  1. User-Agent:浏览器名称,如果我们使用爬虫发送请求,那么我们的User-Agent就是Python,很容易被反爬虫检测到;
  2. Referer:表明当前请求是从哪个URL过来的,这个一般也可以用来做反爬虫技术。如果不是从指定页面过来的,那么就不做相关的响应。
  3. Cookie:http协议视无状态的,也就是从一个人发送了两次请求,服务器没有能力知道这两个请求是否来自同一个人。因此这时候就用cookie来做标识。一般如果想要做登录后才能访问的网站,那么就需要发送cookie信息了。

常见响应状态码

  1. 200:请求正常,服务器正常返回数据;
  2. 301:永久重定向,比如在访问www.jingdong.com的时候回重定向到www.jd.com
  3. 302:临时重定向,比如在访问一个需要登录的页面的时候,而此时没有登录,那么就会重定向到登录界面;
  4. 400:请求的url在服务器上找不到,换句话说就是请求url错误;
  5. 403:服务器拒绝访问,权限不够;
  6. 500:服务器内部错误,可能是服务器出现bug了。

Cookies和Session

cookies

1
2
3
4
5
6
import requests

r = requests.get('http://www.baidu.com') # 获取百度的cookies
print(r.cookies) # <RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>

print(r.cookies.get_dict()) # get_dict()方法得到cookies的字典信息: {'BDORZ': '27315'}

Session

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import requests

url = 'http://www.renren.com/PLogin.do'
data = {
'email':'13287857692',
'password':'密码'
}
headers = {'user-agent':'Mozilla/5.0'}

session = requests.session()
session.post(url, data = data, headers = headers)

response = session.get('http://www.renren.com/974726184/profile')
with open('renrne.html', 'w', encoding='utf-8') as f:
f.write(response.text)
~感谢你请我吃糖果~
-------------本文结束,感谢您的阅读,欢迎评论留言!-------------