【Python 爬虫之requests库】零基础也能轻松掌握的学习路线与参考资料

Requests是Python中用于HTTP请求的强大库,简化了GET和POST操作,支持设置参数、请求头、代理和超时。在爬虫实践中,常用技巧包括设置Referer、Origin、User-Agent以模拟浏览器行为,以及利用代理和Cookie处理IP限制和保持登录状态。
摘要由CSDN通过智能技术生成

在这里插入图片描述

一、概述

Python 爬虫中,常用来请求网页的库有 urllib、urllib2、httplib等,但是这些库用起来比较麻烦,需要写很多代码。Requests 库正是为了解决这个问题而生的。Requests 库是 Python 社区中优秀的http请求库,他简化了 HTTP 请求发送,方便开发者快速地请求网络资源,可以以非常简单的语法来发送 HTTP/1.1 请求。 Requests 库简单、易学、功能强大、性能卓越,十分适合初学者使用。

二、Requests 库基本用法

Requests 库可以通过 pip 一键安装,安装方法如下:pip install requests

1.发送 GET 请求
发送 get 请求我们需要使用 requests 库的 get 函数来实现,如下所示:

import requests
url = 'http://www.baidu.com'
response = requests.get(url)
print(response)

response 将会返回一个 Response 对象,其中包括 status_code(状态码)、headers、text、encoding、cookies 等属性,如下所示:
<Response [200]>

2.发送 POST 请求
使用 POST 请求来提交数据时,可以使用 post 函数。示例如下:

import requests
url = 'http://httpbin.org/post'
data = {'name':'Dachuang'}
r = requests.post(url, data=data)
print(r)

Response 对象同样包含了 status_code、headers、text、encoding、cookies等属性,如下所示:
<Response [200]>

3.传递参数
get 请求可以通过 url 传递参数,POST 请求可以通过 data 传递参数。示例如下:

import requests
url = 'http://httpbin.org/get'
params = {'name':'Dachuang'}
response = requests.get(url, params=params)
print(response)

url 中的请求参数是已经构造好的 url,而参数 params 则是以字典形式传递的参数,它会在请求 url 中拼接参数。data参数也可以以字典形式传递。
通过 params 参数传递参数是 url 传参的一种方式,可以通过该方式避免 url 中参数的混淆等一系列问题。除了 params 参数外,还可以通过 headers 参数设置请求头。

4.设置请求头
Requests 使用 Header 参数来向请求添加 HTTP 头部,示例如下:

import requests
url = 'http://httpbin.org/get'
params = {'name':'Dachuang'}
headers = {'User-Agent':'Mozilla/5.0'}
response = requests.get(url, params=params, headers=headers)
print(response)

Requests 头部有很多内容,其中比较重要的就是 User-Agent 了。有些网页会检测请求头中的 User-Agent 是否为浏览器类型,如果不是则会屏蔽该请求,使用 Requests 设置 User-Agent 可以避免此类问题。

5.使用代理发送请求
Requests 允许我们向请求中添加代理。现在很多网站都有反爬虫机制,比如通过浏览器头部进行判断、同 IP 访问次数进行判断等,在这种情况下,我们可以通过向 Requests 请求中添加代理的方式来解决。设置代理方式如下:

import requests
url = 'http://www.baidu.com'
proxies = {
    'http': 'http://127.0.0.1:1080',
    'https': 'http://127.0.0.1:1080'
}
response = requests.get(url, proxies=proxies)
print(response)

其中,proxies 中的 key 值是协议名加上冒号(‘:’)加上地址,value 值同样是协议名加上冒号(‘:’)加上地址。

6.超时设置
Requests 允许我们设置请求的超时时间,这就意味着如果请求超过设定的时间限制,那么该请求将会被认为是失效的,示例代码如下:

import requests
url = 'http://www.baidu.com'
timeout = 2
response = requests.get(url, timeout=timeout)
print(response)

