Python爬虫(一)--学习笔记
#1. 初探urllib2模块
- 浏览器相当于客户端, 向服务器发出资源请求(node.js充当的是服务器)
http是基于请求和应答机制, 客户端发出请求, 服务器应答请求
|
|
urllib2的接口可以处理所有的URL头, 如http, ftp
- HTTPP请求时, 可以发送data表单数据
- 设置Headers到http请求(一些站点比喜欢被程序访问, 服务器确认请求的身份通过User-Agent头部, 创建一个请求对象时, 可以给它一个包含头数据的字典)
HTTPError可以作为页面返回的应答对象response,同样包含read,geturl和info方法
|
|
- urlopen返回的应答对象response有两个常用方法
info()和geturl()
|
|
|
|
#2. 异常处理
HTTPError是URLError的子类
URLError在没有网络连接或者服务器不存在的情况下产生, 这种情况下异常会带有reason属性(不可变的tuple, 包含错误号和错误信息)HTTPError, 服务器上每个HTTP应答对象response包含一个状态码
HTTP状态码标识HTTP协议所返回的响应状态;HTTPError有code属性,是服务器发送的相关错误号.
|
|
|
|
##2.1. 处理异常
|
|
#3. Openers和Handlers
|
|
#4. urllib2的使用细节
##4.1. Proxy代理的设置
|
|
urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy, 程序中明确控制 Proxy 而不受环境变量的影响,可以使用代理
|
|
##4.2. Timeout设置
|
|
##4.3. 加入特定的Header
|
|
注意特殊的Header
- User-Agent : 有些服务器或 Proxy 会通过该值来判断是否是浏览器发出的请求
- Content-Type : 在使用 REST 接口时,服务器会检查该值,用来确定 HTTP Body 中的内容该怎样解析。常见的取值有:
- application/xml : 在 XML RPC,如 RESTful/SOAP 调用时使用
- application/json : 在 JSON RPC 调用时使用
- application/x-www-form-urlencoded : 浏览器提交 Web 表单时使用
在使用服务器提供的 RESTful 或 SOAP 服务时, Content-Type 设置错误会导致服务器拒绝服务
##4.4. Redirect
只要检查一下 Response 的 URL 和 Request 的 URL 是否一致就可以了。
|
|
如果不想自动 redirect,除了使用更低层次的 httplib 库之外,还可以自定义HTTPRedirectHandler 类
##4.5. Cookie
urllib2 对 Cookie 的处理也是自动的。如果需要得到某个 Cookie 项的值, 可以像下面一样
|
|
##4.6. 得到 HTTP 的返回码
对于正常访问的网页,urlopen 返回的 response 对象的 getcode() 方法就可以得到 HTTP 的返回码。但对其它返回码来说,urlopen 会抛出异常。这时候,就要检查异常对象的 code 属性
|
|
##4.7. Debug log
使用 urllib2 时,可以通过下面的方法把 debug Log 打开,这样收发包的内容就会在屏幕上打印出来,方便调试,有时可以省去抓包的工作
|
|
##4.8. 表单的处理
用firefox+httpfox插件来看看自己到底发送了些什么包。
先找到自己发的POST请求,以及POST表单项。
|
|
##4.9. 伪装成浏览器访问
某些网站反感爬虫的到访,于是对爬虫一律拒绝请求
这时候我们需要伪装成浏览器,这可以通过修改http包中的header来实现
|
|
##4.10. 对付”反盗链”
某些站点有所谓的反盗链设置,其实说穿了很简单,
就是检查你发送请求的header里面,referer站点是不是他自己,
所以我们只需要像把headers的referer改成该网站即可
|
|
本文为学习Python爬虫入门教程笔记