参考学习:https://www.cnblogs.com/alex3714/articles/8359358.html

一、urllib库介绍

urllib库,它是Python内置的HTTP请求库。它包含4个模块:

  • request:    HTTP请求模块,    可以用来模拟发送请求。

  • error:      异常处理模块,      如果出现请求错误,我们可以捕获这些异常,然后进行重试或其他操作以保证程序不会意外终止。

  • parse:      url解析模块,       一个工具模块,提供了许多URL处理方法,比如拆分、解析、合并等。

  • robotparser:robots解析模块,    主要是用来识别网站的robots.txt文件,然后判断哪些网站可以爬,哪些网站不可以爬,它其实用得比较少。

二、request模块

request模块主要功能:构造HTTP请求,利用它可以模拟浏览器的一个请求发起过程,

request模块同时还有:处理授权验证(authenticaton)、重定向(redirection)、浏览器Cookies以及其他内容。

1.urlopen方法

 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

urlopen参数介绍:

  • url用于请求URL

  • data:GET请求不传,POST请求传

  • timeout设置超时时间,单位为秒,意思就是如果请求超出了设置的这个时间,还没有得到响应,就会抛出异常。如果不指定该参数,就会使用全局默认时间。它支持HTTP、HTTPS、FTP请求。

  • context必须是ssl.SSLContext类型,用来指定SSL设置。

  • cafile指定CA证书

  • capath指定CA证书的路径,这个在请求HTTPS链接时会有用。

import urllib.parse
import urllib.requestdata = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding='utf8')
print(data)
response = urllib.request.urlopen('http://httpbin.org/post', data=data)
print(response.read())

2.Request方法

class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

