网络爬虫(一)

一、简介

  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的更多相关文章

  1. PHP_零基础学php_3PHP函数、传参函数、默认参数、函数返回值

    <?php function say_hello() //无参数 { $name="tang"; echo "hello,".$name; echo &q ...

  2. C#基础知识回顾--线程传参

    C#基础知识回顾--线程传参 在不传递参数情况下,一般大家都使用ThreadStart代理来连接执行函数,ThreadStart委托接收的函数不能有参数, 也不能有返回值.如果希望传递参数给执行函数, ...

  3. .NET 内存基础(通过内存体验类型、传参、及装箱拆箱)

    该随笔受启发于<CLR Via C#(第三版)>第四章4.4运行时的相互联系 一.内存分配的几个区域 1.线程栈 局部变量的值类型 和 局部变量中引用类型的指针(或称引用)会被分配到该区域 ...

  4. [妙味JS基础]第五课:函数传参、重用、价格计算

    知识点总结 函数传参,传的参数=数据类型(即:数值.字符串.布尔.函数.对象.未定义) 通过传参来重用代码 1.尽量保证 HTML 代码结构一致,可以通过父级选取子元素 2.把核心主程序实现,用函数包 ...

  5. JS基础之传参(值传递、对象传递)

    一.概念 我们需了解什么是按值传递(call by value),什么是按引用传递(call by reference).在计算机科学里,这个部分叫求值策略(Evaluation Strategy). ...

  6. python基础----函数的定义和调用、return语句、变量作用域、传参、函数嵌套、函数对象、闭包、递归函数

    1.函数的定义: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...

  7. python基础:函数传参、全局变量、局部变量、内置函数、匿名函数、递归、os模块、time模块

    ---恢复内容开始--- 一.函数相关: 1.1位置参数: ef hello(name,sex,county='china'): pass #hello('hh','nv') #位置参数.默认参数 1 ...

  8. [Vue 牛刀小试]:第十三章 - Vue Router 基础使用再探(命名路由、命名视图、路由传参)

    一.前言 在上一章的学习中,我们简单介绍了前端路由的概念,以及如何在 Vue 中通过使用 Vue Router 来实现我们的前端路由.但是在实际使用中,我们经常会遇到路由传参.或者一个页面是由多个组件 ...

  9. Python基础--动态传参

    形参的顺序: 位置 *arg     默认值  **args  ps:可以随便搭配,但是*和**以及默认值的位置顺序不能变 *,** 形参:聚合 位置参数* >>元祖 关键字** > ...

随机推荐

  1. Angular8 ie兼容性解决

    启用腻子脚本 polyfills.ts /* IE9, IE10 and IE11 requires all of the following polyfills. */ import 'core-j ...

  2. Eclipse4.5 Mars版本安装activiti插件 亲测可用

    Eclipse4.5 Mars版本安装activiti插件 亲测可用 学习使用activiti 在线安装一直,国内的网络真心的是 很苦 啊:在茫茫网络上面找到了很多插件的离线包 终于找到一个可以使用的 ...

  3. nginx的脚本引擎(二)rewrite

    其实rewrite指令和上一篇说的if/set/return/break之类的没多大差别,但是rewrite用起来相对复杂,我就把他单独放到了这里.想要弄懂nginx的脚本引擎需要先明白处理reque ...

  4. 实验三  平面广告制作工具Photoshop基础--制作LOGO

    实验三  平面广告制作工具Photoshop基础--制作LOGO [实验目的] ⑴.熟悉Photoshop的界面 ⑵.能利用photoshop处理简单的图像 [实验条件] ⑴.个人计算机一台 ⑵.个人 ...

  5. keccak和sha3的区别

    keccak应用 在以太坊中,用keccak哈希算法来计算公钥的256位哈希,再截取这256位哈希的后160位哈希作为地址值. keccak和sha3的区别 sha3由keccak标准化而来,在很多场 ...

  6. CentOS 7的安装与部署 01

    01 虚拟软件的安装与配置 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统.在实体计算机中能够完成的工作在虚拟机中都能够实现. ...

  7. 多路查找树(2-3 树、2-3-4 树、B 树、B+ 树)

    本文参考自<大话数据结构> 计算机中数据的存储 一般而言,我们都是在内存中处理数据,但假如我们要操作的数据集非常大,内存无法处理了,在这种情况下对数据的处理需要不断地从硬盘等存储设备中调入 ...

  8. k8s node上查看节点

    node执行 mkdir -p /root/.kube master执行 scp admin.conf node1:/root/.kube/config

  9. swoole热启动

    通过扫描指定的要扫描的目录,把所有文件找出来,分别md5 连接字符串,最后再md5返回 启动定时器,扫描,当前的加密值和以前一样不管,否则就重启服务,把当前赋值给旧值 . httpServer.php ...

  10. swoole为什么不建议使用static和global

    $http = new swoole_http_server("0.0.0.0", 9501); $http->on("request", functio ...