网络爬虫(一)

一、简介

  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. Kafka单机安装

    一.Kafka简介 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的 分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作 ...

  2. DBA提交脚步规范

    工作中需要走脚步流程,申请修改数据库,总结一些常用的语句:)提交时注明为DDL/DML_需求号_日期(各公司标准不一样)//修改字段长度使用;alter table t_task modify tas ...

  3. Python+Appium自动化测试(5)-appium元素定位常用方法

    对于Android而言,查找appUI界面元素属性的工具有三种:appium desktop,uiautomatorviewer.bat,weditor.之前已经介绍过了weditor的使用,这里我将 ...

  4. VS2019 配置opencv4.4

    安装VS2019 参考:链接 下载opencv 链接 下载此时的最新版4.4.0 最后"上墙"下,不然很慢! 安装opencv 我的安装位置是:D:\soft\opencv\ins ...

  5. day44 Pyhton 数据库Mysql

    内容回顾 什么是进程? 就是为了形容执行中的程序的一种称呼 它是操作系统中资源分配的最小单位 进程之间是数据隔离的,占用操作系统资源相对多 独立存在的 谈谈你对并发的理解 同时有多个任务需要执行,但是 ...

  6. docker的常用操作之三:网络配置

    一, docker安装后容器使用哪些网络类型? 在宿主机执行如下命令: [root@localhost liuhongdi]# docker network ls NETWORK ID NAME DR ...

  7. centos8上配置openresty/nginx可访问php

    一,创建一个测试站的目录 [root@yjweb data]# mkdir dev [root@yjweb data]# cd dev [root@yjweb dev]# mkdir think_ww ...

  8. C# 面试前的准备_基础知识点的回顾_04

    1.Session和Cookie的使用区别 很容易回答的就是Session在服务器端,存储的数据可以较大容量,比如我们存一个Table,上千条数据. Cookie保存在客户端,安全系数低,不能放重要的 ...

  9. 尝试从零开始构建我的商城 (一) :使用Abp vNext快速一个简单的商城项目

    尝试从零开始构建我的商城 (一) :使用Abp vNext快速搭建一个简单的项目 前言 GitHub地址 https://github.com/yingpanwang/MyShop 此文目的 本文将尝 ...

  10. Java Web核心组件之Servlet的使用介绍

    Servlet是Java Servlet的简称,称为小程序或服务连接器,用Java编写的服务端程序,主要功能在于交互式地浏览和修改数据,生成动态的Web内容:Servlet运行于支持Java的应用服务 ...