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)的内置函数 ### 首先 #### 以__双下划线开头的内置函数 __ #### __往往会在某些时候被自动调用,例如之 ...
随机推荐
- 20169205实验四 Android程序设计
20169205实验四 Android程序设计 实验内容及步骤 (一)第一个android studio项目 android studio与eclipse的传统安卓开发有一些不同之处 android ...
- Objective-C 学习笔记(三) Numbers/数字
Objective-C Numbers/数字 Objective-C中提供了一系列的NSNumber和重要的工作方法: + (NSNumber *)numberWithBool:(BOOL)value ...
- BFC开启条件
当元素CSS属性设置了下列之一时,即可创建一个BFC: float:left|right position:absolute|fixed display: table-cell|table-capti ...
- solr特点三: 基于Solr实现排序定制化参考
排序实现有N种形式,最低成本.最快响应时间是目标 一份索引,支持N种排序策略并且在线互不干扰是要考虑的每一种实现,处理的场景是不同的,不要千篇一律 020排序,从索引到效果,有不少坑,这篇文章没有细说 ...
- Hadoop 集群配置记录小结
Hadoop集群配置往往按照网上教程就可以"配置成功",但是你自己在操作的时候会有很多奇奇怪怪的问题出现, 我在这里整理了一下常见的问题与处理方法: 1.配置/etc/hosts ...
- .NET Framework 历史版本(2017年)
.NET简介 这个平台相信我们都知道,不过随着技术发展,现在的.NET平台也今非昔比. .NET平台类似Java平台,是微软于2000年推出的Windows操作系统的应用软件开发框架,发展至今形成巨大 ...
- 杭州.Net 相关大公司,希望对大家有帮助
本人目前大四,还在实习.北京工作辞职后,打算回杭州看看.发现杭州的大公司相对北京好少啊,招.Net相关的公司就更少了... (我认为刚毕业生还是去大公司比较靠谱,一方面也是实力的体现)大学生,而且之前 ...
- window系统JAVA开发环境的搭建
1.java JSK工具包安装教程http://www.runoob.com/java/java-environment-setup.html 2.Eclipase编辑器安装包教程 http://ww ...
- Mysql修改字段类型
mysql 修改字段长度 alter table news modify column title varchar(130); alter table 表名 modify column 字段名 类型 ...
- UWP开发入门(四)——自定义CommandBar
各位好,再次回到UWP开发入门系列,刚回归可能有些不适应,所以今天我们讲个简单的,自定义CommandBar,说通俗点就是自定义类似AppBarButton的东西,然后扔到CommandBar中使用. ...