python爬虫之urllib库

请求库 urllib

urllib主要分为几个部分

urllib.request 发送请求
urllib.error 处理请求过程中出现的异常
urllib.parse 处理url
urllib.robotparser 解析robots.txt -->规定了该网站的爬虫权限

urllib.request方法

data = urllib.request.urlopen(url)  #返回response对象

data.read() --->取出网页源代码 (bytes类型,可以通过decode()转成utf-8) 注意网页源代码不包括js处理后的数据
data.info() --->取出响应的头信息
data.getcode() --->取出返回码
data.geturl() --->取出请求的url

用脚本发出的请求,headers中的User-Agent是python-urllib/3.6,有些网站会根据这个来识别请求是不是脚本发出的,进而过滤掉爬虫,那我们怎么来模拟浏览器访问呢?
用urllib.request.Request()来携带headers头信息

headers = {
‘User=Agent‘:‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36‘,
}
request = urllib.request.Request(url,headers=headers) #实例Request()对象,Request对象初始化可以传入headers
data = urllib.request.urlopen(request) #urlopen不仅可以传入一个url,并且可以传入一个Request对象

urllib.request是如何区分请求时get还是post呢?
看看urllib.request的源代码,可以知道,如果如果请求携带data参数,则为post请求,反之则为get请求

Cookies使用

固定写法

import http.cookiejar
# 创建cookieJar对象
cookie_jar = http.cookiejar.CookieJar()
# 使用HTTPCookieProcessor创建cookie处理器,并以它为参数构建opener对象
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie_jar))
# 把opener变成urlopen,安装之后,给urlopen加上了保存cookies功能
urllib.request.install_opener(opener) #如果不想安装也可以,直接用opener.open(url)打开

设置代理

固定写法

proxy = {‘http‘:‘183.232.188.18:80‘,‘https‘:‘183.232.188.18:80‘} # 代理 ip:port
# 创建代理处理器
proxies = urllib.request.ProxyHandler(proxy)
# 创建opener对象
opener = urllib.request.build_opener(proxies,urllib.request.HTTPHandler)
urllib.request.install_opener(opener) # 如果不想安装也可以,直接用opener.open(url)打开,这样opener就有代理而urlopen没有

urllib.error

URLError是父类 断网或者服务器不存在 有异常原因,没有code属性
HTTPError是子类 服务器存在,但是地址不存在,有code和reason属性

#url = ‘http://www.adfdsfdsdsa.com‘ URLError
#url = ‘https://jianshu.com/p/jkhsdhgjkasdhgjkadfhg‘ HTTPError

判断方法

try:
    data = urllib.request.urlopen(url)
    print(data.read().decode())
except urllib.error.URLError as e:
    if hasattr(e,‘code‘):
        print(‘HTTPError‘)
    elif hasattr(e,‘reason‘):
        print(‘URLError‘)

urllib.parse

import urllib.parse

# urllib.parse.urljoin() # 拼接url 字符串拼接,若都是域名,则以后面覆盖
# urllib.parse.urlencode() # 把字典转查询字符串
# urllib.parse.quote() # url采用ascii码编码,出现中文时需要进行url编码
# urllib.parse.unquote() # url解码
#
urlencode

>>> from urllib import parse
>>> query = {
‘name‘: ‘walker‘,
‘age‘: 99,
}
>>> parse.urlencode(query)
‘name=walker&age=99‘

quote/quote_plus

>>> from urllib import parse
>>> parse.quote(‘a&b/c‘) #未编码斜线
‘a%26b/c‘
>>> parse.quote_plus(‘a&b/c‘) #编码了斜线
‘a%26b%2Fc‘

unquote/unquote_plus

from urllib import parse
>>> parse.unquote(‘1+2‘) #不解码加号
‘1+2‘
>>> parse.unquote(‘1+2‘) #把加号解码为空格
‘1 2‘

url = ‘http://www.baidu.com/?wd=书包‘
urllib.request.urlopen(url)  #会报错编码错误
#如果想正确请求,需要url = ‘http://www.baidu.com/?wd={}‘.format(urllib.parse.quote(‘书包‘)) 先把中文进行url编码,然后再去请求

urllib3