Request参数介绍

  • url用于请求URL,这是必传参数,其他都是可选参数。

  • data如果要传,必须传bytes(字节流)类型的。如果它是字典,可以先用urllib.parse模块里的urlencode()编码。

  • headers是一个字典,它就是请求头,我们可以在构造请求时通过headers参数直接构造,也可以通过调用请求实例的add_header()方法添加。添加请求头最常用的用法就是通过修改User-Agent来伪装浏览器

  • origin_req_host指的是请求方的host名称或者IP地址。

  • unverifiable表示这个请求是否是无法验证的,默认是False,意思就是说用户没有足够权限来选择接收这个请求的结果。例如,我们请求一个HTML文档中的图片,但是我们没有自动抓取图像的权限,这时unverifiable的值就是True`。

  • method是一个字符串,用来指示请求使用的方法,比如GET、POST和PUT等。


有很多网站为了防止程序爬虫爬网站造成网站瘫痪,会需要携带一些headers头部信息才能访问。

headers添加的两种方法如下:

方法1:

from urllib import request, parseurl = 'http://httpbin.org/post'
headers = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)','Host': 'httpbin.org'
}
dict = {'name': 'alex'
}
data = bytes(parse.urlencode(dict), encoding='utf8')
req = request.Request(url=url, data=data, headers=headers, method='POST')
response = request.urlopen(req)
print(response.read().decode('utf-8'))

方法2:

from urllib import request, parseurl = 'http://httpbin.org/post'
dict = {'name': 'Germey'
}
data = bytes(parse.urlencode(dict), encoding='utf8')
req = request.Request(url=url, data=data, method='POST')
req.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')
response = request.urlopen(req)
print(response.read().decode('utf-8'))

- Handler处理器

urllib.request模块里的BaseHandler类,它是所有其他Handler的父类。

常见Handler介绍:

  • HTTPDefaultErrorHandler:用于处理HTTP响应错误,错误都会抛出HTTPError类型的异常。

  • HTTPRedirectHandler:用于处理重定向。

  • HTTPCookieProcessor:用于处理Cookies。

  • ProxyHandler:用于设置代理,默认代理为空。

  • HTTPPasswordMgr:用于管理密码,它维护了用户名和密码的表。

  • HTTPBasicAuthHandler:用于管理认证,如果一个链接打开时需要认证,那么可以用它来解决认证问题。

3.代理ProxyHandler

Proxyhandler参数是一个字典,键名是协议类型(比如HTTP或者HTTPS等),键值是代理链接,可以添加多个代理。

然后,利用这个Handler及build_opener()方法构造一个Opener,之后发送请求即可。

from urllib.error import URLError
from urllib.request import ProxyHandler, build_openerproxy_handler = ProxyHandler({'http': 'http://127.0.0.1:9743','https': 'https://127.0.0.1:9743'
})
opener = build_opener(proxy_handler)
try:response = opener.open('https://www.baidu.com')print(response.read().decode('utf-8'))
except URLError as e:print(e.reason)

3.cookies

cookie中保存中我们常见的登录信息,有时候爬取网站需要携带cookie信息访问,这里用到了http.cookijar,用于获取cookie以及存储cookie

# 从网页获取cookie,并逐行输出
import http.cookiejar, urllib.requestcookie = http.cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
for item in cookie:print(item.name+"="+item.value)# 从网页获取cookie,保存为文件格式
filename = 'cookies.txt'
cookie = http.cookiejar.MozillaCookieJar(filename)  # cookie = http.cookiejar.LWPCookieJar(filename)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
cookie.save(ignore_discard=True, ignore_expires=True)PS:MozillaCookieJar是CookieJar的子类,LWPCookieJar与MozillaCookieJar均可读取、保存cookie,但格式不同

调用load()方法来读取本地的Cookies文件,获取到了Cookies的内容。

cookie = http.cookiejar.LWPCookieJar()
cookie.load('cookies.txt', ignore_discard=True, ignore_expires=True)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
print(response.read().decode('utf-8'))

三、error模块

from urllib import request, error
try:response = request.urlopen('http://cuiqingcai.com/index.htm')
except error.URLError as e:print(e.reason)

四、parse模块

urlparse()
urlunparse()
urlsplit()
urlunsplit()
urljoin()
urlencode()
parse_qs()
parse_qsl()
quote()
unquote()

五、robotparser模块

Robots协议也称作爬虫协议、机器人协议,它的全名叫作网络爬虫排除标准(Robots Exclusion Protocol),用来告诉爬虫和搜索引擎哪些页面可以抓取,哪些不可以抓取。它通常是一个叫作robots.txt的文本文件,

一般放在网站的根目录下。www.taobao.com/robots.txt

robotparser模块提供了一个类RobotFileParser,它可以根据某网站的robots.txt文件来判断一个爬取爬虫是否有权限来爬取这个网页。

urllib.robotparser.RobotFileParser(url='')# set_url():用来设置robots.txt文件的链接。
# read():读取robots.txt文件并进行分析。
# parse():用来解析robots.txt文件。
# can_fetch():该方法传入两个参数,第一个是User-agent,第二个是要抓取的URL。
# mtime():返回的是上次抓取和分析robots.txt的时间。
# modified():将当前时间设置为上次抓取和分析robots.txt的时间。

from urllib.robotparser import RobotFileParserrp = RobotFileParser()
rp.set_url('http://www.jianshu.com/robots.txt')
rp.read()
print(rp.can_fetch('*', 'http://www.jianshu.com/p/b67554025d7d'))
print(rp.can_fetch('*', "http://www.jianshu.com/search?q=python&page=1&type=collections"))

转载于:https://www.cnblogs.com/Iceredtea/p/11286037.html

数据之路 - Python爬虫 - urllib库相关推荐

  1. 数据之路 - Python爬虫 - BeautifulSoup库

    一.BeautifulSoup介绍 Beautiful Soup就是Python的一个HTML或XML的解析库,可以用它来方便地从网页中提取数据.Beautiful Soup自动将输入文档转换为Uni ...

  2. Python爬虫 —— urllib库的使用(get/post请求+模拟超时/浏览器)

    Python爬虫 -- urllib库的使用(get/post请求+模拟超时/浏览器) 这里写目录标题 Python爬虫 -- urllib库的使用(get/post请求+模拟超时/浏览器) 1.Py ...

  3. python爬虫 - Urllib库及cookie的使用

    lz提示一点,python3中urllib包括了py2中的urllib+urllib2.[python2和python3的区别.转换及共存 - urllib] 怎样扒网页? 其实就是根据URL来获取它 ...

  4. 002:Python爬虫Urllib库全面分析

    Urllib: Python中有一个功能强大,用于操作URL,并且在爬虫中经常使用的库.就是Urllib库. (在python2的时候,有Urllib库,也有Urllib2库.Python3以后把Ur ...

  5. Python爬虫urllib库的使用

    urllib 在Python2中,有urllib和urllib2两个库实现请求发送,在Python3中,统一为urllib,是Python内置的HTTP请求库 request:最基本的HTTP请求模块 ...

  6. 数据之路 - Python爬虫 - 数据存储

    一.文件存储 1.文件打开方式 文件打开方式 说明 r 以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模式 rb 以二进制只读方式打开一个文件.文件指针将会放在文件的开头 r+ 以读写方式 ...

  7. 数据之路 - Python爬虫 - PySpider框架

    1.PySpider基本功能 提供方便易用的WebUI系统,可视化地编写和调试爬虫. 提供爬取进度监控. 爬取结果查看.爬虫项目管理等功能. 支持多种后端数据库,如MySQL. MongoDB. Re ...

  8. 【python】python爬虫requests库详解

    1.安装:pip install requests 简介:Requests是一个优雅而简单的Python HTTP库,与之前的urllibPython的标准库相比,Requests的使用方式非常的简单 ...

  9. Python爬虫——Requests 库基本使用

    文章目录 Python爬虫--Requests 库基本使用 1.Requests简介和下载 2.Requests 库基本使用 Python爬虫--Requests 库基本使用 1.Requests简介 ...

  10. Cookie登录爬取实战:Python 利用urllib库的cookie实现网站登录并抓取

    1 环境:Python 3 +urllib库 实战网站:http://www.mjzcnd.com/  梅江之春论坛网站 2 背景: 现在许多网站都需要登录后才能访问某个页面,在登陆之前,我们是没有权 ...

最新文章

  1. Flutter开发之Text的overflow属性不生效(14)
  2. 搭建认证服务器 - Spring Security Oauth2.0 集成 Jwt 之 【授权码认证流程】 总结
  3. dae怎么用草图大师打开_当 to C市场饱和,该怎么用场景化打开新市场?
  4. 《WTM送书活动:向更遥远的星辰大海起航~》
  5. java csv 导入数据库_java – 如何上传CSV文件然后自动将数据插入数据库?
  6. Spring Cloud 全家桶 入门介绍
  7. Spring Boot 使用 Dom4j XStream 操作 Xml
  8. ZZULIOJ.1092:素数表(函数专题)
  9. python pandas excel处理_python使用pandas处理excel的方法
  10. 在出境通关中如何应用智能智慧护照阅读器技术呢
  11. CTFHUB中的文件上传——文件头检查
  12. 图书馆座位预约系统管理/基于微信小程序的图书馆座位预约系统
  13. Nuscenes数据集转换voc_xml格式用于yolov4训练
  14. conda的一个坑。channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch - https://mirro
  15. 数据可视化——R语言绘制散点相关图并自动添加相关系数和拟合方程
  16. 【论文笔记】知识图谱推理PRA——Relational retrieval using a combination of path-constrained random walks
  17. HI3861学习笔记(19)——WiFi接口使用(STA和AP模式)
  18. 5V升压8.4V的2A充电电路芯片-PW4202
  19. .NET的资源并不限于.resx文件(二)
  20. python写邮箱系统_教大家用Python写一个简单电子邮件发信器

热门文章

  1. Netty高性能之道
  2. 余额宝技术架构及演进
  3. 运维派送红包福利,参与就有!
  4. 这月到手的工资多了没?
  5. 求职 IT 少年李文星之死:请务必学会保护自己!
  6. 福利 | 简历模板大放送
  7. 无论如何,你该在大城市再坚持下
  8. 给列表项标记添加自定义图像
  9. C++ 11 新特性
  10. 重大发现: windows下C++ UI库 UI神器-SOUI(转载)