一、爬虫基础

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

  1. The Road to learn React书籍学习笔记(第二章)

    The Road to learn React书籍学习笔记(第二章) 组件的内部状态 组件的内部状态也称为局部状态,允许保存.修改和删除在组件内部的属性,使用ES6类组件可以在构造函数中初始化组件的状 ...

  2. 《DOM Scripting》学习笔记-——第二章 js语法

    <Dom Scripting>学习笔记 第二章 Javascript语法 本章内容: 1.语句. 2.变量和数组. 3.运算符. 4.条件语句和循环语句. 5.函数和对象. 语句(stat ...

  3. [HeadFrist-HTMLCSS学习笔记]第二章深入了解超文本:认识HTML中的“HT”

    [HeadFrist-HTMLCSS学习笔记]第二章深入了解超文本:认识HTML中的"HT" 敲黑板!!! 创建HTML超链接 <a>链接文本(此处会有下划线,可以单击 ...

  4. c#高级编程第七版 学习笔记 第二章 核心c#

    第二章 核心C# 本章内容: 声明变量 变量的初始化和作用域 C#的预定义数据类型 在c#程序中使用条件语句.循环和跳转语句执行流 枚举 名称空间 Main()方法 基本的命令行c#编译器选项 使用S ...

  5. [HeadFirst-JSPServlet学习笔记][第二章:高层概述]

    第二章:高层体系结构 容器 1 什么是容器? servelet没有main()方法.它们受控于另一个Java应用,这个Java应用称为容器(Container) Tomcat就是这样一个容器.Web服 ...

  6. 《Python基础教程(第二版)》学习笔记 -> 第二章 列表和元组

    本章将引入一个新的概念:数据结构. 数据结构是通过某种方式阻止在一起的数据元素的集合,这些数据元素可以是数字或者字符,设置可以是其他数据结构. Python中,最基本的数据结构是序列(Sequence ...

  7. 小甲鱼零基础汇编语言学习笔记第二章之寄存器(CPU工作原理,CPU内部通讯)

    这一章主要介绍了CPU中的重要器件——寄存器,整个系列通篇是以8086CPU作为探讨对象,其它更高级的CPU都是在此基础之上进行的升级.   1.一个典型的CPU是由运算器.控制器.寄存器等器件组成, ...

  8. Python学习笔记 --第二章

    Python语法基础 "#"号为注释符,建议缩进四个空格,Python大小写敏感. 数据类型 整数 0,2等等,以0x开头的为十六进制数 浮点数 1.58e9 字符串 用'或"括起来的任意文 ...

  9. JavaScript DOM编程艺术学习笔记-第二章JavaScript语法

    一.JavaScript示例 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  10. Java 学习笔记 ------第二章 从JDK到IDE

    本章学习目标: 了解与设定PATH 了解与指定CLASSPATH 了解与指定SOURCEPATH 使用package与import管理类别 初步认识JDK与IDE的对应关系 一.第一个Java程序 工 ...

随机推荐

  1. javaScript今日总结

    javascript简单介绍ECMAScript 1.语法 2.变量:只能使用var定义,如果在函数的内容使用var定义,那么它是一个局部变量,如果没有使用var它是一个全局的.弱类型! 3.数据类型 ...

  2. React Native 混合开发与实现

    关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 随着 React 的盛行,其移动开发框架 React Native 也收到了广大开发者的青睐,以下简 ...

  3. JVM类生命周期概述:加载时机与加载过程

    一个.java文件在编译后会形成相应的一个或多个Class文件,这些Class文件中描述了类的各种信息,并且它们最终都需要被加载到虚拟机中才能被运行和使用.事实上,虚拟机把描述类的数据从Class文件 ...

  4. hive explode 行拆列

    创建一张表test_explode,表结构如下 表数据如下: 1.使用explode函数 select explode(friends) as friend from test_explode; 但是 ...

  5. 缓冲区溢出实例(一)--Windows

    一.基本概念 缓冲区溢出:当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被填满从而覆盖了相邻内存区域的数据.可以修改内存数据,造成进程劫持,执行恶意代码,获取服务器控制权限等 ...

  6. net core WebApi——文件分片上传与跨域请求处理

    目录 前言 开始 测试 跨域 小结 @ 前言 在之前整理完一套简单的后台基础工程后,因为业务需要鼓捣了文件上传跟下载,整理完后就迫不及待的想分享出来,希望有用到文件相关操作的朋友可以得到些帮助. 开始 ...

  7. docker学习1:docker前世今生

    Docker简介 Docker是2013发起的一个项目,早在2013年,Docker自诞生起,就是整个技术界的明星项目,当时我还在上海实习,就在各种技术媒体上看到了Docker的介绍文章,很多技术媒体 ...

  8. RobotFrameWork Web自动化测试环境搭建

    前言 Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行.主要用于轮次很多的验收 ...

  9. Java描述表达式求值的两种解法:双栈结构和二叉树

    Java描述表达式求值的两种解法:双栈结构和二叉树 原题大意:表达式求值 求一个非负整数四则混合运算且含嵌套括号表达式的值.如: # 输入: 1+2*(6/2)-4 # 输出: 3.0 数据保证: 保 ...

  10. alter add命令用来增加表的字段

    alter add命令格式:alter table 表名 add字段 类型 其他; 例如,在表MyClass中添加了一个字段passtest,类型为int(4),默认值为0: mysql> al ...