爬虫入门之urllib库详解(二)
1 urllib模块
urllib模块是一个运用于URL的包
urllib.request用于访问和读取URLS
urllib.error包括了所有urllib.request导致的异常
urllib.parse用于解析URLS
urllib.robotparser用于解析robots.txt文件(网络蜘蛛)
2 urllib读取网页的三种方式
urlopen直接打开
urlopen返回对象提供的方法
read() , readline() ,readlines() , fileno() , close() :对HTTPResponse类型数据进行操作
info(): 返回HTTPMessage对象,表示远程服务器返回的头信息
getcode():返回Http状态码。如果是http请求,200请求成功完成;404网址未找到
geturl(): 返回请求的url
采用User-Agent (用户代理,简称UA)
UA用来包装头部的数据:
-User-Agent :这个头部可以携带如下几条信息:浏览器名和版本号、操作系统名和版本号、默认语言
-Referer:可以用来防止盗链,有一些网站图片显示来源http://***.com,就是检查Referer来鉴定的
-Connection:表示连接状态,记录Session的状态
#常用的消息包头- Accept:text/html,image/* (告诉服务器,浏览器可以接受文本,网页图片)
- Accept-Charaset:ISO-8859-1 [接受字符编码:iso-8859-1]
- Accept-Encoding:gzip,compress [可以接受 gzip,compress压缩后数据]
- Accept-Language:zh-cn [浏览器支持的语言]
- Host:localhost:8080 [浏览器要找的主机]
- Referer:http://localhost:8080/test/abc.html [告诉服务器我来自哪里,常用于防止下载,盗链]
- User-Agent:Mozilla/4.0(Com...) [告诉服务器我的浏览器内核]
- Cookie: [会话]
- Connection:close/Keep-Alive [保持链接,发完数据后,我不关闭链接]
- Date: [浏览器发送数据的请求时间]
定制header信息
在 HTTP Request 中加入特定的 Header,来构造一个完整的HTTP请求消息。
可以通过调用Request.add_header() 添加/修改一个特定的header 也可以通过调用Request.get_header()来查看已有的header。
我们都知道Http协议中参数的传输是"key=value"这种简直对形式的,如果要传多个参数就需要用“&”符号对键值对进行分割。如"?name1=value1&name2=value2",这样在服务端在收到这种字符串的时候,会用“&”分割出每一个参数,然后再用“=”来分割出参数值。
3 urllib访问之get与post
1 get方式: 通过将url + ”?” + data 拼接起来赋值给新的url
四步走:
1字典数据编码key=value构建url,headers
2构建请求(url , headers)
3打开请求返回响应
4读取响应
2 post方式: 定义字典类型value,保存username和password,通过urlencode对字典编码转二进制返回给data,将数据和url通过Request方法来申请访问
五步走:
1构建headers,url
2字典转二进制data
3构建请求(url , headers,data)
4打开请求返回响应
5读取响应
3 post请求并将数据存入数据库
4 json编码解析
当请求响应结果为json数据时,出现了二进制编码转不了情况,可以设置为非ascii编码
4 处理HTTPS请求 SSL证书验证
现在随处可见 https 开头的网站,urllib2可以为 HTTPS 请求验证SSL证书,就像web浏览器一样,如果网站的SSL证书是经过CA认证的,则能够正常访问,如:https://www.baidu.com/等...
如果SSL证书验证不通过,或者操作系统不信任服务器的安全证书,比如浏览器在访问12306网站如:https://www.12306.cn/mormhweb/的时候,会警告用户证书不受信任。(据说 12306 网站证书是自己做的,没有通过CA认证)
5 封装
常见功能可以进行简单的封装
转载于:https://www.jianshu.com/p/6b74c8113221