Python爬虫入门三

来源:互联网 发布:c语言经典面试题 编辑:程序博客网 时间:2024/05/13 19:57

1.设置请求头

我们继续以教务系统为例,下面来模拟一下,用Python登录教务系统,在入门二中分析了From Data 中的数据,样子是这样的
From Data
- username:xxxxxx
- password:xxxxxxx
- login:%B5%C7%A1%A1%C2%BC
那我们就在请求的时候将数据值传过去代码如下

import urllib2import urllibloginUrl = '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 urllib2import urllibloginUrl = 'http://bkjw.guet.edu.cn/student/public/login.asp'values = {'username': '1500130238', 'password': '102561', '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 urllib2enable_proxy = Trueproxy_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 urllib2httpHandler = 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 urllib2try:    response = urllib2.urlopen('http://restrict.web.com')except urllib2.HTTPError, e:    print e.code

最后安利一款Python的IDE,Pycharm,这个软件的社区版是免费的,可以到官方网站下载
下载地址戳这

0 0
原创粉丝点击