Python 网络爬虫笔记1 -- Requests库

版权声明: https://blog.csdn.net/Wang_Jiankun/article/details/83721599

Python 网络爬虫笔记1 – Requests库


Python 网络爬虫系列笔记是笔者在学习嵩天老师的《Python网络爬虫与信息提取》课程及笔者实践网络爬虫的笔记。

课程链接:Python网络爬虫与信息提取
参考文档:
Requests 官方文档(英文)
Requests 官方文档(中文)
Beautiful Soup 官方文档
re 官方文档
Scrapy 官方文档(英文)
Scrapy 官方文档(中文)


一、Requests库安装


介绍: Requests库主要用来获取HTML网页文件

pip 安装:

pip install requests

导入模块:

import requests

测试:

import requests

# 访问百度首页
r = requests.get('http://www.baidu.com')
# 连接状态,连接成功为200
print(r.status_code)
# 百度首页内容,html
print(r.text)

二、方法


1、request() – 构造请求

函数原型:

request(method, url, **kwargs)

参数:

  • method:请求的方法,有:‘GET’,‘HEAD’,‘POST’,‘PUT’,‘PATCH’,‘DELETE’
  • url:请求的URL链接
  • **kwargs: 13个可选参数
  • params: 字典或字节序列,作为参数增加到url中
  • data:字典、字节序列或文件对象,作为Request的内容
  • json:JSON格式的数据,作为Request的内容
  • headers: 字典,HTTP定制头
  • cookies:字典或CookieJar,Request中的cookie
  • files:字典类型,传输文件
  • auth:元组,支持HTTP认证功能
  • timeout: 设定超时时间,单位为秒
  • allow_redirects:True/False,默认为True,重定向开关
  • proxies: 字典类型,设定访问代理服务器,可以增加登录认证
  • verify:True/False,默认为True,认证SSL证书开关
  • stream:True/False,默认为True,获取内容立即下载开关
  • cert: 本地SSL证书路径

返回: Response 对象,有以下属性和方法

  • status_code:HTTP请求的返回状态,200表示连接成功,404表示失败
  • text:HTTP响应内容的字符串形式,即rl对应的页面内容
  • encoding:从HTTP header中猜测的响应内容编码方式,如果header中不存在charset则认为编码为ISO‐8859‐1,也是text解码的编码格式
  • apparent_encoding:从内容中分析出的响应内容编码方式,当header中不存在charset时,encoding应赋值为apparent_encoding
  • content:HTTP响应内容的二进制形式

实例:

import requests

# request 使用'GET'方法创建连接,获得http://python123.io首页的内容
r = requests.request('GET', 'http://python123.io/index')
print(r.text)

2、get() – 获取HTML网页

函数原型:

get(url, params=None, **kwargs)

参数:

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

返回: Response 对象

实例:

import requests

# 修改url链接实现登入操作
kv = {'email': '[email protected]', 'password': 'xxxx'}
r = requests.get('http://python123.io/index/login', params=kv)
print(r.url)
=> https://python123.io/index/login?email=xxxx%40qq.com&password=xxxx

# 设置超时时间
r = requests.get('http://www.baidu.com', timeout=10)

# 设定访问代理服务器
pxs = { 'http': 'http://user:[email protected]:1234' 
		'https': 'https://10.10.10.1:4321' }
r = requests.get('http://www.baidu.com', proxies=pxs)

3、head() – 获取HTML网页头信息

函数原型:

head(url, **kwargs)

参数:

  • url:拟获取页面的url链接
  • **kwargs:12个控制访问的参数

返回: Response 对象

实例:

import requests

# 只获取HTML网页的头信息
r = requests.head('https://www.baidu.com')
print(r.headers)

4、post() – 向HTML网页提交POST请求

函数原型:

post(url, data=None, json=None, **kwargs)

参数:

  • url:拟更新页面的url链接
  • data:字典、字节序列或文件,Request的内容
  • json:JSON格式的数据,Request的内容
  • **kwargs:其它的11个控制访问的参数

返回: Response 对象

实例:

import requests

# post请求,添加Request的内容
kv = {'key1': 'value1', 'key2': 'value2'}
body = '主体内容'
r1 = requests.post('https://www.baidu.com', data=kv)
r2 = requests.post('https://www.baidu.com, data=body)
r3 = requests.post('https://www.baidu.com', json=kv)

# post请求,修改请求的头信息,伪装为浏览器请求
hd = {'user‐agent': 'Chrome/10'}
r4 = requests.post('https://www.baidu.com', headers=hd)

# post请求,传输文件
fs = {'file': open('data.xls', 'rb')}
r4 = requests.post('https://www.baidu.com', files=fs)

5、put() – 向HTML网页提交PUT请求

函数原型: 必须将URL位置中所有字段一并提交到URL,未提交字段被删除

put(url, data=None, **kwargs)

参数:

  • url:拟更新页面的url链接
  • data:字典、字节序列或文件,Request的内容
  • **kwargs:其它的12个控制访问的参数

返回: Response 对象


6、patch() – 向HTML网页提交局部修改请求

函数原型: 仅需提交URL位置中要修改的局部信息,节省网络带宽

patch(url, data=None, **kwargs)

参数:

  • url:拟更新页面的url链接
  • data:字典、字节序列或文件,Request的内容
  • **kwargs:其它的12个控制访问的参数

返回: Response 对象-


7、delete() – 向HTML页面提交删除请求

函数原型:

delete(url, **kwargs)

参数:

  • url:拟删除页面的url链接
  • **kwargs:12个控制访问的参数

返回: Response 对象


三、爬取网页的通用代码框架


Requests库异常:

异常 说明
requests.ConnectionError 网络连接错误异常,如DNS查询失败、拒绝连接等
requests.HTTPError HTTP 错误异常
requests.URLRequired URL缺失异常
requests.TooManyRedirects 超过最大重定向次数,产生重定向异常
requests.ConnectTimeout 连接远程服务器超时异常
requests.Timeout 请求URL超时,产生超时异常

抛出异常的方法:
requests.raise_for_status():如果不是200,产生异常requests.HTTPError

爬取网页框架:

import requests

def get_html_text(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return '产生异常'
    
if __name__ == '__main__':
    url = 'http://www.baidu.com'
    print(get_html_text(url))

猜你喜欢

转载自blog.csdn.net/Wang_Jiankun/article/details/83721599