Python爬虫(八)_Requests的使用

在这里插入图片描述

Requests:让HTTP服务人类

虽然Python的标准库中urllib2模块中已经包含了平常我们使用的大多数功能,但是它的API使用起来让人感觉不太好,而Requests自称"HTTP for Humans",说明使用更简单方便。

Requests唯一的一个非转基因的Python HTTP库,人类可以安全享用

Requests继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的URL和POST数据自动编码。

requests的底层实现其实就是urllib3

Requests的文档非常完备,中文文档也相当不错。Requests能完全满足当前网络的需求,支持Python2.6-3.5,而且能在PyPy下完美运行。

安装方式

利用pip安装或者利用easy_install都可以完成安装:

$pip install requests$easy_install requests

基本GET请求(headers参数和parmas参数)

  1. 最基本的GET请求可以直接用get方法
response = requests.get("http://www.baidu.com/")#也可以这么写
#response = requests.request("get", "http://www.baidu.com/")
  1. 添加headers和查询参数

如果想添加headers,可以传入headers参数来参加请求头中的headers信息,如果要将参数放在url中传递,可以利用params参数。

import requestskw = {'wd':'长城'}headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}#params接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
response = requests.get("http://www.baidu.com/s?", params=kw, headers = headers)#查看响应内容,response.text返回的是Unicode格式的数据
print(response.text)#查看响应内容,response.content返回的字节流数据
print(response.content)#查看完整url地址
print(response.url)#查看响应头部字符编码
print(response.encoding)#查看响应码
print(response.status_code)

运行结果

............'http://www.baidu.com/s?wd=%E9%95%BF%E5%9F%8E''utf-8'200
  • 使用response.text时,Requests会基于HTTP响应的文本编码自动解码响应内容,大多数Unicode字符集都能被无缝地解码。
  • 使用response.content时,返回的是服务器响应数据的原始二进制字节流,可以用来保存图片等二进制文件。

基本POST请求(data参数)

  1. 最基本的GET请求可以直接用post方法 response = requests.post(“http://www.baidu.com/”, data=data)
  2. 传入data数据 对于POST请求来说,我们一般需要为它增加一些参数。那么醉基本的穿参方法可以利用data这个参数。 ```python import requests

formdata = { “type”:“AUTO”, “i”:“i love python”, “doctype”:“json”, “xmlVersion”:“1.8”, “keyfrom”:“fanyi.web”, “ue”:“UTF-8”, “action”:“FY_BY_ENTER”, “typoResult”:“true” }

url = “http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null”

headers = {“User-Agent”:“Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36”}

response = requests.post(url, data=formdata, headers=headers)

print(response.text)

如果是json文件可以直接显示

print(response.json())

运行结果python {“type”:“EN2ZH_CN”,“errorCode”:0,“elapsedTime”:2,“translateResult”:[[{“src”:“i love python”,“tgt”:“我喜欢python”}]],“smartResult”:{“type”:1,“entries”:[“”,“肆文”,“高德纳”]}}

{u’errorCode’: 0, u’elapsedTime’: 0, u’translateResult’: [[{u’src’: u’i love python’, u’tgt’: u’\u6211\u559c\u6b22python’}]], u’smartResult’: {u’type’: 1, u’entries’: [u’‘, u’\u8086\u6587’, u’\u9ad8\u5fb7\u7eb3’]}, u’type’: u’EN2ZH_CN’} ```

代理(proxies参数)

如果需要使用代理,你可以通过为任意请求方法提供proxies参数来配置单个请求:

import requests
#根据协议内容,选择不同的代理
proxies = {"http":"http://12.34.56.79:9527","https":"http://12.34.56.79:9527"
}response = requests.get("http://www.baidu.com", proxies = proxies)
print(response.text)

也可以通过本地环境变量HTTP_PROXYHTTPS_PROXY来配置代理:

export HTTP_PROXY="http://12.34.56.79:9527"
export HTTPS_PROXY="https://12.34.56.79:9527"

私密代理验证(特定格式)和Web客户端验证(auth参数)

urllib2这里的做法比较复杂,requests只需要一步:

私密代理

import requests#如果带来需要使用HTTP Basic Auth,可以使用下面这种格式:
proxy = {"http":"mr_mao_hacker:sffgr9r@61.158.163.130:16816"}response = requests.get("http://www.baidu.com", proxies=proxy)print(response.text)

web客户端验证

如果是Web客户端验证,需要添加auth=(账户名,密码)

import requestsauth={"test":"123456"}response = requests.get("http://192.168.199.107", auth=auth)print(response.text)

urllib2泪奔…

Cookies和Sission

Cookies 如果一个相应中包含了cookie,那么我们可以利用cookies参数拿到:

import requestsresponse = requests.get("http://www.baidu.com/")#7.返回cookieJar对象:
cookiejar = response.cookies#8.将CookieJar转为字典:
cookiedict = requests.utils.dict_from_cookiejar(cookiejar)print(cookiejar)print(cookiedict)

运行结果:

<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>{'BDORZ': '27315'}

**Session 在requests里,session对象是一个非常常用的对象,这个对象代表依次用户会话:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开。

会话能让我们在跨请求时候保持某些参数,比如在同一个Session实例发出的所有请求之间保持cookie

实现人人网登陆

import requests#1.创建session对象,可以保存Cookie值
ssion = requests.session()#2.处理headers
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}#3.需要登陆的用户名和密码
data={"email":"mr_mao_hacker@163.com", "passwd":"alarmchime"}#4.发送附带用户名和密码的请求,并获取登陆后的Cookie的值,保存在session里
ssion.post("http://www.renren.com/PLogin.do", data=data)#5.ssion包含用户登陆后的cookie值,可以直接访问那些登陆后的页面
response = ssion.get("http://www.renren.com/410043129/profile")#6.打印响应内容
print(response.text)