这里的timeout表示请求的超时时间,单位为 s,如该请求超时时间设定为2秒,如果该请求的响应时间超过2秒,那么该请求将会被视为请求失败并抛出异常以告诉用户响应超时了。

三、爬虫中的优秀实践

1.Referer 和 Origin
Referer的作用是用来表明当前请求是从什么网站来的,正常情况下在发送Ajax异步请求的时候是没有Referer值的。Origin的作用类似,同样是用来表明当前请求是从什么网站来的,但是它不能用在Ajax异步请求中。使用 Referer 和 Origin 是通常不会引起网络层面的异常的,因此在使用时最好加上这两个参数。

def get_products():
    headers = {
        "Referer": "https://www.jd.com/",
        "Origin": "https://www.jd.com/"
    }
    url = "https://item.jd.com/123456.html"
    response = requests.get(url, headers=headers)
    return response

2.设置User-Agent
User-Agent 用来标识用户代理,客户端的一种标识方式。在使用 Python 爬虫爬取数据的时候,使用默认的 User-Agent 很容易被目标网站识别出来是爬虫。这时需要在 User-Agent 中加入随机的浏览器类型,以模拟用户访问行为。

import random
import requests
 
def get_products():
    user_agent_list = [
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299",
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
    ]    headers = {
        'User-Agent': random.choice(user_agent_list),
        'Referer': 'https://www.jd.com/',
        'Origin': 'https://www.jd.com/',
    }
    url = "https://item.jd.com/123456.html"
    response = requests.get(url, headers=headers)
    return response

3.使用代理
有一些网站会对 IP 进行限制,这时需要使用代理(IP代理)。在向网站请求数据的时候,可以使用 requests 库设置代理来进行请求。

import requests

def get_products():
    url = "https://item.jd.com/123456.html"
    # 代理
    proxy_host = "127.0.0.1"
    proxy_port = "1080"
    proxies = {
        "http": f"http://{proxy_host}:{proxy_port}",
        "https": f"http://{proxy_host}:{proxy_port}",
    }
    response = requests.get(url, proxies=proxies)
    return response

4.设置cookie
Cookie 是一种保存用户信息的方案。如果一个网站需要记住用户的登录状态、购物车内的商品、用户的偏好等信息,那么这些信息就可以通过Cookie的形式保存在用户的浏览器上。对于这一点,requests 库提供了 cookie 参数来保存用户的 Cookie 信息。看下面的详细实现。

import requests

def get_products():
    # cookie
    cookie = "sessionid=abcd;"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
        'Referer': 'https://www.jd.com/',
        'Origin': 'https://www.jd.com/',
    }
    url = "https://item.jd.com/123456.html"
    cookies = requests.utils.cookiejar_from_dict(requests.utils.dict_from_cookiejar(
        requests.utils.cookiejar_from_string(cookie)))
    response = requests.get(url, headers=headers, cookies=cookies)
    return response

四、参考资料

Requests 是一个相对年轻但功能不断完善和迅速被接受的Python HTTP 库。官方文档提供了非常好的说明和例子。

官方文档:http://docs.python-requests.org/zh_CN/latest/

requests使用介绍:https://www.cnblogs.com/-wenli/p/8462410.html

Requests快速上手指南:https://www.cnblogs.com/cnkai/p/9248440.html

Python爬虫(四):Requests库详解:https://www.jianshu.com/p/08455bcc505c

五、总结
Requests 是一个非常使用非常方便的Python HTTP 库,它用于发送 HTTP/1.1 请求的库,非常适合爬虫使用。Requests 库支持多种 HTTP 请求方式和一些额外的特性,例如,与其他Python库相比,requests 可以自动解码响应内容为 unicode,适用于所有版本的 Python3,并且功能强大,同时性能卓越。在Python爬虫应用中早已成为开发者们必不可少的库之一,不断的优化和升级,使得使用 Requests 发送 HTTP 请求变得更加简单方便。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weishaoonly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值