更为强大的库requests是为了更加方便地实现爬虫操作,有了它 , Cookies 、登录验证、代理设置等操作都不是 .

  

一、安装requests模块(cmd窗口执行)

pip3 install requests

二、requests的基本方法

import requests
response=requests.get("https://www.baidu.com/")
print(type(response)) #<class 'requests.models.Response'> response类型
print(response.status_code) #200 获取状态码
print(response.text) #获取网页源码
print(response.content) #获取网页源码
print(response.cookies) #获取网页cookies ,Req u estsCookieJar
print(response.headers) #获取请求头

三、推荐一个测试网址:http://httpbin.org测试请求网站,可以随便捣鼓(其他请求方式)

import requests
r=requests.post("http://httpbin.org/post")
print(r.text) #打印post请求的头部信息
r=requests.put("http://httpbin.org/post")
r=requests.delete("http://httpbin.org/post")
r=requests.options("http://httpbin.org/post")

  这里分别用 post ()、 put ()、 delete ()等方法实现了 POST 、 PUT 、 DELETE 等请求 。

四、get 请求

  查看get请求包含的请求信息

import requests
r=requests.get("http://httpbin.org/get")
print(r.text) #打印get请求信息
结果显示:
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.20.1"
},
"origin": "119.123.196.143",
"url": "http://httpbin.org/get"
}

  结果显示说明:一个请求信息应该包含了请求头、ip地址、URL等信息。

  (1)请求添加额外信息

    方法一:?key=value&key2=value2... (?:表示起始,&:表示和)

r= requests.get("http://httpbin.org/get?name=germey&age=22")
import requests
r= requests.get("http://httpbin.org/get?name=germey&age=22")
print(r.text)

方法一示例

{
"args": {
"age": "",
"name": "germey"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.20.1"
},
"origin": "119.123.196.143",
"url": "http://httpbin.org/get?name=germey&age=22"
}

方法一结果

  通过运行结果可以判断,请求的链接自动被构造成了:http://httpbin.org/get?name=germey&age=22
    

  方法二:利用get 里面参数params,可以将请求信息编译加载到url中(推荐使用

import requests

data={
"name":"germey",
"age":22
}
r=requests.get("http://httpbin.org/get",params=data)
print(r.text)
结果显示:
{
"args": {
"age": "",
"name": "germey"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.20.1"
},
"origin": "119.123.196.143",
"url": "http://httpbin.org/get?name=germey&age=22"
}

方法二结果

  结果都构造了:http://httpbin.org/get?name=germey&age=22,方法二比较实用

  (2)从网页请求到的请求信息都是json格式字符串,转换成字典dict,使用 .json();

    如果不是Json格式,则报错:JSON。decodeJSONDecodeError异常

import requests
r=requests.get("http://httpbin.org/get")
print(type(r.text)) #查看请求头数据类型
print(r.text) #打印请求信息
#r.json() 将json字符串转换为字典
print(type(r.json()))#转换为dict,打印数据类型
<class 'str'>
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.20.1"
},
"origin": "119.123.196.143",
"url": "http://httpbin.org/get"
} <class 'dict'>

结果

  结果显示:请求信息是<str>;r.json()后的数据是<dict>

五、get方法请求抓取网页实例

  (1)成功获取知乎的网页信息

# 请求知乎
import requests
#构建请求要求信息
data={
"type":"content",
"q":"赵丽颖"
}
url="https://www.zhihu.com/search"
#构建请求的ip和服务器信息
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36" ,
"origin": "119.123.196.143",
}
response=requests.get(url,params=data,headers=headers)
print(response.text)

添加搜索信息和headrs信息

  这里我们加入了 headers 信息,其中包含了 User- Agent 字段信息, 也就是浏览器标识信息 。 如果
不加这个 ,知乎会禁止抓取,data构造了一个请求搜索信息.
  (2)github站点图标下载

import requests
r=requests.get(" https://github.com/favicon.ico")
print(r.text)
print(r.content)
with open("github.ico","wb") as f:
f.write(r.content)

打印图标示例

  (3)请求头信息headers

{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.20.1"
},
"origin": "119.123.196.143",
"url": "https://httpbin.org/get"
}

  (4)抓取github图标

    r.text  得到的数据是字符串类型

    r.content 得到的数据是bytes类型数据

import requests
r = requests.get("https://github.com/favicon.ico")
print('text',r.text)#获取到字符串
print('content',r.content) #获取的是二进制

import requests
r=requests.get(" https://github.com/favicon.ico")
print(r.text)
print(r.content)
with open("gg.ico","wb") as f:
f.write(r.content)

