Python爬虫学习:Python内置的爬虫模块urllib库
urllib库
- urllib库是Python中一个最基本的网络请求的库。它可以模拟浏览器的行为发送请求(都是这样),从而获取返回的数据
urllib.request
在Python3的urllib库当中,所有和网络请求相关的方法都被集成到了urllib.request模块下
- #基本使用
- from urllib import request
- resp = request.urlopen("URL")
- print(resp.read())
如果是成功的,那么我们打印的内容和在浏览器中右击查看源代码的内容是一样的。
urlopen接受两个参数:
- url:请求的url地址
- data:请求的data,如果设置了这个值,请求就会变成是POST请求
返回值:返回值是一个http.client.HTTPResponse对象,这个对象是一个类 文件句柄 对象。有read(size)、readline、readlines以及getcode等方法
urlretrieve函数
这个函数可以非常方便的将网页上的内容保存到本地。
- from urllib import request
- request.urlretrieve("URL","本地保存的文件")
urlencode函数
用浏览器发送请求的时候,如果url中包含了中文或者是其他的特殊字符,那么浏览器会自动的给我们进行一个编码。而如果是我们的爬虫,我们就只能手动的进行编码。
urlencode可以把字典的数据转换为url编码的数据
- form urllib import parse
- data = {"key":"value"}
- url_encode = parse.urlencode(data)
- print(url_encode)
parse_qs函数
将经过编码后的数据再次进行解码。
- form urllib import parse
- data = {"key":"value"}
- url_encode = parse.urlencode(data)
- url_decode = parse.parse_qs(url_encode)
- print(url_decode)
urlparse和urlsplit
有的时候,我们从页面上拿到一个url,想对这个url进行一个分割,取出某一部分什么的。就可以使用urlparse和urlsplit这些啦
- from urllib import request,parse
- url = 'http://www.baidu.com/s?username=zhiliao'
- result = parse.urlsplit(url)
- # result = parse.urlparse(url)
- print('scheme:',result.scheme)
- print('netloc:',result.netloc)
- print('path:',result.path)
urlparse和urlsplit几乎是一模一样的,唯一不同的就是urlparse中多了一个params属性,这个不常用。
request.Request
还记得在充电中说的请求头吗,如果你想在请求的过程中加上这些请求头,那么你就不得不使用这个request.Request类来实现了。
- from urllib import request
- headers = {
- "User-Agent":""
- }
- req = request.Request("URL",headers=headers)
- resp = request.urlopen(req)
- print(resp.read())
ProxyHandler代理设置
我们制作的爬虫有时候为了爬取更多的数据,有可能会对对方的服务器造成很大的压力。所以,一些网站就专门针对爬虫做了一些防范措施,之前的user-agents是一个,一个Ip访问次数过多也会被禁止,这也是一种防爬机制,所以我们可能会找一些代理IP,当自己的IP无法使用的时候,换一个IP重新使用
- form urllib import request
- handler = requet.ProxyHandler({"代理的协议(http或者https)":"代理IP+端口"})
- opener = request.build_opener(handler)
- req = request.Request("请求的URL")
- resp = opener.open(req)
- print(resp.read())
COOKIE的获取和使用
cookie的格式:
Set-Cookie:NAME=VALUE:Expires/Max-age=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE
- NAME:cookie的名字
- VALUE:cookie的值
- Expires:cookie的过期时间,时间一到,浏览器会自动清除
- Path:cookie作用的路劲
- Domain:cookie作用的域名
- SECURE:是否只在https协议下起作用
使用cookielib库和HTTPCookieProcessor模拟登录
Python爬虫学习:Python内置的爬虫模块urllib库的更多相关文章
- Python基础学习五 内置函数
1.函数补充: 1)函数返回值return可以有多个 2)补充示例: nums = [0,1,2,3,4,5,6,7,8] #如何将list里面的元素变为字符串类型 new_nums = [str(x ...
- python基础学习笔记——内置函数
一. 简介 python内置了一系列的常用函数,以便于我们使用,python英文官方文档详细说明:点击查看, 为了方便查看,将内置函数的总结记录下来. 二. 使用说明 以下是Python3版本所有的内 ...
- python基础学习Day14 内置函数 匿名函数
一.内置函数里几个高频重要函数 (1)min\max函数的用法 以min函数的为例: min:返回可迭代对象的最小值(可加key,key为函数名,通过函数的规则,返回最小值). l1 =[(,),(, ...
- Python内置的操作系统模块(os)与解释器交互模块(sys)
Python内置的操作系统模块(os)与解释器交互模块(sys) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本片博客只介绍Python调用操作系统的模块即os模块,以及Pyth ...
- Python 数据类型常用的内置方法(二)
目录 Python 数据类型常用的内置方法(二) 1.字符串类型常用内置方法 1.upper.lower.isupper.islower 2.startswith.endswith 3.format ...
- Python 数据类型常用的内置方法(一)
目录 Python 数据类型常用的内置方法 1.整型 int 2.浮点型 float 字符串转浮点型: 3.字符串 str 多种类型转字符型: 索引 切片 len( )方法:统计字符串长度/个数 移除 ...
- Python之生成器及内置函数篇4
一.可迭代对象 #1.什么是迭代?:迭代是一个重复的过程,并且每次重复都是基于上一次的结果而来 #2.可迭代的对象:在python中,但凡内置有__iter__方法的对象,都是可迭代的对象 #3.迭代 ...
- [转]python file文件操作--内置对象open
python file文件操作--内置对象open 说明: 1. 函数功能打开一个文件,返回一个文件读写对象,然后可以对文件进行相应读写操作. 2. file参数表示的需要打开文件的相对路径(当前 ...
- python字符串——"奇葩“的内置函数
一.前言 python编程语言里的字符串与我们初期所学的c语言内的字符串还是有一定不同的,比如python字符串里的内置函数就比语言的要多得多:字符串内的书写格式也会有一点差异,例:字符串内含有引 ...
- python 类(object)的内置函数
python 类(object)的内置函数 # python 类(object)的内置函数 ### 首先 #### 以__双下划线开头的内置函数 __ #### __往往会在某些时候被自动调用,例如之 ...
随机推荐
- SQL编程:group by合并结果字符串 ---> group_concat函数就能行
1.表结构 create table tt(id int,v varchar(30)); insert into tt values(1,'a'),(1,'b'),(2,'b ...
- 深海划水队项目--七天冲刺之day6
站立式会议:由于有位项目组成员回家了,所以由微信群在线讨论代替. 昨天已完成的任务:界面优化,实现方块的移动,旋转和下降. 今天已完成的任务:设置游戏按键,检查重合.检查是否超出边界.检查是否可以下落 ...
- .NET中Debug模式与Release模式差别
Debug里的PDB是full,保存着调试和项目状态信息.有断言.堆栈检查等代码.Release 里的PDB是pdb-only,基本上:出什么错了+错误在哪行. 因为很多人把PDB理解成:调试文件.P ...
- Solr相似度算法三:DRFSimilarity框架介绍
地址:http://terrier.org/docs/v3.5/dfr_description.html The Divergence from Randomness (DFR) paradigm i ...
- api接口响应类型定义
public class Response<T> { public ResponseStatus Status { get; set; } public string Message { ...
- cesium随笔 — 简单实现获取三维范围(包括相机高度)
代码 // 获取当前三维范围 function getCurrentExtent() { // 范围对象 var extent = {}; // 得到当前三维场景 var scene = viewer ...
- SQL 判断数据库是否有相关表 字段
--判断数据库是否有相关表 if exists (select 1 from sysobjects where id = object_id(' 表名 ') and type = ' U ' ); - ...
- Websphere中获取项目下.properties路径
一:如果容器为Websphere,那下面为红色的地方不能加"/",如果为tomcat,则加上"/", String path = this.class.get ...
- 一次MySQL线上慢查询分析及索引使用
本文由作者郑智辉授权网易云社区发布. 0.前言 本文通过分析线上MySQL慢查询日志,定位出现问题的SQL,进行业务场景分析,结合索引的相关使用进行数据库优化.在两次处理问题过程中,进行的思考. 1. ...
- JUC中Executor基本知识
Future And Callable 引用 http://www.cnblogs.com/dolphin0520/p/3949310.html http://www.iocoder.cn/JUC/ ...