常见的爬虫分析库(1)-Python3中Urllib库基本使用
原文来自:https://www.cnblogs.com/0bug/p/8893677.html
什么是Urllib?
Python内置的HTTP请求库
urllib.request 请求模块
urllib.error 异常处理模块
urllib.parse url解析模块
urllib.robotparser robots.txt解析模块
相比Python的变化
Python2中的urllib2在Python3中被统一移动到了urllib.request中
python2
import urllib2
response = urllib2.urlopen('http://www.cnblogs.com/0bug')
Python3
import urllib.request
response = urllib.request.urlopen('http://www.cnblogs.com/0bug/')
urlopen()
不加data是以GET方式发送,加data是以POST发送
1
2
3
4
5
|
import urllib.request response = urllib.request.urlopen( 'http://www.cnblogs.com/0bug' ) html = response.read().decode( 'utf-8' ) print(html) |
结果
加data发送POST请求
1
2
3
4
5
6
|
import urllib.parse import urllib.request data = bytes(urllib.parse.urlencode({ 'hello' : '0bug' }), encoding= 'utf-8' ) response = urllib.request.urlopen( 'http://httpbin.org/post' , data=data) print(response.read()) |
timeout超时间
1
2
3
4
|
import urllib.request response = urllib.request.urlopen( 'http://www.cnblogs.com/0bug' , timeout=0.01) print(response.read()) |
1
2
3
4
5
6
7
8
|
import urllib.request import socket import urllib.error try : response = urllib.request.urlopen( 'http://www.cnblogs.com/0bug' , timeout=0.01) except urllib.error.URLError as e: if isinstance(e.reason,socket.timeout): print( '请求超时' ) |
响应
1.响应类型
1
2
3
4
|
import urllib.request response = urllib.request.urlopen( 'http://www.cnblogs.com/0bug' ) print(type(response)) |
2.状态码、响应头
1
2
3
4
5
6
|
import urllib.request response = urllib.request.urlopen( 'http://www.cnblogs.com/0bug' ) print(response.status) print(response.getheaders()) print(response.getheader( 'Content-Type' )) |
3.响应体
响应体是字节流,需要decode('utf-8')
1
2
3
4
5
|
import urllib.request response = urllib.request.urlopen( 'http://www.cnblogs.com/0bug' ) html = response.read().decode( 'utf-8' ) print(html) |
Request
1
2
3
4
5
|
import urllib.request request = urllib.request.Request( 'http://www.cnblogs.com/0bug' ) response = urllib.request.urlopen(request) print(response.read().decode( 'utf-8' )) |
添加请求头信息
1
2
3
4
5
6
7
8
9
10
11
12
|
from urllib import request, parse url = 'http://httpbin.org/post' 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' , 'Host' : 'httpbin.org' } dic = { 'name' : '0bug' } data = bytes(parse.urlencode(dic), encoding= 'utf-8' ) req = request.Request(url=url, data=data, headers=headers, method= 'POST' ) response = request.urlopen(req) print(response.read().decode( 'utf-8' )) |
add_header
1
2
3
4
5
6
7
8
9
10
|
from urllib import request, parse url = 'http://httpbin.org/post' dic = { 'name' : '0bug' } data = bytes(parse.urlencode(dic), encoding= 'utf-8' ) req = request.Request(url=url, data=data, method= 'POST' ) req.add_header( 'User-Agent' , 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36' ) response = request.urlopen(req) print(response.read().decode( 'utf-8' )) |
Handler
代理:
1
2
3
4
5
6
7
8
9
|
import urllib.request proxy_handler = urllib.request.ProxyHandler({ 'http' : 'http代理' , 'https' : 'https代理' }) opener = urllib.request.build_opener(proxy_handler) response = opener.open( 'http://www.cnblogs.com/0bug' ) print(response.read()) |
Cookie
1
2
3
4
5
6
7
8
|
import http.cookiejar, urllib.request cookie = 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保存为文件
1
2
3
4
5
6
7
8
|
import http.cookiejar, urllib.request filename = 'cookie.txt' cookie = http.cookiejar.MozillaCookieJar(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) |
cookie.txt
另一种方式存
1
2
3
4
5
6
7
8
|
import http.cookiejar, urllib.request filename = 'cookie.txt' 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) |
用什么格式的存就应该用什么格式的读
1
2
3
4
5
6
7
8
|
import http.cookiejar, urllib.request cookie = http.cookiejar.LWPCookieJar() cookie.load( 'cookie.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' )) |
异常处理
1
2
3
4
5
6
|
from urllib import request, error try : response = request.urlopen( 'http://www.cnblogs.com/0bug/xxxx' ) except error.URLError as e: print(e.reason) |
1
2
3
4
5
6
7
8
9
10
|
from urllib import request, error try : response = request.urlopen( 'http://www.cnblogs.com/0bug/xxxx' ) except error.HTTPError as e: print(e.reason, e.code, e.headers, sep= '\n' ) except error.URLError as e: print(e.reason) else : print( 'Request Successfully' ) |
1
2
3
4
5
6
7
8
9
10
|
import socket import urllib.request import urllib.error try : response = urllib.request.urlopen( 'http://www.cnblogs.com/0bug/xxxx' , timeout=0.001) except urllib.error.URLError as e: print(type(e.reason)) if isinstance(e.reason, socket.timeout): print( '请求超时' ) |
URL解析
1
2
3
4
5
|
from urllib.parse import urlparse result = urlparse( 'www.baidu.com/index.html;user?id=5#comment' ) print(type(result)) print(result) |
1
2
3
4
|
from urllib.parse import urlparse result = urlparse( 'www.baidu.com/index.html;user?id=5#comment' , scheme= 'https' ) print(result) |
1
2
3
4
|
from urllib.parse import urlparse result = urlparse( 'http://www.baidu.com/index.html;user?id=5#comment' , scheme= 'https' ) print(result) |
1
2
3
4
|
from urllib.parse import urlparse result = urlparse( 'http://www.badiu.com/index.html;user?id=5#comment' , allow_fragments=False) print(result) |
1
2
3
4
|
from urllib.parse import urlparse result = urlparse( 'http://www.badiu.com/index.html#comment' , allow_fragments=False) print(result) |
urlunparse
1
2
3
4
|
from urllib.parse import urlunparse data = [ 'http' , 'www.baidu.com' , 'index.html' , 'user' , 'id=6' , 'comment' ] print(urlunparse(data)) |
urljoin
1
2
3
4
5
6
7
8
9
10
|
from urllib.parse import urljoin print(urljoin( 'http://www.baidu.com' , 'ABC.html' )) print(urljoin( 'http://www.baidu.com' , 'https://www.cnblogs.com/0bug' )) print(urljoin( 'http://www.baidu.com/0bug' , 'https://www.cnblogs.com/0bug' )) print(urljoin( 'http://www.baidu.com/0bug' , 'https://www.cnblogs.com/0bug?q=2' )) print(urljoin( 'http://www.baidu.com/0bug?q=2' , 'https://www.cnblogs.com/0bug' )) print(urljoin( 'http://www.baidu.com' , '?q=2#comment' )) print(urljoin( 'www.baidu.com' , '?q=2#comment' )) print(urljoin( 'www.baidu.com#comment' , '?q=2' )) |
urlencode
1
2
3
4
5
6
7
8
9
|
from urllib.parse import urlencode params = { 'name' : '0bug' , 'age' : 25 } base_url = 'http://www.badiu.com?' url = base_url + urlencode( params ) print(url) |
常见的爬虫分析库(1)-Python3中Urllib库基本使用的更多相关文章
- Python2和Python3中urllib库中urlencode的使用注意事项
前言 在Python中,我们通常使用urllib中的urlencode方法将字典编码,用于提交数据给url等操作,但是在Python2和Python3中urllib模块中所提供的urlencode的包 ...
- python3中urllib库的request模块详解
刚刚接触爬虫,基础的东西得时时回顾才行,这么全面的帖子无论如何也得厚着脸皮转过来啊! 原帖地址:https://www.2cto.com/kf/201801/714859.html 什么是 Urlli ...
- Python3中Urllib库基本使用
什么是Urllib? Python内置的HTTP请求库 urllib.request 请求模块 urllib.error 异常处理模块 urllib.par ...
- 爬虫中urllib库
一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...
- 对python3中pathlib库的Path类的使用详解
原文连接 https://www.jb51.net/article/148789.htm 1.调用库 ? 1 from pathlib import 2.创建Path对象 ? 1 2 3 4 5 ...
- Python3中urllib使用介绍
Py2.x: Urllib库 Urllin2库 Py3.x: Urllib库 变化: 在Pytho2.x中使用import urllib2——-对应的,在Python3.x中会使用import url ...
- Python3中urllib使用与源代码
Py2.x: Urllib库 Urllin2库 Py3.x: Urllib库 变化: 在Pytho2.x中使用import urllib2---对应的,在Python3.x中会使用import url ...
- Python爬虫入门(3-4):Urllib库的高级用法
1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它 是一段HTML代码,加 JS.CS ...
- Python爬虫实战(一) 使用urllib库爬取拉勾网数据
本笔记写于2020年2月4日.Python版本为3.7.4,编辑器是VS code 主要参考资料有: B站视频av44518113 Python官方文档 PS:如果笔记中有任何错误,欢迎在评论中指出, ...
随机推荐
- pythonの递归锁
首先看一个例子,让我们lock = threading.Lock() 时(代码第33行),程序会卡死在这里 #!/usr/bin/env python import threading,time de ...
- 卷积层和BN层融合
常规的神经网络连接结构如下  当网络训练完成, 在推导的时候为了加速运算, 通常将卷积层和 batch-norm 层融合, 原理如下 \[ \begin{align*} y_{conv} & ...
- Git学习笔记05-撤销修改
使用 git checkout -- file可以撤销工作区的修改 一种是修改后还没有放到暂存区,撤销修改回到和版本库一模一样的状态 lesson.txt文件已经提交到版本库了,内容如图. 修改一 ...
- 使用cstdiofile在vs2010中无法写入中文的问题
在VC2010环境下, 以下代码无法实现使用CStdioFile向文本文件中写入中文(用notepad.exe查看不到写入的中文) CStdioFile file; file.Open(…); fil ...
- 在VC中改变TAB顺序的方法
用VC来写MFC程序的时候,多数情况下,会发现TAB顺序和预期的顺序不一致,那么这时就有必要重新调整TAB顺序, 来适应我们所写的程序. 调整TAB顺序的方法有两种: 1.在当前的界面或对话框下按“C ...
- canvas - 简单画板
截图: Demo:Demo 上代码:. <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- 常用的ORM框架
现在,很多项目使用ORM的框架构架实现数据持久层,下面列举一些常用的ORM框架有,后续分节介绍. Java:Hibernate和Mybatis(前身iBatis) .Net:EF6与EFCore.Da ...
- LIght OJ 1179
题意: 约瑟夫环问题, 给你N 个人, 没K个出队, 问最后剩下的人的编号. 思路: 直接模拟会T, 对于N个人 , 是一个约瑟夫环问题, 当第一个人出队后, (标号一定为 k % n -1) 剩下的 ...
- [转]Navicat Premium 12试用期的破解方法
link: https://blog.csdn.net/Jason_Julie/article/details/82864187 ref: https://www.jianshu.com/p/42a3 ...
- atop工具检测linux硬件异常
引言 Linux以其稳定性,越来越多地被用作服务器的操作系统(当然,有人会较真地说一句:Linux只是操作系统内核:).但使用了Linux作为底层的操作系统,是否我们就能保证我们的服务做到7*24地稳 ...