requests库底层用的urllib3

 import urllib3
 http = urllib3.PoolManager()

r = http.request(‘GET‘,‘https://www.jianshu.com‘,redirect=False) # 关闭重定向
print(r.status) 

原文地址:https://www.cnblogs.com/woaixuexi9999/p/9250735.html

时间: 2024-10-18 21:18:00

python爬虫之urllib库的相关文章

Python爬虫的Urllib库有哪些高级用法?

本文和大家分享的主要是python爬虫的Urllib库的高级用法相关内容,一起来看看吧,希望对大家学习python有所帮助. 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它 是一段HTML代码,加 JS.CSS,如果把网页比作一个人,那么HTML便是他的骨架,JS便是他的肌肉,CSS便是它的衣服.所以最重要的部分是存在于HTML中的,下面我 们就写个例子来扒一个网页下来. imp

Python爬虫之Urllib库的基本使用

Python爬虫之Urllib库的基本使用 import urllib2 response = urllib2.urlopen("http://www.baidu.com") print response.read() 其实上面的urlopen参数可以传入一个request请求,它其实就是一个Request类的实例,构造时需要传入Url,Data等等的内容.比如上面的两行代码,我们可以这么改写 # -*- coding: utf-8 -*- """ Cre

python爬虫入门urllib库的使用

urllib库的使用,非常简单. import urllib2 response = urllib2.urlopen("http://www.baidu.com") print response.read() 只要几句代码就可以把一个网站的源代码下载下来. 官方文档:https://docs.python.org/2/library/urllib2.html urllib2.urlopen(url[, data[, timeout[, cafile[, capath[, cadefau

Python爬虫:urllib库的基本使用

请求网址获取网页代码 import urllib.request url = "http://www.baidu.com" response = urllib.request.urlopen(url) data = response.read() # print(data) # 将文件获取的内容转换成字符串 str_data = data.decode("utf-8") print(str_data) # 将结果保存到文件中 with open("baid

python爬虫(四)_urllib2库的基本使用

本篇我们将开始学习如何进行网页抓取,更多内容请参考:python学习指南 urllib2库的基本使用 所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地.在Python中有很多库可以用来抓取网页,我们先学习urllib2. urllib2是Python2.x自带的模块(不需要下载,导入即可使用) urllib2官网文档:https://docs.python.org/2/library/urllib2.html urllib2源码 urllib2在python3.x中被

爬虫中urllib库

一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib.parse,在Python2中是urllib和urllib2. 一般是用urllib 库 爬取图片比较方便, requests 库 封装的比 urllib库好多了  二.由易到难的爬虫程序: 1.爬取百度首页面所有数据值 #!/usr/bin/env python # -*- coding:utf-

python爬虫基础02-urllib库

Python网络请求urllib和urllib3详解 urllib是Python中请求url连接的官方标准库,在Python2中主要为urllib和urllib2,在Python3中整合成了urllib. 官方文档链接为:https://docs.python.org/3/library/urllib.html 而urllib3则是增加了连接池等功能,两者互相都有补充的部分. urllib 它是 Python 内置的 HTTP 请求库,也就是说我们不需要额外安装即可使用,基本上涵盖了基础的网络请

web爬虫讲解—urllib库中使用xpath表达式—BeautifulSoup基础

在urllib中,我们一样可以使用xpath表达式进行信息提取,此时,你需要首先安装lxml模块,然后将网页数据通过lxml下的etree转化为treedata的形式 urllib库中使用xpath表达式 etree.HTML()将获取到的html字符串,转换成树形结构,也就是xpath表达式可以获取的格式 #!/usr/bin/env python # -*- coding:utf8 -*- import urllib.request from lxml import etree #导入htm

python3爬虫之Urllib库(二)

在上一篇文章中,我们大概讲了一下urllib库中最重要的两个请求方法:urlopen()  和  Request() 但是仅仅凭借那两个方法无法执行一些更高级的请求,如Cookies处理,代理设置等等. 这是就是Handler大显神威的时候了,简单地说,他是各种处理器,有处理验证登录的,有处理Cookies的,有处理代理设置的. 高级用法 首先说一下urllib.request模块中的BaseHandler类,他是所有类的基类,它提供了最基本的方法,如:default_open()   prot