github图片写入

六、post请求

  带data信息请求

import requests
data ={
'name' :'pig',
'age':18
}
r = requests.post('http://httpbin.org/post', data=data)
print(r.text)
{
"args": {},
"data": "",
"files": {},
"form": {
"age": "",
"name": "pig"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Content-Length": "",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.20.1"
},
"json": null,
"origin": "119.123.198.80",
"url": "http://httpbin.org/post"
}

post请求信息

七、请求状态码

  1、100状态码:信息状态码

  2、200状态码:成功状态码

  3、300状态吗:重定向状态码

  4、400状态码:客户端错误状态码

  5、500状态码:服务器错误状态码

import requests
import re def get(url,session):
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.100 Safari/537.36",
"Host": "book.douban.com"
}
response=session.get(url,headers=headers)
return response.content.decode("utf-8") def parse(path,data,session):
res=session.get(data,timeout=2)
with open(path,"wb") as f:
f.write(res.content) if __name__ == '__main__':
obj=re.compile('<img src="(?P<picture>.*?)"')
session = requests.session()
html=get("https://book.douban.com/",session)
pic_url_list=obj.findall(html,re.S)
n=1 for pic_url in pic_url_list:
print(pic_url)
try:
path=r"book_picture/"+f"{n}"+".jpg"
parse(path,pic_url,session)
n+=1 except Exception as e:
print(e)

豆瓣图片爬取实例

#coding=utf-8
import requests
import os
import re def getHtml(url):
headers={
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Cookie": "BDqhfp=%E5%90%8D%E8%83%9C%E5%8F%A4%E8%BF%B9%26%26-10-1undefined%26%260%26%261; BAIDUID=3E9EFDBD86FBFCF2DA4C32A06482351C:FG=1; BIDUPSID=E013F7397D0EF0F46FFAF97FC8A7F349; PSTM=1543903169; pgv_pvi=2584268800; delPer=0; PSINO=7; BDRCVFR[5VG_cZ6c41T]=9xWipS8B-FspA7EnHc1QhPEUf; ZD_ENTRY=baidu; BDRCVFR[dG2JNJb_ajR]=mk3SLVN4HKm; indexPageSugList=%5B%22%E5%90%8D%E8%83%9C%E5%8F%A4%E8%BF%B9%22%5D; cleanHistoryStatus=0; BDRCVFR[-pGxjrCMryR]=mk3SLVN4HKm; BCLID=7951205421696906576; BDSFRCVID=_rLOJeC629zHWkc9ByJPtBGK9T-me2jTH6bH27NMSSL8H8ptFoAvEG0PjM8g0KubkDpOogKK3gOTH4PF_2uxOjjg8UtVJeC6EG0P3J; H_BDCLCKID_SF=tJI8_DLytD_3JRcFDDTb-tCqMfTM2n58a5IX3buQX-od8pcNLTDKeJIn3UR2qxj8WHRJ5q3cfx-VDJK4MlO1j4DnDGJwWlJgBnb7VPJ23J7Nfl5jDh38XjksD-Rt5tnR-gOy0hvctb3cShPm0MjrDRLbXU6BK5vPbNcZ0l8K3l02VKO_e4bK-Tr3jaDetU5; H_PS_PSSID=; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; userFrom=blog.csdn.net",
"Host": "image.baidu.com",
"Upgrade-Insecure-Requests":"",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"
}
page = requests.get(url,headers=headers)
html = page.content.decode()
return html if __name__ == '__main__': msg=input("请输入搜索内容<如苍老师>:")
os.mkdir(msg)
html = getHtml(f"https://image.baidu.com/search/index?ct=201326592&cl=2&st=-1&lm=-1&nc=1&ie=utf-8&tn=baiduimage&ipn=r&rps=1&pv=&word={msg}&hs=0&oriquery=%E5%90%8D%E8%83%9C%E5%8F%A4%E8%BF%B9&ofr=%E5%90%8D%E8%83%9C%E5%8F%A4%E8%BF%B9&z=0&ic=0&face=0&width=0&height=0&latest=0&s=0&hd=0&copyright=0&selected_tags=%E7%AE%80%E7%AC%94%E7%94%BB") obj=re.compile('"thumbURL":"(?P<pic>.*?)"',re.S)
pic_list=obj.findall(html)
n=1
for pic_url in pic_list:
print(pic_url)
try:
data=requests.get(pic_url,timeout=2)
path=f"{msg}/"+f"{n}"+".jpg"
with open(path,"wb") as f:
print("-----------正在下载图片----------")
f.write(data.content)
n+=1
print("----------下载完成----------")
except Exception as e:
print(e)

