一:requests爬虫基础
一,什么是爬虫?
描述: 本质是一个自动化程序,一个模拟浏览器向某一个服务器发送请求获取响应资源的过程.
爬虫的基本流程

robots.txt协议
编写一个robots.txt的协议文件来约束爬虫程序的数据爬取。
二,http协议
import requests
'''1,GET:GET可以说是最常见的了,它本质就是
发送一个请求来取得服务器上的某一资源。资源通过
一组HTTP头和呈现据(如HTML文本,或者图片或者视频等)
返回给客户端。GET请求中,永远不会包含呈现数据。'''
res= requests.get("http://httpbin.org/get")
print("get请求>>>>res:",res.text) '''2,POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,
就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。有请求体'''
res1=requests.post("http://httpbin.org/post")
print("post请求>>>>res1",res1.text) '''3、PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库
的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就
是说无论进行多少次PUT操作,其结果并没有不同。'''
res2=requests.put("http://httpbin.org/put")
print("put请求>>>>res2:",res2.text) '''4删除请求'''
res3=requests.delete("http://httpbin.org/delete")
print("delete删除请求>>>>res3:",res3.text) '''5,HEAD请求常常被忽略,但是能提供很多有用的信息,特别是在有限的速度和带宽下。主要有以下特点:
1、只请求资源的首部;
2、检查超链接的有效性;
3、检查网页是否被修改;
4、多用于自动搜索机器人获取网页的标志信息,获取rss种子信息,或者传递安全认证信息等'''
res4=requests.head("http://httpbin.org/get")
print(">>>>res4:",res4.text) '''6,options请求是用于请求服务器对于某些接口等资源的支持情况的,包括各种请求方法、
头部的支持情况,仅作查询使用。来个栗子'''
res5=requests.options("http://httpbin.org/get")
print(">>>>res5:",res5.text)
http请求方式和区别
D:\python3.6\python.exe F:/爬虫/request请求方式.py
get请求>>>>res: {
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.21.0"
},
"origin": "61.144.173.127, 61.144.173.127",
"url": "https://httpbin.org/get"
} post请求>>>>res1 {
"args": {},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.21.0"
},
"json": null,
"origin": "61.144.173.127, 61.144.173.127",
"url": "https://httpbin.org/post"
} put请求>>>>res2: {
"args": {},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.21.0"
},
"json": null,
"origin": "61.144.173.127, 61.144.173.127",
"url": "https://httpbin.org/put"
} delete删除请求>>>>res3: {
"args": {},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.21.0"
},
"json": null,
"origin": "61.144.173.127, 61.144.173.127",
"url": "https://httpbin.org/delete"
} >>>>res4:
>>>>res5:
http请求方式和区别.py的打印结果
三,requests的属性和方法
requests的下载 : pip install requests
import requests
########一 get基本请求请求
# 案例1:爬取京东首页
# url ="https://www.jd.com/"
# res1=requests.get(url)
# with open("jd.html","w",encoding="utf-8") as f:
# f.write(res1.text)
########二 含参数,请求头
# 案例1:爬取百度搜索首页
# url2 ="https://image.baidu.com/"
# res2=requests.get(url2,params={
# "wd":"刘传盛"
# },
# headers={
# "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
# }
# )
# with open("baidu.html","wb") as f:
# f.write(res2.content)
#案例2 爬取抽屉网
# url="https://dig.chouti.com/" #该网站做ua反扒所以需携带User-Agent参数
# res=requests.get(url,
# headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
# })
# with open("chouti.html","wb") as f:
# f.write(res.content)
########三 cookie参数
# import uuid #随机生成uuid字符串
# import requests
# url = 'http://httpbin.org/cookies'
# cookies={"sbid":str(uuid.uuid4()),"a":"1"}
# res=requests.get(url,cookies=cookies)
# print(res.text)
########三 session对象
# res=requests.post("/login/")
# dic={}
# requests.get("/index/",cookies=dic)
#
# session=requests.session()
# session.post("/login/")
# session.get("/index/") ########四 post请求
# res1=requests.post(url="http://httpbin.org/post?a=1",data={
# "name":"yuan"
# })
# print(res1.text)
#
# res2=requests.post(url="http://httpbin.org/post?a=1",data={
# "name":"alex"
# })
# print(res2.text)
########五 IP代理
res=requests.get('http://httpbin.org/ip', proxies={'http':'111.177.177.87:9999'}).json()
print(res)
requests的属性
四,resquests的爬取数据的方法
import requests
######## 一 content text
# response=requests.get("http://www.autohome.com.cn/beijing/")
#爬取文件方式1
# print(response.content) #打印的是一堆字节
# print(response.encoding) #打印爬取数据所用的编码
# print(response.text) #打印文本文件
# response.encoding="gbk"
# with open("autohome.html","wb") as f:
# f.write(response.content)
#爬取文件方式2
# with open("autohome.html","wb") as f:
# f.write(response.content)
######## 二 爬取图片,音频视频
# res=requests.get("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1551598670426&di=cd0b0fe51a124afed16efad2269215ae&imgtype=0&src=http%3A%2F%2Fn.sinaimg.cn%2Fsinacn22%2F23%2Fw504h319%2F20180819%2Fb69e-hhxaafy7949630.jpg")
# with open("鞠.jpg","wb") as f :
# f.write(res.content)
#
# res1=requests.get("http://y.syasn.com/p/p95.mp4")
# with open("xiao.mp4","wb") as f:
# for line in res1.iter_content():
# f.write(line)
######## 三 响应json数据
# res=requests.get("http://httpbin.org/get")
# print(res.text)
# print(type(res.text)) #打印结果 <class 'str'>
# import json
# print(json.loads(res.text))
# '''打印结果 {'args': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding':
# 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.21.0'},
# 'origin': '61.144.173.127, 61.144.173.127', 'url': 'https://httpbin.org/get'}'''
# print(type(json.loads(res.text))) #打印结果<class 'dict'>
# print("-----------")
# print(res.json())
# print(type(res.json()))
######## 四 重定向
# res=requests.get("http://www.jd.com/")
# print(res.history) #[<Response [302]>]
# print(res.text)
# print(res.status_code) #200
# res=requests.get("http://www.jd.com/" ,allow_redirects=False)#allow_redirects不能重定向
# print(res.history) #[]
# print(res.status_code) #302
resquests的爬取数据的方法
五案例爬取githu的首页
#该网站做了反扒措施,不能直接爬取首页,需先爬取login登录页面,获取token值
import requests
import re session=requests.session() # login请求:目的获取动态token值
res1=session.get("https://github.com/login")
token=re.findall('<input type="hidden" name="authenticity_token" value="(.*?)" />',res1.text,re.S)[0]
print(token) res2=session.post("https://github.com/session",data={
"commit": "Sign in",
"utf8":"✓",
"authenticity_token": token,
"login": "yuanchenqi0316@163.com",
"password": "yuanchenqi0316"
}) # res=requests.get("https://github.com/settings/emails") with open("github.html","wb") as f:
f.write(res2.content) print(res2.history)
github案例.py
六重点:请求格式
请求协议格式:
请求首行
请求头
空行
请求体 请求头:
content-type 浏览器------------------>服务器
1 针对post请求(post请求才有请求体)
2 向服务器发送post请求有哪些形式:
form表单 (urlencoded编码格式)
user=yuan
pwd=123
Ajax(urlencoded编码格式)
a=1
b=2 请求协议格式字符串
发送urlencoded编码格式数据
'''
请求首行
请求头
content-type:"urlencoded"
空行
请求体 # user=yuan&pwd=123 urlencoded编码格式
'''
发送json数据
'''
请求首行
请求头
content-type:"json"
空行
请求体 # {"user":"yuan","pwd":123} json编码格式
content-type
一:requests爬虫基础的更多相关文章
- python 3.x 爬虫基础---常用第三方库(requests,BeautifulSoup4,selenium,lxml )
python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---常用第三方库 ...
- 爬虫基础以及 re,BeatifulSoup,requests模块使用
爬虫基础以及BeatifulSoup模块使用 爬虫的定义:向网站发起请求,获取资源后分析并提取有用数据的程序 爬虫的流程 发送请求 ---> request 获取响应内容 ---> res ...
- 爬虫基础以及一个简单的实例(requests,re)
最近在看爬虫方面的知识,看到崔庆才所著的<Python3网络爬虫开发实战>一书讲的比较系统,果断入手学习.下面根据书中的内容,简单总结一下爬虫的基础知识,并且实际练习一下.详细内容请见:h ...
- 03爬虫-requests模块基础(1)
requests模块基础 什么是requests模块 requests模块是python中原生基于网络模拟浏览器发送请求模块.功能强大,用法简洁高效. 为什么要是用requests模块 用以前的url ...
- Python爬虫基础
前言 Python非常适合用来开发网页爬虫,理由如下: 1.抓取网页本身的接口 相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁:相比其他动态脚本语言,如perl ...
- python从爬虫基础到爬取网络小说实例
一.爬虫基础 1.1 requests类 1.1.1 request的7个方法 requests.request() 实例化一个对象,拥有以下方法 requests.get(url, *args) r ...
- python 3.x 爬虫基础---正则表达式
python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---Requer ...
- python 3.x 爬虫基础---Requersts,BeautifulSoup4(bs4)
python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---Requer ...
- python_爬虫基础学习
——王宇阳—根据mooc课程总结记录笔记(Code_boy) Requests库:自动爬去HTML页面.自动网络请求提交 robots.txt:网络爬虫排除标准 Beautiful Soup库:解析H ...
随机推荐
- Solr在Linux中的安装
在Linux下进行安装: 我已经将压缩包放在了虚拟机下面了,然后开始进行解压缩. tar -zxvf solr-4.10.3.tar 解压完会多一个文件夹.在bin目录下会有这样的一个目录, 其中的这 ...
- 创建docker镜像的私有仓库
CentOS Linux release 7.2.1511 Docker version 17.03.1-ce 安装registry镜像 同时安装一个比较小的镜像alpine待会作测试用: # doc ...
- 分布式系统下的全局id生成策略分析
对于分布式系统而言,意味着会有很多个instance会并发的生成很多业务数据,比如订单.不同的机房.不同的机器.不同的应用实例会同时生成.所以,如何生成一个好用的全局id并不是一个简单的uuid就能够 ...
- LVS+Keepalived+Mysql+主备数据库架构[4台]
这是一个坑...磨了不少时间.见证自己功力有待提升... 架构图 数据库 1.安装数据库 这块不难, 直接引用:mysql安装 2.数据库主备 这块不难, 直接引用: mysql主备 虚拟VIP 重点 ...
- linux远程方式,以及基础命令
最近准备学习linux系统,购买了阿里巴巴的云服务器,系统为CentOS. 一.连接实例 1.使用管理终端. 这是阿里巴巴云服务器管理控制台,需要登录阿里巴巴,找到自己实例后,点击右侧远程连接即刻. ...
- topcoder srm 410 div1
problem1 link 不包含$gridConnections$ 的联通块一定是连在所有包含$gridConnections$的联通块中最大的那一块上. import java.util.*; i ...
- c++ vector常见用法
//输出尾巴的元素 cout<<vec.back(); //定义vector迭代器 vector<int>::iterator ite=vec.begin(); for(ite ...
- 【POJ1961】period
[POJ1961]period 题目描述 如果一个字符串S是由一个字符串T重复K次构成的,则称T是S的循环元.使K出现最大的字符串T称为S的最小循环元,此时的K称为最大循环次数. 现在给定一个长度为N ...
- P4172 [WC2006]水管局长
P4172 [WC2006]水管局长 前言 luogu数据太小 去bzoj,他的数据大一些 思路 正着删不好维护 那就倒着加,没了 LCT维护他的最小生成树MST 树上加一条边肯定会有一个环 看看环上 ...
- 【系列教程1】Gradle入门系列二:第一个Java项目
这篇教程的主要内容是讲解如何用Gradle编译和打包一个简单的Java项目. 该Java项目只有一个需求:我们的构建脚本必须创建一个可执行的Jar文件,换句话说,我们必须能够使用命令java -jar ...