Python3爬虫编程学习笔记(四)学习Requests第三方库基本用法

虽然Python的标准库urllib模块已经包含了平常我们使用的大多数功能,但它的API使用起来不够简洁、明晰。第三方Requests库更加符合Python的精神,Requests库宣传口号是”HTTP for Humans(让 HTTP 服务人类)“,代码简洁,使用更迅捷、方便。

学习参考:
中文文档:https://requests.readthedocs.io/zh_CN/latest/
Github:https://github.com/requests/requests

一、安装Requests第三方库

我用的是win10,Win+R输入cmd进入控制台,输入下面命令安装:
 

pip install requests

 

Python官方源安装特别慢,还经常失败,我以前安装PyQt5就是这样,无论如何都不成功。通过百度发现,国内镜像安装速度快、成功率高,安装时使用 -i 参数指定镜像地址:

pip install requests -i https://pypi.douban.com/simple/
  • 可能是自己宽带的问题,通过测试,豆瓣安装最快。

 

  • 安装第三方库国内镜像地址:

豆瓣:http://pypi.douban.com/simple/

阿里云:http://mirrors.aliyun.com/pypi/simple/

清华大学:https://pypi.tuna.tsinghua.edu.cn/simple

中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

华中理工大学:http://pypi.hustunique.com/

山东理工大学:http://pypi.sdutlinux.org/


上面是临时使用镜像,也可以永久使用镜像源:

在win10系统中,打开用户目录,再打开你名字的用户(可能有人没有建立自己的用户帐号,那就直接打开Administrator目录),在其下建立pip子目录,再在pip目录下新建文件pip.ini,在其中输入如下内容、保存:


[global]

index-url = https://pypi.douban.com/simple/

[install]

trusted-host=mirrors.aliyun.com

二、 requests的主要方法

获取HTML网页的主要方法,对应于HTTP的GET:

requests.get()

获取HTML网页头信息的方法,对应于HTTP的HEAD:

requests.head()

向HTML网页提交POST请求的方法,对应于HTTP的POST:

requests.post()

向HTML网页提交PUT请求的方法,对应于HTTP的PUT:

requests.put()

向HTML网页提交局部修改请求,对应于HTTP的PATCH:

requests.patch()

向HTML页面提交删除请求,对应于HTTP的DELETE:

requests.delete()
  • Python爬虫编程主要使用GET和POST。

三、GET请求

 

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

首先,必须导入requests模块:

import requests
1、基本get()请求

通过requests.get()发送最基本的get请求,建立Response对象:

import requests

response = requests.get('http://www.baidu.com/')
2、带参数get()请求:

通过requests.get()发送带有headers和查询参数的请求,可以指定header参数、params参数:

    # -*- encoding: utf-8 -*-

    import requests
    
    # 定义参数字典
    kw = {'wd': 'python'}
    # 定义请求头
    headers = {
      'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
    }
    # 发送get请求
    response = requests.get('http://www.baidu.com/s', params=kw, headers=headers)
    
    #查看Response对象属性:
    print(response.status_code)    # 状态码 200
    print(response.headers['content-type']) # 请求头 text/html
    print(response.encoding)  # 网页编码 'ISO-8859-1'
    print(response.text) # 查看网页内容,自动解码Unicode格式
    print(response.content)  # 查看网页内容,返回bytes格式
    # print(response.json())  # 如果是json格式
    print(response.url) # 查看完整url
    print(response.cookies) # 查看cookie
3、response.text属性和response.content属性的区别

在某些情况下来说,response.text 与 response.content 都是来获取response中的数据信息,效果看起来差不多。那么response.text 和 response.content 到底有哪些差别? 什么情况下该用 response.text 什么情况下该用 response.content ?

  • 返回的数据类型不同:
    a) response.text 返回的是一个 unicode 类型的文本数据
    b) response.content 返回的是 bytes 类型的二进制数据

也就是说如果想取文本数据可以通过response.text 如果想取图片、文件,则可以通过 response.content

  • 编码方式不同,response.content 返回的是二进制响应内容,修改编码方式:
  •   response.content.decode('utf-8')
    

response.text 则是自动猜测网页编码,服务器不指定的话是根据网页的响应来猜测编码。修改编码方式:

	response.encoding = 'utf-8'

代码示例:

# -*- coding: utf-8 -*-

import requests

response=requests.get('https://www.baidu.com/')
# print(response.cookies)
print(response.content.decode('utf-8'))
print('-'*30)
print(response.text)

四、POST请求

