Spider_基础总结1_Request(get/post__url传参_headers_timeout)+Reponse
网络爬虫(一)
一、简介
1、robot协议(爬虫协议):这个协议告诉引擎哪些页面可以抓取,哪些不可以
-User-agent:爬虫引擎
-allow:允许robot访问的URL
-disallow:禁止访问的URL
2、爬虫约束:过快/频繁的网络爬虫会对服务器产生巨大的压力,网站可能封锁你的IP,或者采取法律行动,所以需要将请求速度限定在一个合理范围内
3、爬虫流程:
-获取网页:给网页一个网址发送请求,该网址会返回整个网页的数据;
-解析网页(提取数据):从整个网页中提取想要的数据
-存储数据:将数据存储下来,可以存在csv中,或者数据库中
二、新建爬虫
1、获取网页:
-导入request类,使用requests.get(link,headers=headers)获取网页
·requests的header伪装成浏览器访问;
·r是requests的Response回复对象,从中获取想要的信息,r.text是获取的网页内容代码
2、提取需要的数据:需要用到 bs4库的BeautifulSoup类,后续会将到。
三、静态页面抓取
1、参数介绍:
-r.text:服务器响应的内容,会自动根据响应头部的字符编码进行解码
-r.encoding:服务器内容使用的文本编码;
-r.status_code:用于检测响应的状态码.
·返回200,表示请求成功;
·返回4xx,表示客户端错误;
·返回5xx,表示服务器错误响应
-r.content:字节方式的响应体,会自动解码gzip和deflate编码的响应数据;
-r.json:是Requests中的内置的JSON解码器
四、代码讲解:
# 1-Request库及Reponse对象:
import requests
r=requests.get("http://www.baidu.com") # r,服务器响应对象 get方法
print(r.url) # http://www.baidu.com/
print(r.encoding) # ISO-8859-1 文本编码
print(r.status_code) # 200 响应状态码 200--请求成功 4xx--客户端错误 5xx--服务器错误
# print(r.text) # 服务器响应的代码
# 2-定制Requests
# 1)传递 url参数
# 2)定制请求头
# 3)发送 Post请求
# 4)超时
# 2-1)传递 url参数:
import requests
# 方式1:
url='http://httpbin.org/get?key1=value1' # 转义字符 r有没有都行
r=requests.get(url)
# 方式2:
parm_dict={'key1':'value1','key2':'value2'}
url='http://httpbin.org/get' # url以 /get结尾
r=requests.get(url,params=parm_dict)
print(r.status_code) # 200
# 2-2)定制请求头
# 请求头提供了关于请求,响应,或其他发送实体的信息。
# 1)打开网址:www.santostang.com
# 2)右键--检查元素--网络--左侧资源里单击要请求的网页www.santostang.com
# 3)点击右侧的‘消息头’,并复制。
# 复制内容如下:
# Host: www.santostang.com
# User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0
# Accept: text/css,*/*;q=0.1
# Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
# Accept-Encoding: gzip, deflate
# Connection: keep-alive
# Cookie: Hm_lvt_752e310cec7906ba7afeb24cd7114c48=1591794256,1591794423; PHPSESSID=1plcgphukjij28c42ns9octmq2; Hm_lpvt_752e310cec7906ba7afeb24cd7114c48=1591794423
# 提取上面内容的重要信息,得到如下的 headers:
import requests
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0',
'Host':'www.santostang.com'
}
url='http://www.santostang.com'
r=requests.get(url,headers=headers)
print(r.status_code) # 200
# 2-3)发送Post请求
# get方法发送请求会将一些信息暴露在url里很不安全,此时可以使用 Post方法,发送编码为表单形式的请求。
# 只需要将数据存储在字典中,并传递给Post方法的data参数就可以:
import requests
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0',
'Host':'www.santostang.com'
}
parm_dict={'key1':'value1','key2':'value2'}
url='http://httpbin.org/post' # url以 /post结尾
r=requests.post(url,data=parm_dict,headers=headers)
print(r.status_code) # 200
print(r.text)
200
{
"args": {},
"data": "",
"files": {},
"form": {
"key1": "value1",
"key2": "value2"
},
"headers": {
"Accept": "/",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "23",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "www.santostang.com",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0",
"X-Amzn-Trace-Id": "Root=1-5ee5c1c1-fd164ea0042482a055a977c0"
},
"json": null,
"origin": "116.153.38.222",
"url": "http://www.santostang.com/post"
}
# 2-4)超时
# 有时候爬虫会遇到服务器长时间不返回,这时就会一直等待,造成爬虫程序没有顺利执行,此时可以给get或post方法的 timeout参数设置一个时间限制:
# 一般可以设置为20
# import requests
# url='http://httpbin.org/get'
# r=requests.get(url,timeout=0.00001) # 为了观察报错效果,故意设置的非常小
# 报错信息为:
# ConnectTimeout: HTTPConnectionPool(host='httpbin.org', port=80):
# Max retries exceeded with url: /get (Caused by ConnectTimeoutError(<requests.packages.urllib3.connection.
# HTTPConnection object at 0x000001DE11B38160>, 'Connection to httpbin.org timed out. (connect timeout=1e-05)'))
# 用 try except处理如下:
import requests
parm_dict={'key1':'value1','key2':'value2'}
url='http://httpbin.org/post' # url以 /post结尾
try:
r=requests.post(url,data=parm_dict,timeout=0.00001)
print(r.status_code)
print(r.text)
except:
print('请求超时,请尝试将timeout设置的大一些试试')
请求超时,请尝试将timeout设置的大一些试试
Spider_基础总结1_Request(get/post__url传参_headers_timeout)+Reponse的更多相关文章
- PHP_零基础学php_3PHP函数、传参函数、默认参数、函数返回值
<?php function say_hello() //无参数 { $name="tang"; echo "hello,".$name; echo &q ...
- C#基础知识回顾--线程传参
C#基础知识回顾--线程传参 在不传递参数情况下,一般大家都使用ThreadStart代理来连接执行函数,ThreadStart委托接收的函数不能有参数, 也不能有返回值.如果希望传递参数给执行函数, ...
- .NET 内存基础(通过内存体验类型、传参、及装箱拆箱)
该随笔受启发于<CLR Via C#(第三版)>第四章4.4运行时的相互联系 一.内存分配的几个区域 1.线程栈 局部变量的值类型 和 局部变量中引用类型的指针(或称引用)会被分配到该区域 ...
- [妙味JS基础]第五课:函数传参、重用、价格计算
知识点总结 函数传参,传的参数=数据类型(即:数值.字符串.布尔.函数.对象.未定义) 通过传参来重用代码 1.尽量保证 HTML 代码结构一致,可以通过父级选取子元素 2.把核心主程序实现,用函数包 ...
- JS基础之传参(值传递、对象传递)
一.概念 我们需了解什么是按值传递(call by value),什么是按引用传递(call by reference).在计算机科学里,这个部分叫求值策略(Evaluation Strategy). ...
- python基础----函数的定义和调用、return语句、变量作用域、传参、函数嵌套、函数对象、闭包、递归函数
1.函数的定义: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...
- python基础:函数传参、全局变量、局部变量、内置函数、匿名函数、递归、os模块、time模块
---恢复内容开始--- 一.函数相关: 1.1位置参数: ef hello(name,sex,county='china'): pass #hello('hh','nv') #位置参数.默认参数 1 ...
- [Vue 牛刀小试]:第十三章 - Vue Router 基础使用再探(命名路由、命名视图、路由传参)
一.前言 在上一章的学习中,我们简单介绍了前端路由的概念,以及如何在 Vue 中通过使用 Vue Router 来实现我们的前端路由.但是在实际使用中,我们经常会遇到路由传参.或者一个页面是由多个组件 ...
- Python基础--动态传参
形参的顺序: 位置 *arg 默认值 **args ps:可以随便搭配,但是*和**以及默认值的位置顺序不能变 *,** 形参:聚合 位置参数* >>元祖 关键字** > ...
随机推荐
- 关于android和Linux的一些问题
1.Android为什么选择java? 由于java虚拟机,实现软件层的编程与硬件无关性(无需进行特定编译或平台配置). 2.Android和Linux内核区别? Android上的应用软件运行在da ...
- 多测师讲解接口 _需求文档(用户增删改查)_高级讲师肖sir
首先连接Duoceshi_new网络 密码为Duoceshi_new,因为接口项目部署在Duoceshi_new网段中. 测试工具:postman域名:http://192.168.1.2:8081/ ...
- 多测师讲解接口测试 _面试题003_高级讲师肖sir
接口测试 一.你对HTTP有没有了解过?具体讲一下对http的了解.(答题思路: 定义.常见请求类型.状态码.请求头请求体.响应头和响应体.三次握手和四次挥手.)答:了解,我们做接口的时候基本上都是基 ...
- 【图论】USACO07NOV Cow Relays G
题目大意 洛谷链接 给定一张\(T\)条边的无向连通图,求从\(S\)到\(E\)经过\(N\)条边的最短路长度. 输入格式 第一行四个正整数\(N,T,S,E\),意义如题面所示. 接下来\(T\) ...
- spring-boot-route(十九)spring-boot-admin监控服务
SpringBootAdmin不是Spring官方提供的模块,它包含了Client和Server两部分.server部分提供了用户管理界面,client即为被监控的服务.client需要注册到serv ...
- 第二章 rsync服务原理
一.备份 1.什么是备份? 1)把重要的数据或者文件再次复制一份并保存下来 2.为什么要做备份? 1)数据的重要性 2)为了出现故障,恢复数据 3.能不能不备份? 1)重要的数据一定要备份 2)不重要 ...
- Django采坑日志(django2.0)
使用Mariadb时出现的问题 "Unknown system variable 'transaction_isolation'" 解决办法:修改django/db/backend ...
- 如何使用性能分析工具定位SQL执行慢的原因?
但实际上 SQL 执行起来可能还是很慢,那么到底从哪里定位 SQL 查询慢的问题呢?是索引设计的问题?服务器参数配置的问题?还是需要增加缓存的问题呢?性能分析来入手分析,定位导致 SQL 执行慢的原因 ...
- 微信小程序分类的实现
微信小程序的分类功能思路 实现思路 1.把屏幕当成一个固定的盒子,然后把盒子分成两边,并让盒子的每一边都能够滚动. 2.通过将左侧边栏元素的id和右边内容的categoryId进行匹配,渲染展示相同i ...
- Vue留言 checked框案列
在命令行窗口输入vue create "工程名"命令 来创建vue脚手架