百度图片静态爬取(待优化)

  

  

python requests简介的更多相关文章

  1. python网络请求简洁之道--python requests简介

    #requests中文文档:http://cn.python-requests.org/en/latest/#学习出处:http://mp.weixin.qq.com/s?__biz=MjM5NzU0 ...

  2. Python+Requests接口测试教程(1):Fiddler抓包工具

    本书涵盖内容:fiddler.http协议.json.requests+unittest+报告.bs4.数据相关(mysql/oracle/logging)等内容.刚买须知:本书是针对零基础入门接口测 ...

  3. python爬虫 - python requests网络请求简洁之道

    http://blog.csdn.net/pipisorry/article/details/48086195 requests简介 requests是一个很实用的Python HTTP客户端库,编写 ...

  4. Python requests模拟登录

    Python requests模拟登录 #!/usr/bin/env python # encoding: UTF-8 import json import requests # 跟urllib,ur ...

  5. Python的简介以及安装和第一个程序以及用法

    Python的简介: 1.Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程.Pytho ...

  6. 大概看了一天python request源码。写下python requests库发送 get,post请求大概过程。

    python requests库发送请求时,比如get请求,大概过程. 一.发起get请求过程:调用requests.get(url,**kwargs)-->request('get', url ...

  7. [Python] heapq简介

    [Python] heapq简介 « Lonely Coder [Python] heapq简介 judezhan 发布于 2012 年 8 月 8 日 暂无评论 发表评论 假设你需要维护一个列表,这 ...

  8. Python requests 安装与开发

    Requests 是用Python语言编写HTTP客户端库,跟urllib.urllib2类似,基于 urllib,但比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求, ...

  9. python requests库学习笔记(上)

    尊重博客园原创精神,请勿转载! requests库官方使用手册地址:http://www.python-requests.org/en/master/:中文使用手册地址:http://cn.pytho ...

随机推荐

  1. 【转载】阿里云Windows服务器快速部署PHP运行环境

    PHP也是一种常用的网站脚本语言,时常用于网站应用程序的编写,PHP运行环境包含几个要素:PHP.Apache服务器.MySql数据库,此3个要素是Php网站运行的必要条件.在阿里云的Windows服 ...

  2. 记录Newtonsoft.Json的日常用法

    最近在做一个使用基于.net mvc 实现前后台传输Json的实例.网上找了一些资料.发现在开发的时候,许多的数据交互都是以Json格式传输的.其中涉及序列化对象的使用的有DataContractJs ...

  3. 在.net中怎么解析json串 [Error reading JObject from JsonReader. Current JsonReader item is not an obj]

    编辑时间:2017-05-10,增加一种转化list的方法 一.以前知道一种解析json串的方法,觉得有点麻烦.就从别的地方搜到了另一种 string json = vlt.getlist(); JO ...

  4. ES5、ES2015、ECMAScript6(转载)

    阮一峰博客系列: http://es6.ruanyifeng.com/#README

  5. 2.QT-窗口组件(QWidget),QT坐标系统,初探消息处理(信号与槽)

    本章主要内容如下: 1) 窗口组件(QWidget) 2) QT坐标系统 3) 消息处理(信号与槽) 窗口组件(QWidget) 介绍 Qt以组件对象的方式构建图形用户界面 Qt中没有父组件的顶级组件 ...

  6. 黑客常用 Linux 入侵常用命令

    大学曾误入歧途算是一个脚本小子.... 系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cp ...

  7. Java高并发--安全发布对象

    Java高并发--安全发布对象 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 发布对像:使一个对象能够被当前范围之外的对象使用. 对象逸出:一种错误的发布.当一个对象 ...

  8. C#设计模式之十七中介者模式(Mediator Pattern)【行为型】

    一.引言 今天我们开始讲“行为型”设计模式的第五个模式,该模式是[中介者模式],英文名称是:Mediator Pattern.还是老套路,先从名字上来看看.“中介者模式”我第一次看到这个名称,我的理解 ...

  9. jQuery的一生

    jQuery 1.什么是jQuery? 是轻量级的,兼容多浏览器的JavaScript库,使用户能够方便的处理HTML Document,Events,实现动画效果,方便进行Ajax交互,能够极大地简 ...

  10. UOJ#310. 【UNR #2】黎明前的巧克力(FWT)

    题意 题目链接 Sol 挂一个讲的看起来比较好的链接 然鹅我最后一步还是没看懂qwq.. 坐等SovietPower大佬发博客 #include<bits/stdc++.h> using ...