Python3之urllib模块

简介

  urllib是python的一个获取url(Uniform Resource Locators,统一资源定位符),可以用来抓取远程的数据。

常用方法

(1)urlopen

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

urllib.request.urlopen() 可以获取页面,获取页面内容的数据格式为bytes类型,需要进行decode()解码,转换成str类型。

参数说明:

  • url : 需要打开的网址
  • data : 字典形式,默认为None时是GET方法,data不为空时, urlopen()的提交方式为POST,注意POST提交时,data需要转换为字节;
  • timeout : 设置网站访问的超时时间
from urllib import request
response =  request.urlopen("http://members.3322.org/dyndns/getip")
# <http.client.HTTPResponse object at 0x031F63B0>
page = response.read()
# b‘106.37.169.186\n‘
page = page.decode("utf-8")
# ‘106.37.169.186\n‘

  urlopen返回对象提供的方法:

  • read(),readline(),readlines(),fileno(),close() : 对HTTPResponse类型数据进行操作
  • info() : 返回HTTPMessage对象,表示远程服务器返回的头信息
  • getcode() : 返回HTTP状态码,如果是http请求,200请求成功完成,404网页未找到
  • geturl(): 返回请求的url

(2)Request

  urllib.request.Request(url,data=None,headers={},method=None)

from urllib import request

url = r‘http://www.lagou.com/zhaopin/Python/?labelWords=label‘
headers = {
    ‘User-Agent‘: r‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ‘
                  r‘Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3‘,
    ‘Referer‘: r‘http://www.lagou.com/zhaopin/Python/?labelWords=label‘,
    ‘Connection‘: ‘keep-alive‘
}
req = request.Request(url, headers=headers)
page = request.urlopen(req).read()
page = page.decode(‘utf-8‘)

  

(3)parse.urlencode

  urllib.parse.urlencode(query, doseq=False,safe=‘‘,encoding=None,errors=None)

urlencode()的主要作用就是将url附上要提交的数据.

from urllib import request, parse
url = r‘http://www.lagou.com/jobs/positionAjax.json?‘
headers = {
    ‘User-Agent‘: r‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ‘
                  r‘Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3‘,
    ‘Referer‘: r‘http://www.lagou.com/zhaopin/Python/?labelWords=label‘,
    ‘Connection‘: ‘keep-alive‘
}
data = {
    ‘first‘: ‘true‘,
    ‘pn‘: 1,
    ‘kd‘: ‘Python‘
}
data = parse.urlencode(data).encode(‘utf-8‘)
# 此时data是字节 b‘first=true&pn=1&kd=Python‘ ,POST的数据必须是bytes或者iterable of bytes,不能是str,因此需要encode编码
# 经过urlencode转换后的data数据为‘first=true&pn=1&kd=Python‘
# 最后提交的url为:http://www.lagou.com/jobs/positionAjax.json?first=true?pn=1?kd=Python
req = request.Request(url, headers=headers, data=data)
# 此时req : <urllib.request.Request object at 0x02F52A30>
page = request.urlopen(req).read()
# 此时page是字节: b‘{"success":false,"msg":"\xe6\x82\xa8\xe6\x93\x8d\xe4\xbd\x9c\xe5\xa4\xaa\xe9\xa2\x91\xe7\xb9\x81,\xe8\xaf\xb7\xe7\xa8\x8d\xe5\x90\x8e\xe5\x86\x8d\xe8\xae\xbf\xe9\x97\xae","clientIp":"106.37.169.186"}\n
page = page.decode(‘utf-8‘)
# 此时page是字符串:"success":false,"msg":"您操作太频繁,请稍后再访问","clientIp":"106.37.169.186"}

  

(4)代理 request.ProxyHandler(proxies=None)

当需要抓取的网站设置了访问限制,这时就需要用到代理来抓取数据。

from urllib import request, parse
data = {
        ‘first‘: ‘true‘,
        ‘pn‘: 1,
        ‘kd‘: ‘Python‘
    }
