1. urllib模块

1.1 urllib简介

urllib 是 Python3 中自带的 HTTP 请求库,无需复杂的安装过程即可正常使用,十分适合爬虫入门

urllib 中包含四个模块,分别是:

request:请求处理模块

parse:URL 处理模块

error:异常处理模块

robotparser:robots.txt 解析模块

1.2 urllib使用

1.2.1 request 模块

request模块是urllib中最重要的一个模块,一般用于发送请求和接收响应

(1)urlopen 方法

urllib.request.urlopen()

urlopen 方法无疑是 request 模块中最常用的方法之一,常见的参数说明如下:

url:必填,字符串,指定目标网站的 URL

data:指定表单数据

  该参数默认为 None,此时urllib使用GET方法发送请求

  当给参数赋值后,urllib使用POST方法发送请求,并在该参数中携带表单信息(bytes 类型)

timeout:可选参数,用来指定等待时间,若超过指定时间还没获得响应,则抛出一个异常

  该方法始终返回一个HTTPResponse对象,HTTPResponse对象常见的属性和方法如下:

read():返回响应体(bytes 类型),通常需要使用decode('utf-8')将其转化为str类型

import urllib.request

def load_data():
url = "http://www.baidu.com/"
#get的请求
#http请求
#response:http相应的对象
response = urllib.request.urlopen(url)
# print(response)
#读取内容 bytes类型
data = response.read()
# print(data)
#将文件获取的内容转换成字符串
str_data = data.decode("utf-8")
# print(str_data)
#将数据写入文件
with open("baidu.html","w",encoding="utf-8")as f:
f.write(str_data)
#将字符串类型转换成bytes
str_name = "baidu"
bytes_name =str_name.encode("utf-8")
# print(bytes_name) #python爬取的类型:str bytes
#如果爬取回来的是bytes类型:但是你写入的时候需要字符串 decode("utf-8")
#如果爬取过来的是str类型:但你要写入的是bytes类型 encode(""utf-8")
load_data()

大家可以将我注释的输出内容去掉注释,看看到底输出了什么内容。

(2)urlretrleve方法

这个方法可以方便的将网页上的一个文件保存到本地,以下代码可以非常方便的将百度的首页下载到本地。

from urllib import request

request.urlretrieve('http://www.baidu.com/','baidu.html')

(3) Request对象

我们还可以给urllib.request.urlopen()方法传入一个 Request 对象作为参数

为什么还需要使用Request对象呢?因为在上面的参数中我们无法指定请求头部,而它对于爬虫而言又十分重要很多网站可能会首先检查请求头部中的USER-AGENT字段来判断该请求是否由网络爬虫程序发起但是通过修改请求头部中的USER_AGENT字段,我们可以将爬虫程序伪装成浏览器,轻松绕过这一层检查这里提供一个查找常用的USER-AGENT的网站:https://techblog.willshouse.com/2012/01/03/most-common-user-agents/

urllib.request.Request()

参数说明如下:

url:指定目标网站的 URL

data:发送POST请求时提交的表单数据,默认为None

headers:发送请求时附加的请求头部,默认为 {}

origin_req_host:请求方的host名称或者 IP 地址,默认为None

unverifiable:请求方的请求无法验证,默认为False

method:指定请求方法,默认为None

import urllib.request

def load_data():
url = "http://www.baidu.com/"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
req = urllib.request.Request(url, headers=headers, method='GET')
response = urllib.request.urlopen(req) html = response.read().decode("utf-8")
print(html) load_data()

这个结果大家要使用抓包工具来查看。

1.2.2 parse模块

parse模块一般可以用于处理URL

(1)quote 方法

当你在URL中使用中文时,你会发现程序会出现莫名其妙的错误。

import urllib.request
url = 'https://www.baidu.com/s?wd=爬虫'
response = urllib.request.urlopen(url)

这个时候就靠quote方法了,它使用转义字符替换特殊字符,从而将上面的URL处理成合法的URL。

import urllib.request
import urllib.parse url = 'https://www.baidu.com/s?wd=' + urllib.parse.quote('爬虫')
response = urllib.request.urlopen(url)
data = response.read()
str_data = data.decode("utf-8")
print(str_data)

(2)urlencode 方法

urlencode方法就是将dict类型数据转化为符合URL标准的str类型数据。

import urllib.parse
params = {
'from':'AUTO',
'to':'AUTO'
}
data = urllib.parse.urlencode(params)
print(data)

(3)urlparse 方法

urlparse方法用于解析URL,返回一个ParseResult对象.

该对象可以认为是一个六元组,对应 URL 的一般结构:

scheme/netloc/path/parameters/query/fragment

实例:

import urllib.parse
url = 'http://www.example.com:80/python.html?page=1&kw=urllib'
url_after = urllib.parse.urlparse(url)
print(url_after)

想要获得一个参数的值,只需要 url_after.参数 即可。

(4)parse_qs方法

可以将编码后的url参数进行解码。

from urllib import parse

params = {'name':'张三','age':10,'greet':'hello world'}
qs = parse.urlencode(params)
print(qs)
resuit = parse.parse_qs(qs)
print(resuit)

(5)urlsplit方法

我感觉这个方法和urlparse方法差不多,都是对url中各个组成部分进行分割。

from urllib import parse

url = 'http://www.baidu.com/s?wd=python&username=abc#1'

result = parse.urlsplit(url)

print('scheme:',result.scheme)
print('netloc:',result.netloc)
print('path:',result.path)
print('query:',result.query)

