Python爬虫requests用法

Python requests库介绍

个人博客www.honywen.com

Python的库函数有很多可以用来实现爬虫,这里介绍一下我经常使用的requests库。

官方中文文档:快速上手 - Requests 2.18.1 文档

1- 库函数的安装

使用pip安装
$ pip install requests
或者使用easy_install安装
$ easy_install requests
还可以使用IDE自带的一些功能实现安装的

2- requests用法

这里我们就不一一的介绍requests的各种方法了,我们这里举两个例子分别介绍如何使用requests实现POST和GET两种常用的方法。


- GET方法请求页面

import requests
host = "www.honywen.com"
response = requests.get(host, headers=headers,timeout=1,params=payload,stream=True,proxies=proxies )
print(response.text)

这样就获得到了页面的源代码。

<!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8" />
    		<title>hi</title>
    	</head>
    	<body>
    		···
    		···
    		···
    	</body>
    </html>

这里我们解释一下上面的相关的代码

首先就是requests中除了host即网页的URL是必须的之外其他的参数都是可选的
headers=headers,timeout=1,params=payload,stream=True,proxies=proxies
这些都是可有可无的

- -发送参数的get请求

response = requests.get(host)

这样的请求一般是不可取的,因为大部分的网站都是有一定的反爬机制的,最简单的就是最容易被封的。

- -添加headers伪造浏览器进行请求

response = requests.get(host, headers=headers )

这里的常用的请求头如下所示:
HEADER = {‘Accept’: ‘text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8’,
‘Accept-Language’: ‘zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2’,
‘Cache-Control’: ‘max-age=0’,
‘Connection’: ‘Keep-alive’,
‘Upgrade-Insecure-Requests’: ‘1’,
‘User-Agent’:‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36’ }
之前写代码的时候找了很多的浏览器代理,在日常的代码中可以采用随机请求头来避免被封。
“Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36”
“(KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36”,
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 "
“(KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1”,
"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 "
“(KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11”,
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 "
“(KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6”,
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 "
“(KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6”,
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 "
“(KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1”,
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 "
“(KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5”,
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 "
“(KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5”,
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
“(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3”,
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 "
“(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3”,
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 "
“(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3”,
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
“(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3”,
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
“(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3”,
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
“(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3”,
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
“(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3”,
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 "
“(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3”,
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
“(KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3”,
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 "
“(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24”,
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 "
“(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24”

- -添加timeout来设置请求超时时间

response = requests.get(host, timeout=1 )

- -使用params来传递参数

payload = {"key1":value1,"key2":"value2"}
response = requests.get(host,params=payload )
通过参数设置其实最后实际的URL
http://www.honywen.com?key1=value1&key2=value2
初次之外还可以直接传递一个list
payload = {“key1”:value1,“key2”:[value2,value3]}
response = requests.get(host,params=payload )
最后实际的URL
http://www.honywen.com?key1=value1&key2=value2&key2=value3

- -使用stream=True来获取来自服务器的原始套接字响应

response = requests.get(host,stream=True )
然后获取原始套接字响应
response.raw
这里要提醒一下,只有设置了stream之后才能获取原始套接字,没有该参数是接收不到的。
<requests.packages.urllib3.response.HTTPResponse object at 0x101194810>
response.raw.read(10)
‘\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03’

- -使用proxies=proxies来设置代理

这里主要考虑的是访问国外的一些网站的时候,为了顺利的出去都是需要设置代理的
proxies = {
“http”: “http://149.28.21.37:3128”,
“https”: “http://149.28.21.38:1080”,
}
response = requests.get(“http://www.honywen.com”, proxies=proxies)

- -使用cookies更快的访问网站

Cookie 是一个保存在客户机中的简单的文本文件一般为4kb, 这个文件与特定的 Web网站关联在一起, 保存了该客户机访问这个Web网站时的相关信息, 使用cookie可以弥补HTTP无状态连接的缺点,维护web会话的状态

cookies = {'testCookies_1': 'Hello_Python3', 'testCookies_2': 'Hello_Requests'}
response = requests.get("http://example.org", cookies=cookies)

常用request方法请求参数基本就是以上几种了
接下来接收一下POST请求,大部分的参数是一样的


- -POST方法请求页面

post方法和get方法最主要的差别在于参数传递的不同。

- -使用data传递参数

post所传递的参数都是键值对的,所以可以使用字典也可以使用json来传递数据。

  1. 使用字典传递参数
    response = requests.post('http://www.honywen.com/post',data={"kay":"value"})
  2. 使用json来传递参数
    payload = {"key":"value"}
    response = requests.get('http://www.honywen.com/post',json = payload)
    同时也可以使用json库函数所提供的方法实现字典转化json数据进行传递。
    data=json.dumps(payload)

- -使用files来传递文件

上传文件一般情况下用的比较的少,主要的方法代码所示
firles = {‘file’:open(‘test.txt’,‘rb’)}
response = requests.post(url,files=files)

除了GET,POST方法之外还有其他的方法,这里就不详细说明了,参数同上。
requests.get(url) #GET请求
requests.post(url) #POST请求
requests.put(url) #PUT请求
requests.delete(url) #DELETE请求
requests.head(url) #HEAD请求
requests.options(url) #OPTIONS请求

- Response响应的处理

使用requests方法后,会返回一个response对象,其存储了服务器响应的内容,包括文本响应内容,状态码,cookies,

  1. response.status_code
    返回状态码

  2. response.url
    返回访问的url

  3. response.raw
    返回原始套接字
    4.response.content
    返回字节方式的响应体

    b’\n<html xmlns=“http://www.w3.org/1999/xhtml”…’

5.response.text
返回字符串方式的响应体

u'<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml"...'

6.response.headers
返回字典形式的服务器响应头
response.headers['Content-Type']
text/html; charset=utf-8
response.headers.get('content-type')
text/html; charset=utf-8

  1. response.json()
    Requests中内置的JSON解码器
  2. response.raise_for_status()
    失败请求抛出异常
  3. response.encoding
    返回编码方式
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值