爬虫 urllib2
urllib2 python用来处理URL的模块,在爬虫中的功能就是打开URL来获取response(请求)网页的代码,然后我们可以通过对网页代码的操作来获取更多的东西。
本文为学习笔记,希望大家指出错误和交流
1.response = urllib2.urlopen(url,[timeout]) (主要是这两个参数)
urlopen()是最基础的功能,url参数可以是一个链接url,也可以是一个请求request. 超时时间 timeout是一个可选参数。返回一个response对象。
response对象可以做以下操作:
response.read() 返回网页的内容
response.geturl() 获得所打开网页的url
response.info() 返回页面基本信息
response.getcode() 返回HTTP状态码。 200表示成功
此外可以添加代理,header等(不单单只能这样做):
response = urllib2.urlopen(url,proxy,header)
例如: response = urllib2.urlopen("http://www.baidu.com",{'https','183.74.89.16:8880'},{'User-agent','Mozilla/5.0'})
#! /usr/bin/env python # -*- coding: utf-8 -*- import urllib2 url = "http://www.baidu.com" response = urllib2.urlopen(url,timeout=5) print("response.info():%s"%(response.info())) print("response.geturl():%s"%(response.geturl())) print("response.getcode():%s"%(response.getcode())) print("response.read()[420:1000]:%s"%(response.read()[420:1000])) #内容太多只输出一部分
2.request 请求。一般使用这个对象时是为了向request请求添加其他变量,如http header
request = urllib2.request(url)
request.add_header() 一般使用urllib2库,若不设置header,则默认显示为python的header ,一些网站会拒绝访问,假如加上某些浏览器的header则可以访问。
request.add_data()
request里的data需要以标准的方式encode 这时就需要 data = urllib2.urlencode()
3.OpenerDirector 可以看作是一个专门打开url的打开器。urllib2.urlopen()实际上是调用默认的opener,你可以对这个打开器进行个性化设置,可以更改代理,添加cookies等等。
opener = urllib2.build_opener(handler) # 各种handler对应各种
# opener = urllib.build_opener() 也可以这样
# opener.add_handler(handler)
urllib2.install_opener(opener) 将自己设置的opener变成默认的opener(全局)。通常不用
response = opener.open(url) #打开链接,返回响应
opener.addheaders() #添加header
4.handler 处理器 。一些打开url时可能会需要的其他功能的组件
有很多,这里主要说三个:
1.urllib2.ProxyHandler() 代理重定向
1 proxyhandler = urllib.ProxyHandler(proxy)
2
3 opener = urllib2.build_opener(proxyhandler)
这样就可以了
2.urllib2.HTTPCookieProcessor(cookie) 添加cookie. 这样可以用来打开某些需要登陆并且有验证码的url
1 cookiehandler = urllib.HTTPCookieProcessor(cookie)
2
3 opener = urllib2.build_opener(cookiehandler)
3.urllib2.HTTPBasicAuthHandler(realm,url,user,password) 用来处理密码的
1 authhandler = urllib2.HTTPBasicAuthHandler()
2
3 authhandler.add_password(realm,url,user,password)
4
5 opener = urllib2.build_opener(authhandler)