python爬虫——模拟登陆教务系统

本文介绍Python中使用urllib库进行基本网页抓取的方法,并详细讲解了如何通过Request发送GET和POST请求。此外,还介绍了如何利用Opener进行带Cookie的爬取,以实现需要登录才能访问的页面内容抓取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

  • python urllib库的使用
  • python带cookie的爬取方法

首先来说一下python爬取页面的基本方法即urllib库的使用:

import urllib2

response = urllib2.urlopen("http://www.baidu.com")
print response.read()
如代码段,使用urllib2库中的urlopen方法获取一个response对象,然后调用read()方法就可以获取网页源代码。

但是我们在实际应用中有时候需要向服务器发送Get或者Post请求参数,这种需求的话显然urlopen()函数已经不能满足,这就需要另外的方法——Request

request = urllib2.Request("http://www.baidu.com")
response = urllib2.urlopen(request)
print response.read()

这是最简单的一种Request方法,跟上面的代码实现的效果是一样的,如果要带上参数的话就参考以下代码:

POST:

4
5
6
7
8
9
import urllib
import urllib2

values = {"username":"1016903103@qq.com","password":"XXXX"}
data = urllib.urlencode(values) 
url = "https://passport.youkuaiyun.com/account/login?from=http://my.youkuaiyun.com/my/mycsdn"
request = urllib2.Request(url,data)
response = urllib2.urlopen(request)
print response.read()

GET:

import urllib2

values={}
values['username'] = "1016903103@qq.com"
values['password']="XXXX"
data = urllib.urlencode(values) 
url = "http://passport.youkuaiyun.com/account/login"
geturl = url + "?"+data
request = urllib2.Request(geturl)
response = urllib2.urlopen(request)
print response.read()

接下来是要说的是有些网页需要我们登陆后才能访问,这时候就需要我们用带cookie的爬取方法——Opener

当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例)。在前面,我们都是使用的默认的opener,也就是urlopen。它是一个特殊的opener,可以理解成opener的一个特殊实例,传入的参数仅仅是url,data,timeout。

如果我们需要用到Cookie,只用这个opener是不能达到目的的,所以我们需要创建更一般的opener来实现对Cookie的设置。

下面直接代码说明:
#/usr/bin/env python
#-*-coding:utf-8-*-

import urllib
import urllib2
import cookielib


#cookielib
filename='cookie.txt'
#声明一个CookieJar对象实例来保存cookie
cookie=cookielib.MozillaCookieJar(filename)
#利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))

#header
values = {"USERNAME":"xxxxxxxx","PASSWORD":"xxxxxxx"}
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36',
'Referer':'http://jxgl.gdufs.edu.cn/jsxsd/',
'Accept-Language':'zh-CN,zh;q=0.8,en;q=0.6',
'Accept-Encoding': 'gzip, deflate',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Content-Type': 'application/x-www-form-urlencoded'
}
data=urllib.urlencode(values)
loginurl='http://jxgl.gdufs.edu.cn/jsxsd/xk/LoginToXkLdap'
request=urllib2.Request(loginurl,data,headers)
#此处的open方法同urllib2的urlopen方法,也可以传入request
result=opener.open(request)
cookie.save(ignore_discard=True,ignore_expires=True)


#爬取主页面
mainurl='http://jxgl.gdufs.edu.cn/jsxsd/framework/xsMain.jsp'
result=opener.open(mainurl)
print result.read().decode('utf-8')

这里写图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值