一、爬虫基础

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. 弹性盒子---CSS3布局方式

    1.弹性盒子/伸缩盒子 如果要使用弹性盒子属性,首先要将父级元素变成弹性盒子 Flex-direction 设置伸缩盒子的内部元素的排列方式 Row    从左到右安行排列 Column  从上到下按 ...

  2. 中间件增强框架之InterceptFramework

    本文讲解MOF中的InterceptFramework框架.该框架可以在应用启动过程中获取画像信息,实现应用画像数据采集和存储. 一.前言 在智能运维中,应用服务所使用的组件及JAR包等相关信息非常重 ...

  3. laravel为模型中所有查询统一添加WHERE条件

    在使用laravel开发web系统的过程,需要在model处为该模型统一添加一个条件或者多个条件,研究了一个laravel的模型类,发现model中有个方法是构建查询的,方法如下: /** * Reg ...

  4. Go输入输出格式化Printf

    package main import ( "fmt" "os" ) type point struct { x, y int } func main() { ...

  5. java 局部变量成员变量区别

    首先,成员变量可直接初始化(即赋值),也可不赋值,不赋值java按照以下类型自动赋值 局部变量调用前必须初始化(赋值),java不会自动处理 局部变量可以和成员变量重名(但不建议),如果在当前对象的方 ...

  6. C++ 重载运算符(详)

    C++ 重载运算符 C 重载运算符 一重载函数 1例程 2备注 二重载运算符 11 二元运算符重载 11 一元运算符重载 111 -- 2备注 3 特殊运算符重载 31 号运算符 32 下标运算符 3 ...

  7. d3.js V5版本在vue里使用 自定义节点图片

    var width = this.$refs.topInfo.offsetWidth; var height = this.$refs.topInfo.offsetHeight; var img_w ...

  8. python学习——高阶函数

    递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.使用递归函数的优点是逻辑简单清晰,缺点就是过深的调用会导致栈溢出.但是针对尾递归优化的语言可以通过尾递归防 ...

  9. 本地图片上传到GitHub,MarkDown使用Github图片地址

    最近在学习用markdown编辑器,我是直接用有道云笔记编辑的,感觉真的好好用,编辑了一半的博客,可以按样式保存在云笔记中,我再也不会忘记写博客了~~ 但是在编辑博客的时候发现了一个问题,那就是本地图 ...

  10. Egret白鹭开发微信小游戏(使用皮肤搭建UI,代码调用组件功能)

    (1)新建皮肤,并命名如下 (2)根据实际情况自定义皮肤,例如: (3)修改名字为如下: (4)运行游戏会自动生成以下代码: (5)在default.thm.json中添加如下代码:(具体路径名字根据 ...