1.设置请求头
我们继续以教务系统为例,下面来模拟一下,用Python登录教务系统,在入门二中分析了From Data 中的数据,样子是这样的
From Data
- username:xxxxxx
- password:xxxxxxx
- login:%B5%C7%A1%A1%C2%BC
那我们就在请求的时候将数据值传过去代码如下
import urllib2
import urllib
loginUrl = 'http://bkjw.guet.edu.cn/student/public/login.asp'
values = {'username': 'xxxxxx', 'password': 'xxxx', 'login': '%B5%C7%A1%A1%C2%BC'}
data = urllib.urlencode(values)
request = urllib2.Request(loginUrl, data )
response = urllib2.urlopen(request)
page = response.read()
print page
运行之后,我们发现并没有登录进去那么这是什么原因呢,这是因为服务器在接收请求的时候发现,发送请求的不是浏览器,所以服务器不会去响应这个请求。
那么如何假装我们的爬虫发出的请求是浏览器发出的呢,在这里就要设置请求头,
代码如下
import urllib2
import urllib
loginUrl = 'http://bkjw.guet.edu.cn/student/public/login.asp'
values = {'username': '1500130238', 'password': '******', 'login': '%B5%C7%A1%A1%C2%BC'}
user_agent = 'User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
headers = { 'User-Agent' : user_agent }
data = urllib.urlencode(values)
request = urllib2.Request(loginUrl, data,headers )
response = urllib2.urlopen(request)
page = response.read()
print page
可以看到多了user_agent,这个参数就可以假装是浏览器发出的请求,在通过headers传到请求中
2. Proxy(代理)的设置
urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy。假如一个网站它会检测某一段时间某个IP 的访问次数,如果访问次数过多,它会禁止你的访问。所以你可以设置一些代理服务器来帮助你做工作,每隔一段时间换一个代理。
示例代码如下:
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.使用DebugLog
使用 urllib2 时,可以通过下面的方法把 debug Log 打开,这样收发包的内容就会在屏幕上打印出来,方便调试,有时可以省去抓包的工作
代码如下:
import urllib2
httpHandler = urllib2.HTTPHandler(debuglevel=1)
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)
opener = urllib2.build_opener(httpHandler, httpsHandler)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://www.baidu.com')
4.得到HTTP响应码
对于 200 OK 来说,只要使用 urlopen 返回的 response 对象的 getcode() 方法就可以得到 HTTP 的返回码。但对其它返回码来说,urlopen 会抛出异常。这时候,就要检查异常对象的 code 属性了:
import urllib2
try:
response = urllib2.urlopen('http://restrict.web.com')
except urllib2.HTTPError, e:
print e.code
最后安利一款Python的IDE,Pycharm,这个软件的社区版是免费的,可以到官方网站下载
下载地址戳这