1、设置Headers
很多的网站并不允许之前的方式来进行网页访问;
它们可能会识别出发来网页请求的不是浏览器,这时候,我们就需要完全模拟浏览器;
这时候就需要设置一些headers属性。
下面介绍一些比较重要的headers属性需要设置:
user-agent:发出网页请求的浏览器信息
referer:反盗链,存放的是当前请求的网址
cookie:身份识别信息,比如登录状态、用户信息、session信息等
以下是例程:
import urllib
import urllib2
url =
"http://www.u148.net/ajax/user/login"
user_agent =
"Mozilla/5.0 (Windows NT 6.1; WOW64)"
referer =
"http://www.u148.net/ajax/user/login"
headers = {
"user-agent": user_agent,
"referer": referer}
values = {
"uname":
"zhoushuo_19@126.com",
"password":
"XXXXXXX"}
data = urllib.urlencode(values)
request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)
print response.read()
2、Proxy(代理)的设置
有部分网站会限制同一个ip的访问次数,用于防止爬虫或者ddos攻击;
当访问次数过多时,就会禁止该ip的访问,这时就需要设置一些代理服务器;
每隔一段时间就换一个代理。
因为普通的urlopen()函数不支持验证、cookie或者其他HTTP高级功能;
这里需要使用build_opener( )函数创建自定义的opener对象,用以支持上述功能;
build_opener([handler1 [handler2 ... ]])
handler是Handler实例,常用的有HTTPBasicAuthHandler、HTTPCookieProcessor、ProxyHandler等
install_opener(opener)
安装不同的opener对象作为urlopen( )使用的全局opener
import urllib2
enable_proxy =
True
proxy_handler = urllib2.ProxyHandler({
"http":
"http://some-proxy.com:8080"})
null_proxy_handler = urllib2.ProxyHandler({})
if enable_proxy:
opener = urllib2.build_opener(proxy_handler)
else:
opener = urllib2.build_opener(null_proxy_handler)
urllib2.install_opener(opener)
3、Timeout设置
设置超时,解决一些网站相应时间过长造成的影响
import urllib2
response = urllib2.urlopen(
"http://www.baidu.com",
timeout =
10)