简言之,post请求就是向服务器提交数据。

 

  • post()方法:
requests.post(url, data=None, json=None, **kwargs)
1、基本POST请求
response = resquests.post(url, data=data)

使用requests.post()方法,如果返回的是jaon数据,可以调用"requests.json()"方法将json字符串转换为字典或者是列表。

2、post请求实例

以拉钩网为例发送post请求。在浏览器(Google Chrome)打开拉钩网站,按F12进行网页分析,发现该网站要求post请求,需要传递表单参数first、pn、kd,示例如下:

# -*- encoding: utf-8 -*-

import requests

# 定义表单数据
data = {
    'first': 'true',
    'pn': '1',
    'kd': 'python'
}
# 定义请求头
headers = {
      'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}
url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
# 发送post请求
response = resquests.post(url, data=data, headers=headers)
print(type(response.json()))
print(response.json())  # 调用json()方法

五、Request库使用代理

 

百度百科:代理服务器(Proxy Server)的功能是代理网络用户去取得网络信息。形象地说,它是网络信息的中转站,是个人网络和Internet服务商之间的中间代理机构,负责转发合法的网络信息,对转发进行控制和登记。

1、设置方法
requests.get(url,data=data,headers=headers,proxies=proxy)

在请求get()或post()方法中,传递"proxies="参数,参数可以是一个字符串,也可以是字典。

  • 代理服务器有收费的,也有免费的,学习过程中可以使用免费的、高匿的,如果在工作上就要用收费的了,毕竟收费不高,且快速、稳定、高匿。
2、代理服务器设置示例
# -*- encoding: utf-8 -*-

import requests
from fake_useragent import UserAgent

url = 'https://nanning.anjuke.com/sale/p1/#filtersort'  # 南宁安居客二手房第一页
    # 定义代理IP字典,如果代理足够多,可从文件中读取
proxy = {
      'http://': '113.120.38.24:9999',
      'https://': '113.120.38.24:9999',
      'http://': '110.243.28.67:9999',
      'https://': '110.243.28.67:9999'
}
ua = UserAgent()  # 自动生成请求头
headers = {'User-Agent': ua.random}
# 发送请求
response = requests.get(url, headers=headers, proxies=proxy)
text = response.text
print(text)  # 查看内容
  • 我在Python3.7、3.8设置代理时如果只是{‘http’: ‘113.120.38.24:9999’}就会报错,非常奇怪,必备是{‘http://’: ‘113.120.38.24:9999’}才行,不知道怎么回事。
     

六、Cookie


百度百科:Cookie 并不是它的原意“甜饼”的意思, 而是一个保存在客户机中的简单的文本文件, 这个文件与特定的 Web 文档关联在一起, 保存了该客户机访问这个Web 文档时的信息, 当客户机再次访问这个 Web 文档时这些信息可供该文档使用。


1、取得Cookie

1)打开浏览器,按F12,选择Network,输入目标网址,一般是选择刷出来的第一项,然后选Header,找到Cookie复制就行了;
2)代码获取:

# -*- encoding: utf-8 -*-
 
import requests
 
response = requests.get('http://www.baidu.com/')
cookie = response.cookies.get_dict()
print(cookie)
2、Session会话

如果要在多次请求中共享cookie,需要使用Session()方法建立会话、发送请求:

# -*- encoding: utf-8 -*-
 
import requests
 
url = 'http://www.renren.com/PLogin.do'
data = {'email': '542657258@qq.com', 'password': 'pythonspider'}
headers = {
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}
# 建立Session会话
session = requests.Session()
# 用Session对象发送请求
session.post(url,data=data, headers=headers)
#请求二级页面查看是否登录成功
response = session.get('http://www.renren.com/880151247/profile')
# 将源码保存到文件以便使用
with open('renren.html', 'w', encoding='utf-8') as f:
f.write(response.text)
  • 处理不信任的SSL证书
    非常简单,在请求时设置verify=False就行了:
response = requests.get(url,verify=False)

 


说明:本学习笔记根据晚上观看学习B站乐林贝斯发布的视频《Python爬虫】新手强烈推荐:Python爬虫教程,学爬虫这一套就够了》,白天学习CSDN博主【[数挖小飞飞]的《Python网络爬虫数据采集实战》博客所记录,非常感谢!


笔记系列:

Python3爬虫编程学习笔记(一)缘由
Python3爬虫编程学习笔记(二)爬虫原理
Python3爬虫编程学习笔记(三)学习urllib库基本用法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值