requests人人登陆

处理HTTPS请求SSL证书验证

Requests也可以为HTTPS请求验证SSL证书:

  • 要想检查某个主机的SSL证书,你可以使用verify(也可以不写)
import requests
response = requests.get("https://www.baidu.com", verify=true)#也可以省略不写
#response = requests.get("https://www.baidu.com/")
print r.txt

运行结果:

<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge>百度一下,你就知道 
  • 如果SSL证书验证不通过,或者不信任服务器的安全证书,则会报出SSLError,据说12306证书是自己做的:

12306

来测试一下:

import requestsresponse = requests.get("https://www.12306.cn/mormhweb/")print(response.text)

果然:

SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)

如果我们想跳过12306的证书验证,把verify设置为False就可以正常请求了。

r = requests.get("https://www.12306.cn/mormhweb/", verify = False)

更多Python的学习资料可以扫描下方二维码无偿领取!!!

1)Python所有方向的学习路线(新版)

总结的Python爬虫和数据分析等各个方向应该学习的技术栈。

在这里插入图片描述

比如说爬虫这一块,很多人以为学了xpath和PyQuery等几个解析库之后就精通的python爬虫,其实路还有很长,比如说移动端爬虫和JS逆向等等。

img

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然达不到大佬的程度,但是精通python是没有问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/81956.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【移动机器人运动规划】03 —— 基于运动学、动力学约束的路径规划

文章目录 前言相关代码整理:相关文章&#xff1a; 介绍什么是kinodynamic&#xff1f;为什么需要kinodynamic&#xff1f;模型示例unicycle model&#xff08;独轮车模型&#xff09;differential model&#xff08;两轮差速模型&#xff09;Simplified car model (简化车辆模型…

【技巧】如何保护PowerPoint不被改动?

PPT&#xff0c;也就是PowerPoint&#xff0c;是很多小伙伴在工作生活中经常用到的图形演示文稿软件。 做好PPT后&#xff0c;担心自己不小心改动了或者不想他人随意更改&#xff0c;我们可以如何保护PPT呢&#xff1f;下面小编就来分享两个常用的方法&#xff1a; 1. 将PPT改…

win10笔记本显示器根据页面显示亮度自动调节亮度的问题

系统是win10企业版&#xff0c;针对这个问题查了很多种方法&#xff0c;比如&#xff1a; 1、控制面板->硬件和声音->电源选项->点击当前电源计划的更改计划设置->更改高级电源设置->显示->启用自适应亮度 但是我发现我的电源计划只有平衡这一种&#xff0c…

怎么把图片表格转换成word表格?几个步骤达成

在处理文档时&#xff0c;图片表格的转换是一个常见的需求。而手动输入表格是非常耗时的&#xff0c;因此&#xff0c;使用文本识别软件来自动转换图片表格可以大大提高工作效率。在本文中&#xff0c;我们将介绍如何使用OCR文字识别技术来将图片表格转换为Word表格。 OCR文字识…

【架构设计】高并发架构实战:从需求分析到系统设计

写在前面 很多软件工程师的职业规划是成为架构师&#xff0c;但是要成为架构师很多时候要求先有架构设计经验&#xff0c;而不做架构师又怎么会有架构设计经验呢&#xff1f;那么要如何获得架构设计经验呢&#xff1f; 1 高并发是什么 高并发是指系统在同一时间内处理的请求量…

tomcat上部署jpress

一.确保有jdk&#xff0c;tomcat和mysql环境 二.新建jpress数据库&#xff0c;新建jpress用户并赋予所有权限 三.将jpress的war上传到tomcat/apache-tomcat-8.5.70/webapps&#xff0c;具体根据你的实际tomcat安装路径为准&#xff0c;上传完成后他会自己解包 四.到浏览器完…

python优雅地爬虫

申明&#xff1a;仅用作学习用途&#xff0c;不提供任何的商业价值。 背景 我需要获得新闻&#xff0c;然后tts&#xff0c;在每天上班的路上可以听一下。具体的方案后期我也会做一次分享。先看我喜欢的万能的老路&#xff1a;获得html内容-> python的工具库解析&#xff0…