1.2.3 error模块

error模块一般用于进行异常处理,其中包含两个重要的类:URLError和HTTPError。

注意,HTTPError是URLError的子类,所以捕获异常时一般要先处理HTTPError,常用的格式如下:

import urllib.request
import urllib.error
import socket
try:
response = urllib.request.urlopen('http://www.baidu.com/', timeout=0.1)
except urllib.error.HTTPError as e:
print("Error Code: ", e.code)
print("Error Reason: ", e.reason)
except urllib.error.URLError as e:
if isinstance(e.reason, socket.timeout):
print('Time out')
else:
print('Request Successfully')

爬虫(三):urllib模块的更多相关文章

  1. Python爬虫之urllib模块2

    Python爬虫之urllib模块2 本文来自网友投稿 作者:PG-55,一个待毕业待就业的二流大学生. 看了一下上一节的反馈,有些同学认为这个没什么意义,也有的同学觉得太简单,关于Beautiful ...

  2. Python爬虫之urllib模块1

    Python爬虫之urllib模块1 本文来自网友投稿.作者PG,一个待毕业待就业二流大学生.玄魂工作室未对该文章内容做任何改变. 因为本人一直对推理悬疑比较感兴趣,所以这次爬取的网站也是平时看一些悬 ...

  3. 练手爬虫用urllib模块获取

    练手爬虫用urllib模块获取 有个人看一段python2的代码有很多错误 import re import urllib def getHtml(url): page = urllib.urlope ...

  4. 洗礼灵魂,修炼python(53)--爬虫篇—urllib模块

    urllib 1.简介: urllib 模块是python的最基础的爬虫模块,其核心功能就是模仿web浏览器等客户端,去请求相应的资源,并返回一个类文件对象.urllib 支持各种 web 协议,例如 ...

  5. 爬虫之urllib模块

    1. urllib模块介绍 python自带的一个基于爬虫的模块. 作用:可以使用代码模拟浏览器发起请求. 经常使用到的子模块:request,parse. 使用流程: 指定URL. 针对指定的URL ...

  6. 爬虫框架urllib 之(三) --- urllib模块

    Mac本 需导入ssl import ssl ssl._create_default_https_context = ssl._create_unverified_context  urllib.re ...

  7. Python 爬虫三 beautifulsoup模块

    beautifulsoup模块 BeautifulSoup模块 BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后遍可以使用他提供的方法进行快速查 ...

  8. Python爬虫urllib模块

    Python爬虫练习(urllib模块) 关注公众号"轻松学编程"了解更多. 1.获取百度首页数据 流程:a.设置请求地址 b.设置请求时间 c.获取响应(对响应进行解码) ''' ...

  9. urllib模块学习

    一.urllib库 概念:urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urll ...

  10. 爬虫开发.2urllib模块

    一.urllib库 概念:urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urll ...

随机推荐

  1. 深入解析 ConcurrentHashMap 实现内幕,吊打面试官,没问题

    在开发中,我们经常使用 HashMap 容器来存储 K-V 键值对,但是在并发多线程的情况下,HashMap 容器又是不安全的,因为在 put 元素的时候,如果触发扩容操作,也就是 rehash ,就 ...

  2. JS的Form表单转JSON格式

    一.serialize()方法 格式:var data = $("#formID").serialize(); 功能:将表单内容序列化成一个字符串. 注意:要使用params = ...

  3. dicom 影像通信(scu、scp)的c-echo、c-store、c-find、c-move

    本文主要描述,dicom通信的scu,scp的c-echo.c-store.c-find.c-move的使用. DicomServiceIDicomServiceProviderIDicomCStor ...

  4. 给一线讲产品·8期|VPC、子网、安全组,是什么关系?

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  5. 华为云垃圾分类大赛,让AI 帮你“见圾行事”

    [摘要] "你是什么垃圾"已经out了,我们来看0看谁是垃圾之王?! 当各位听说深圳实行垃圾分类政策时,是不是虎躯一震,每天焦虑得想搬家? -稳住,别慌! 救兵来啦 华为云人工智能 ...

  6. base64转图片、图片转base64、图片拼接、加水印(水印角度可设置)

    /** * @Description: 将base64编码字符串转换为图片 * @param imgStr * base64编码字符串 * @param path * 图片路径-具体到文件 * @re ...

  7. 转:FileSync plugin for Eclipse 安装注意事项 Eclipse文件同步插件

    习惯了使用MyEclipse,各种插件不用自己安装,觉得开发起来很方便,现在大家都用Eclipse了,还有不用Eclipse用更高级的,IT当然开发大型项目没人用UltraEdit吧,虽然是一个不错的 ...

  8. HDU3849-By Recognizing These Guys, We Find Social Networks Useful(无向图的桥)

    By Recognizing These Guys, We Find Social Networks Useful Time Limit: 2000/1000 MS (Java/Others)     ...

  9. .net core 3.1简体中文语言包,英文只能提示变成中文!

    .net core 3.1简体中文语言包,英文只能提示变成中文!这个是我自己手动用谷歌翻译翻译的一批文档,已经把.net core3.1完全翻译了,由于是翻译器翻译,所以怕翻译有错漏,所以没有去掉英文 ...

  10. 1、在aspx.cs后台Response.Write()跳转路径,打开新窗口

    1.Response.Write()打开新窗口 Response.Write(" <script type='text/JavaScript'>window.open('&quo ...