proxy = request.ProxyHandler({‘http‘: ‘5.22.195.215:80‘})  # 设置proxy
opener = request.build_opener(proxy)  # 挂载opener
request.install_opener(opener)  # 安装opener
data = parse.urlencode(data).encode(‘utf-8‘)
page = opener.open(url, data).read()
page = page.decode(‘utf-8‘)
return page

  

  文章参考:https://www.cnblogs.com/Lands-ljk/p/5447127.html

时间: 2024-10-02 01:25:10

Python3之urllib模块的相关文章

python3.5中urllib模块抓取指定URL内容

python3.5中把python中的urllib和urllib2模块合并为urllib模块啦.urllib模块下有五个类: 抓取指定URL下内容封装成一个类文件对象,其中的很多方法操作和文件操作是一样的.

Python3 内建模块 hashlib、itertools、HTMLParser、urllib

Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示). 举个例子,你写了一篇文章,内容是一个字符串'how to use python hashlib - by Michael',并附上这篇文章的摘要是'2d73d4f15c0db7f5ecb321b6a65e5d6d'.如果有人篡改了你的文章,并发表为'how to use pytho

python3.x中的urllib模块

来源http://my.oschina.net/u/999436/blog/113317 我尝试着找找python3.3.0的change log.里面并没有找到urllib的修改记录.然而这一修改记录却在python3.0的change log中. 原文是这样写的: a new urllib package was created. It consists of code from urllib, urllib2, urlparse, and robotparser. The old modu

Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html

Python3学习笔记(urllib模块的使用) 1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None) -         url:  需要打开的网址 -         data:Post提交的数据 -         timeout:设置网站的访问超时时间 直接用urllib.request模块的urlopen()

python3 urllib模块

3.0版本中已经将urllib2.urlparse.和robotparser并入了urllib中,并且修改urllib模块,其中包含5个子模块,即是help()中看到的那五个名字. Python2中的urllib模块,在Python3中被修改为 20.5. urllib.request — Extensible library for opening URLs 20.6. urllib.response — Response classes used by urllib 20.7. urllib

Python3 使用 urllib 编写爬虫

什么是爬虫 爬虫,也叫蜘蛛(Spider),如果把互联网比喻成一个蜘蛛网,Spider就是一只在网上爬来爬去的蜘蛛.网络爬虫就是根据网页的地址来寻找网页的,也就是URL.举一个简单的例子,我们在浏览器的地址栏中输入的字符串就是URL,例如:https://www.baidu.com URL就是同意资源定位符(Uniform Resource Locator),它的一般格式如下(带方括号[]的为可选项): protocol :// hostname[:port] / path / [;parame

Urllib 模块

Urllib模块 在python2和python3中的差异 在python2中,urllib和urllib2各有各个的功能,虽然urllib2是urllib的升级版,但是urllib2还是不能完全替代urllib,但是在python3中,全部封装成一个类,urllib 在python2和python3中的差异 Urllib2可以接受一个Request对象,并以此可以来设置一个URL的headers,但是urllib只接受一个URL.这就意味着你不能通过urllib伪装自己的请求头. Urllib

Python3.x标准模块库目录

Python3.x标准模块库目录 文本 1. string:通用字符串操作 2. re:正则表达式操作 3. difflib:差异计算工具 4. textwrap:文本填充 5. unicodedata:Unicode字符数据库 6. stringprep:互联网字符串准备工具 7. readline:GNU按行读取接口 8. rlcompleter:GNU按行读取的实现函数 二进制数据 9. struct:将字节解析为打包的二进制数据 10. codecs:注册表与基类的编解码器 数据类型 1

【2】数据采集 - urllib模块

python2环境下关于urllib2的使用可以学习这篇文章.本文主要针对python3环境下使用urllib模块实现简单程序爬虫. 链接:https://www.jianshu.com/p/31833117b34b urllib模块的使用 1.数据编码处理 我们通过爬虫程序可以得到网站返回的数据,但是返回的数据在展示过程中,出现了乱码的问题,是因为网站本身有自己的字符编码(通常情况下是 UTF-8),我们程序在采集完成之后在控制台进行展示的过程中是使用本地默认编码(windows 一般是 gb