python爬虫7: urllib库使用

基本介绍

内置库,不用下载。几个模块
urllib.request 请求模块
urllib.parse 解析模块,包括url编码
urllib.error 异常处理模块
urllib.robotparser(不介绍)

准备工作

  • 使用chrome分析网络请求过程, 检查->network->选中第一个请求,preview
  • 一个网站httpbin.org是一个http测试工具,介绍https://blog.phpgao.com/how-to-httpbin.html。
  • pycharm 注意指定解释器的路径要是python3而不是python2。可以用brew info python3查询路径。
  • google urllib python3,查看文档
  • ipython notebook 使用

python相关语法之import

模块即源文件. 内含若干个类.
包是一个目录, 内含若干个模块和若干个子目录. 它的特点是 目录下含有 init.py.
库是参考其它编程语言的说法,就是指python中的完成一定功能的代码集合,供用户使用的代码组合。在python中是包和模块的形式。
import A #导入模块A或包A, 若找不到直接报错
import A as B#导入模块A或包A, 并使用B作别名.
from A import B #从包A中导入模块B。
方法或者类要import才能使用,调用方法如下

pacakage.module.function()
urllib.request.urlopen()

python 相关语法之try...catch...as

urlllib.request.urlopen()

urllib.request.urlopen(url, data=None,[timeout,]*,其他参数)
demo1:请求百度,输出它的请求返回的html文本内容

import urllib.request

response = urllib.request.urlopen('http://www.baidu.com')
print(response.read().decode('utf-8'))

response.read()是返回数据的内容,byte类型,要转换为字符串需要decode()方法

demo2: 利用httpbin.org发一个get请求

dict = {'word':'hello'}
str = urllib.parse.urlencode(dict)
data = bytes(str, encoding='utf-8')
response = urllib.request.urlopen('http://httpbin.org/post',data=data)
print(response.read().decode('utf-8'))

data有值就是post请求,否则就是get请求。data的类型是bytes形式,使用string的utf-8编码构造,string又可以通过dict作为参数调用urllib.parse.urlencode()得到

demo3: 超时参数和异常处理

import urllib.request
import urllib.error

try:
    response = urllib.request.urlopen('http://httpbin.org/get', timeout=0.1)
except urllib.error.URLError as e:
        print('TIME OUT')

发送请求,并设置允许超时时间为0.1s,如果0.1s内超时,那么捕获异常,类型为urllib.error.URLError,值保在e中,并输出超时的log

response

demo4: 响应类型

import urllib.request

response = urllib.request.urlopen('http://www.baidu.com');
print(type(response))

输出类型,即是 http.client.HTTPResponse类型。

demo5: 响应头,响应状态玛

import urllib.request

response = urllib.request.urlopen('http://www.baidu.com');
print(response.status)
print(response.getheaders())
print(response.getheader("Server"))

输出如下

200
[('Date', 'Sun, 05 Nov 2017 10:51:03 GMT'), ('Content-Type', 'text/html; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Connection', 'Close'), ('Vary', 'Accept-Encoding'), ('Set-Cookie', 'BAIDUID=BDCDE5854E367134DF16A3613F9EA2C3:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com'), ('Set-Cookie', 'BIDUPSID=BDCDE5854E367134DF16A3613F9EA2C3; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com'), ('Set-Cookie', 'PSTM=1509879063; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com'), ('Set-Cookie', 'BDSVRTM=0; path=/'), ('Set-Cookie', 'BD_HOME=0; path=/'), ('Set-Cookie', 'H_PS_PSSID=1459_21120_17001_24880_20927; path=/; domain=.baidu.com'), ('P3P', 'CP=" OTI DSP COR IVA OUR IND COM "'), ('Cache-Control', 'private'), ('Cxy_all', 'baidu+518941324fdef8bdaefa49f3e9fadb30'), ('Expires', 'Sun, 05 Nov 2017 10:50:52 GMT'), ('X-Powered-By', 'HPHP'), ('Server', 'BWS/1.1'), ('X-UA-Compatible', 'IE=Edge,chrome=1'), ('BDPAGETYPE', '1'), ('BDQID', '0xdc900cd40003bf16'), ('BDUSERID', '0')]
BWS/1.1

你可能感兴趣的:(python爬虫7: urllib库使用)