【学习笔记】第二章 python安全编程基础---python爬虫基础(urllib)
一、爬虫基础
1.爬虫概念
网络爬虫(又称为网页蜘蛛),是一种按照一定的规则,自动地抓取万维网信息的程序或脚本。用爬虫最大的好出是批量且自动化得获取和处理信息。对于宏观或微观的情况都可以多一个侧面去了解;
2.urllib库
urllib是python内置的HTTP请求库,旗下有4个常用的模块库:
urllib.request 请求模块
urllib.error 异常处理模块
urllib.parse url解析模块
urllib.robotparser robots.txt解析模块
3.urllib常用函数
接下来我们要具体介绍urllib模块常用的4个函数方法:
3.1 urllib.request.urlopen(url,data,timeout) 创建一个表示远程URL的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据;
urlopen返回对象提供方法:
read(),readline(),readlines(),fileno(),close():对HTTPResponse类型数据进行操作。
info():返回HTTPResponse对象,表示远程服务器返回的头信息。
getcode():返回http状态码。
geturl():返回请求的url。
3.2 urllib.parse.urlencode(dict) 将dict或者包含两个元素的元组列表转换成url参数。
例如:字典{'name':'dark-bull','age':200}将被转换为‘name=dark-bull&age=200’
3.3 urllib.request.ProxyHandler(dict) 可以讲dict字典里的ip当作代理进行设置。
网站对某个ip做了限制、封锁时,可以用该方法当成代理去设置
通过代理设置一个http的请求;
3.4 urllib.parse.urlparse(urlstring,scheme='',allow_fragments=True) URL解析函数的重点是将URL字符串拆分为其组件,或者将URL组件合为一个URL字符串。
3.5 urllib.request.urlretrieve(url,filename=None,reporthook=None,data=None)
rulretrieve()方法直接将远程数据下载到本地。
参数url 指定url请求的地址
参数filename指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据)
参数reporthook是一个回调函数,当连接上服务器,以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。
参数data指post到服务器的数据,该方法返回一个包含两个元素的(filename,headers)元组,filename表示保存到本地的路径,header表示服务器的响应头。
3.6 urllib.request.Request(url,data=None,headers={},origin_req_host=None,unverifiable=False,method=None)
常用参数:
url:访问的地址
data:此参数为可选字段,其中传递的参数需要转为bytes,如果是字典我们只需要通过urllib.parse.urlencode转换即可:
headers:http相应headers传递的信息,构造方法:headers参数传递,通过调用Request对象的 add_header()方法来添加请求头。
(python3.x爬虫基础---http headers详解,可参考此文章。)
3.7 urllib.request.HTTPCookieProcessor()
网站中通过cookie进行判断权限是很常见的,那么我们可以通过urllib.request.HTTPCookieProcesor(cookie)来操作cookie。使用Cookie和使用代理IP一样,也需要创建一个自己的opener。在HTTP包中,提供了cookiejar模块,用于提供对Cookie的支持。http.cookiejar功能强大,我们可以利用本模块的CookieJar类的对象来捕获cookie并在后续链接请求时重新发送,比如可以实现模拟登陆功能,该模块主要的对象有cookieJar、FileCookieJar、MozillCookieJar、LWOCookieJar。
用该函数模拟用户登录的cookie
二、urllib异常处理
当抓取某个网站,出现超时异常;
当出现超时脚本结果中不要出现这些错误信息,如何改进呢?我们导入socket包,用try语句捕捉异常数据进行处理;
三、python爬虫之requests库
requests 是python实现的简单易用的HTTP库,使用起来比urllib简洁很多;
1.requests常用函数:
requests.get('http://httpbin.org/get')
requests.post('http://httpbin.org/post')
requests.put('http://httpbin.org/put')
requests.delete('http://httpbin.org/delete')
requests.head('http://httpbin.org/head')
requests.options('http://httpbin.org/options')
其他方法同上
2.requests返回对象的属性和函数
response.content 返回二进制内容(比如音频)
response.text 返回文本内容
response.status_code 返回请求的状态码
response.headers 返回请求的头信息
response.cookies 获取cookie信息
response.json() 返回json编码信息
【学习笔记】第二章 python安全编程基础---python爬虫基础(urllib)的更多相关文章
- The Road to learn React书籍学习笔记(第二章)
The Road to learn React书籍学习笔记(第二章) 组件的内部状态 组件的内部状态也称为局部状态,允许保存.修改和删除在组件内部的属性,使用ES6类组件可以在构造函数中初始化组件的状 ...
- 《DOM Scripting》学习笔记-——第二章 js语法
<Dom Scripting>学习笔记 第二章 Javascript语法 本章内容: 1.语句. 2.变量和数组. 3.运算符. 4.条件语句和循环语句. 5.函数和对象. 语句(stat ...
- [HeadFrist-HTMLCSS学习笔记]第二章深入了解超文本:认识HTML中的“HT”
[HeadFrist-HTMLCSS学习笔记]第二章深入了解超文本:认识HTML中的"HT" 敲黑板!!! 创建HTML超链接 <a>链接文本(此处会有下划线,可以单击 ...
- c#高级编程第七版 学习笔记 第二章 核心c#
第二章 核心C# 本章内容: 声明变量 变量的初始化和作用域 C#的预定义数据类型 在c#程序中使用条件语句.循环和跳转语句执行流 枚举 名称空间 Main()方法 基本的命令行c#编译器选项 使用S ...
- [HeadFirst-JSPServlet学习笔记][第二章:高层概述]
第二章:高层体系结构 容器 1 什么是容器? servelet没有main()方法.它们受控于另一个Java应用,这个Java应用称为容器(Container) Tomcat就是这样一个容器.Web服 ...
- 《Python基础教程(第二版)》学习笔记 -> 第二章 列表和元组
本章将引入一个新的概念:数据结构. 数据结构是通过某种方式阻止在一起的数据元素的集合,这些数据元素可以是数字或者字符,设置可以是其他数据结构. Python中,最基本的数据结构是序列(Sequence ...
- 小甲鱼零基础汇编语言学习笔记第二章之寄存器(CPU工作原理,CPU内部通讯)
这一章主要介绍了CPU中的重要器件——寄存器,整个系列通篇是以8086CPU作为探讨对象,其它更高级的CPU都是在此基础之上进行的升级. 1.一个典型的CPU是由运算器.控制器.寄存器等器件组成, ...
- Python学习笔记 --第二章
Python语法基础 "#"号为注释符,建议缩进四个空格,Python大小写敏感. 数据类型 整数 0,2等等,以0x开头的为十六进制数 浮点数 1.58e9 字符串 用'或"括起来的任意文 ...
- JavaScript DOM编程艺术学习笔记-第二章JavaScript语法
一.JavaScript示例 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- Java 学习笔记 ------第二章 从JDK到IDE
本章学习目标: 了解与设定PATH 了解与指定CLASSPATH 了解与指定SOURCEPATH 使用package与import管理类别 初步认识JDK与IDE的对应关系 一.第一个Java程序 工 ...
随机推荐
- javaScript今日总结
javascript简单介绍ECMAScript 1.语法 2.变量:只能使用var定义,如果在函数的内容使用var定义,那么它是一个局部变量,如果没有使用var它是一个全局的.弱类型! 3.数据类型 ...
- React Native 混合开发与实现
关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 随着 React 的盛行,其移动开发框架 React Native 也收到了广大开发者的青睐,以下简 ...
- JVM类生命周期概述:加载时机与加载过程
一个.java文件在编译后会形成相应的一个或多个Class文件,这些Class文件中描述了类的各种信息,并且它们最终都需要被加载到虚拟机中才能被运行和使用.事实上,虚拟机把描述类的数据从Class文件 ...
- hive explode 行拆列
创建一张表test_explode,表结构如下 表数据如下: 1.使用explode函数 select explode(friends) as friend from test_explode; 但是 ...
- 缓冲区溢出实例(一)--Windows
一.基本概念 缓冲区溢出:当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被填满从而覆盖了相邻内存区域的数据.可以修改内存数据,造成进程劫持,执行恶意代码,获取服务器控制权限等 ...
- net core WebApi——文件分片上传与跨域请求处理
目录 前言 开始 测试 跨域 小结 @ 前言 在之前整理完一套简单的后台基础工程后,因为业务需要鼓捣了文件上传跟下载,整理完后就迫不及待的想分享出来,希望有用到文件相关操作的朋友可以得到些帮助. 开始 ...
- docker学习1:docker前世今生
Docker简介 Docker是2013发起的一个项目,早在2013年,Docker自诞生起,就是整个技术界的明星项目,当时我还在上海实习,就在各种技术媒体上看到了Docker的介绍文章,很多技术媒体 ...
- RobotFrameWork Web自动化测试环境搭建
前言 Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行.主要用于轮次很多的验收 ...
- Java描述表达式求值的两种解法:双栈结构和二叉树
Java描述表达式求值的两种解法:双栈结构和二叉树 原题大意:表达式求值 求一个非负整数四则混合运算且含嵌套括号表达式的值.如: # 输入: 1+2*(6/2)-4 # 输出: 3.0 数据保证: 保 ...
- alter add命令用来增加表的字段
alter add命令格式:alter table 表名 add字段 类型 其他; 例如,在表MyClass中添加了一个字段passtest,类型为int(4),默认值为0: mysql> al ...