Python爬虫入门三

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,这个软件的社区版是免费的,可以到官方网站下载
下载地址戳这

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值