数据之路 - Python爬虫 - urllib库
参考学习: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库相关推荐
- 数据之路 - Python爬虫 - BeautifulSoup库
一.BeautifulSoup介绍 Beautiful Soup就是Python的一个HTML或XML的解析库,可以用它来方便地从网页中提取数据.Beautiful Soup自动将输入文档转换为Uni ...
- Python爬虫 —— urllib库的使用(get/post请求+模拟超时/浏览器)
Python爬虫 -- urllib库的使用(get/post请求+模拟超时/浏览器) 这里写目录标题 Python爬虫 -- urllib库的使用(get/post请求+模拟超时/浏览器) 1.Py ...
- python爬虫 - Urllib库及cookie的使用
lz提示一点,python3中urllib包括了py2中的urllib+urllib2.[python2和python3的区别.转换及共存 - urllib] 怎样扒网页? 其实就是根据URL来获取它 ...
- 002:Python爬虫Urllib库全面分析
Urllib: Python中有一个功能强大,用于操作URL,并且在爬虫中经常使用的库.就是Urllib库. (在python2的时候,有Urllib库,也有Urllib2库.Python3以后把Ur ...
- Python爬虫urllib库的使用
urllib 在Python2中,有urllib和urllib2两个库实现请求发送,在Python3中,统一为urllib,是Python内置的HTTP请求库 request:最基本的HTTP请求模块 ...
- 数据之路 - Python爬虫 - 数据存储
一.文件存储 1.文件打开方式 文件打开方式 说明 r 以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模式 rb 以二进制只读方式打开一个文件.文件指针将会放在文件的开头 r+ 以读写方式 ...
- 数据之路 - Python爬虫 - PySpider框架
1.PySpider基本功能 提供方便易用的WebUI系统,可视化地编写和调试爬虫. 提供爬取进度监控. 爬取结果查看.爬虫项目管理等功能. 支持多种后端数据库,如MySQL. MongoDB. Re ...
- 【python】python爬虫requests库详解
1.安装:pip install requests 简介:Requests是一个优雅而简单的Python HTTP库,与之前的urllibPython的标准库相比,Requests的使用方式非常的简单 ...
- Python爬虫——Requests 库基本使用
文章目录 Python爬虫--Requests 库基本使用 1.Requests简介和下载 2.Requests 库基本使用 Python爬虫--Requests 库基本使用 1.Requests简介 ...
- Cookie登录爬取实战:Python 利用urllib库的cookie实现网站登录并抓取
1 环境:Python 3 +urllib库 实战网站:http://www.mjzcnd.com/ 梅江之春论坛网站 2 背景: 现在许多网站都需要登录后才能访问某个页面,在登陆之前,我们是没有权 ...
最新文章
- Flutter开发之Text的overflow属性不生效(14)
- 搭建认证服务器 - Spring Security Oauth2.0 集成 Jwt 之 【授权码认证流程】 总结
- dae怎么用草图大师打开_当 to C市场饱和,该怎么用场景化打开新市场?
- 《WTM送书活动:向更遥远的星辰大海起航~》
- java csv 导入数据库_java – 如何上传CSV文件然后自动将数据插入数据库?
- Spring Cloud 全家桶 入门介绍
- Spring Boot 使用 Dom4j XStream 操作 Xml
- ZZULIOJ.1092:素数表(函数专题)
- python pandas excel处理_python使用pandas处理excel的方法
- 在出境通关中如何应用智能智慧护照阅读器技术呢
- CTFHUB中的文件上传——文件头检查
- 图书馆座位预约系统管理/基于微信小程序的图书馆座位预约系统
- Nuscenes数据集转换voc_xml格式用于yolov4训练
- conda的一个坑。channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch - https://mirro
- 数据可视化——R语言绘制散点相关图并自动添加相关系数和拟合方程
- 【论文笔记】知识图谱推理PRA——Relational retrieval using a combination of path-constrained random walks
- HI3861学习笔记(19)——WiFi接口使用(STA和AP模式)
- 5V升压8.4V的2A充电电路芯片-PW4202
- .NET的资源并不限于.resx文件(二)
- python写邮箱系统_教大家用Python写一个简单电子邮件发信器