FreeRTOS(系统配置)

一、FreeRTOSConfig.h文件 FreeRTOS的系统配置文件为FreeRTOSConfig.h&#xff0c;在此配置文件中可完成FreeRTOS的裁剪与配置。 FreeRTOSConfig.h 根据正在构建的应用程序定制 FreeRTOS 内核。因此&#xff0c;它特定于应用程序&#xff0c;而不是 FreeRTOS&#xff0c;并且应…

容器——2.Collection 子接口之 List

文章目录 2.1. Arraylist 和 Vector 的区别?2.2. Arraylist 与 LinkedList 区别?2.2.1. 补充内容:双向链表和双向循环链表2.2.2. 补充内容:RandomAccess 接口 2.3 ArrayList 的扩容机制 2.1. Arraylist 和 Vector 的区别? ArrayList 是 List 的主要实现类&#xff0c;底层使…

并发编程2:如何进行对象共享?

目录 1、对象的可见性&#xff1a;Volatile 变量 2、发布和逸出 3、线程封闭&#xff1a;ThreadLocal 4、对象的不变性 5、安全发布 5.1 - 安全发布常用的模式 5.2 - 可变对象 5.3 - 安全地共享对象 同步在用于实现原子性或者确定 “临界区(Critical Section)” 的同时…

启动RocketMQ报错

说明&#xff1a;启动RocketMQ消费者时&#xff0c;报以下错误&#xff1a;java.lang.IllegalStateException&#xff1a;Failed to start RocketMQ push consumer. 解决&#xff1a;看下所有的监听器类&#xff0c;检查是不是有相同的消费者组名&#xff0c;注释掉其中一个即可…

踩坑 视觉SLAM 十四讲第二版 ch13 编译及运行问题

一、安装Geset 库 sudo apt-get install libgtest-dev cd /usr/src/gtest sudo mkdir build cd build sudo cmake .. //一定要以sudo的方式运行&#xff0c;否则没有写入权限 sudo make //这个也一样要以sudo的方式 sudo cp libgtest*.a /usr/local/lib //将生成…

使用 ESP32 Arduino 和机器学习实现WIFI室内定位

在这个 Arduino 机器学习项目中,我们将使用附近的 WiFi 接入点来定位我们所在的位置。为了使该项目正常运行,您需要一块配备 WiFi 的板,例如 ESP8266、ESP32 或 MKR WiFI 1010。 什么是室内定位? 我们都习惯了 GPS 定位,我们的设备将使用卫星来跟踪我们在地球上的位置。GP…

如何使用win10专业版系统自带远程桌面公司内网电脑,从而实现居家办公?

使用win10专业版自带远程桌面公司内网电脑 文章目录 使用win10专业版自带远程桌面公司内网电脑 在现代社会中&#xff0c;各类电子硬件已经遍布我们身边&#xff0c;除了应用在个人娱乐场景的消费类电子产品外&#xff0c;各项工作也离不开电脑的帮助&#xff0c;特别是涉及到数…

SAM 大模型Colab快速上手【Segment Anything Model】

Google Colab 是一个基于云的 Jupyter 笔记本环境&#xff0c;允许您通过浏览器编写、运行和共享 Python 代码。 它就像 Google 文档&#xff0c;但用于代码。 通过免费版本的 Google Colab&#xff0c;你可以获得带有约 16GPU VRAM 的 Nvidia Tesla T4 GPU&#xff0c;这对于…

c语言每日一练(3)

前言&#xff1a;每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;暑假时三天之内必有一更&#xff0c;到了开学之后&#xff0c;将看学业情…

模块化原理:source-map

1. webpack打包基本配置 1.安装webpack与webpack-cli npm i webpack webpack-cli 2.配置 "build":"webpack" 3. 新建webpack.config.js const path require(path); module.exports {// mode: "development",// 默认production&#xff08;什么…

数据库总结

第一章绪论 一、数据库系统概述 1. 数据库的4个基本概念 1.数据&#xff1a;数据库中存储的基本对象&#xff0c;描述事物的符号记录。 2.数据库&#xff1a;长期储存在计算机内、有组织的、可共享的大量数据的集合。较小的冗余度、较高的数据独立性、易扩展性 3.数据库管…

Mybatis异常Invalid bound statement (not found)原因之Mapper文件配置不匹配

模拟登录操作 $.post("/admin/login", {aname, pwd }, rt > {if (rt.code 200) {location.href "manager/index.html";return;}alert(rt.msg)});网页提示服务器代码错误 POST http://localhost:8888/admin/login 500后端显示无法找到Mapper中对应的…

代理模式及常见的3种代理类型对比

代理模式及常见的3种代理类型对比 代理模式代理模式分类静态代理JDK动态代理CGLIBFastclass机制 三种代理方式之间对比常见问题 代理模式 代理模式是一种设计模式&#xff0c;提供了对目标对象额外的访问方式&#xff0c;即通过代理对象访问目标对象&#xff0c;这样可以在不修…