• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > 零基础写python爬虫之爬虫编写全记录

零基础写python爬虫之爬虫编写全记录

作者:hebedich 字体:[增加 减小] 来源:互联网

hebedich 通过本文主要向大家介绍了python爬虫基础教程,python爬虫基础,python编写网络爬虫,python编写爬虫,python爬虫入门教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

先来说一下我们学校的网站:

http://jwxt.sdu.edu.cn:7777/zhxt_bks/zhxt_bks.html

查询成绩需要登录,然后显示各学科成绩,但是只显示成绩而没有绩点,也就是加权平均分。

显然这样手动计算绩点是一件非常麻烦的事情。所以我们可以用python做一个爬虫来解决这个问题。

1.决战前夜

先来准备一下工具:HttpFox插件。

这是一款http协议分析插件,分析页面请求和响应的时间、内容、以及浏览器用到的COOKIE等。

以我为例,安装在火狐上即可,效果如图:

可以非常直观的查看相应的信息。

点击start是开始检测,点击stop暂停检测,点击clear清除内容。

一般在使用之前,点击stop暂停,然后点击clear清屏,确保看到的是访问当前页面获得的数据。

2.深入敌后

下面就去山东大学的成绩查询网站,看一看在登录的时候,到底发送了那些信息。

先来到登录页面,把httpfox打开,clear之后,点击start开启检测:

输入完了个人信息,确保httpfox处于开启状态,然后点击确定提交信息,实现登录。

这个时候可以看到,httpfox检测到了三条信息:

这时点击stop键,确保捕获到的是访问该页面之后反馈的数据,以便我们做爬虫的时候模拟登陆使用。

3.庖丁解牛

乍一看我们拿到了三个数据,两个是GET的一个是POST的,但是它们到底是什么,应该怎么用,我们还一无所知。

所以,我们需要挨个查看一下捕获到的内容。

先看POST的信息:


既然是POST的信息,我们就直接看PostData即可。

可以看到一共POST两个数据,stuid和pwd。

并且从Type的Redirect to可以看出,POST完毕之后跳转到了bks_login2.loginmessage页面。

由此看出,这个数据是点击确定之后提交的表单数据。

点击cookie标签,看看cookie信息:


没错,收到了一个ACCOUNT的cookie,并且在session结束之后自动销毁。

那么提交之后收到了哪些信息呢?

我们来看看后面的两个GET数据。

先看第一个,我们点击content标签可以查看收到的内容,是不是有一种生吞活剥的快感-。-HTML源码暴露无疑了:


看来这个只是显示页面的html源码而已,点击cookie,查看cookie的相关信息:



啊哈,原来html页面的内容是发送了cookie信息之后才接受到的。

再来看看最后一个接收到的信息:

大致看了一下应该只是一个叫做style.css的css文件,对我们没有太大的作用。

4.冷静应战

既然已经知道了我们向服务器发送了什么数据,也知道了我们接收到了什么数据,基本的流程如下:

首先,我们POST学号和密码--->然后返回cookie的值然后发送cookie给服务器--->返回页面信息。获取到成绩页面的数据,用正则表达式将成绩和学分单独取出并计算加权平均数。

OK,看上去好像很简单的样纸。那下面我们就来试试看吧。

但是在实验之前,还有一个问题没有解决,就是POST的数据到底发送到了哪里?

再来看一下当初的页面:

很明显是用一个html框架来实现的,也就是说,我们在地址栏看到的地址并不是右边提交表单的地址。

那么怎样才能获得真正的地址-。-右击查看页面源代码:

嗯没错,那个name="w_right"的就是我们要的登录页面。

网站的原来的地址是:

http://jwxt.sdu.edu.cn:7777/zhxt_bks/zhxt_bks.html

所以,真正的表单提交的地址应该是:

http://jwxt.sdu.edu.cn:7777/zhxt_bks/xk_login.html

输入一看,果不其然:


靠居然是清华大学的选课系统。。。目测是我校懒得做页面了就直接借了。。结果连标题都不改一下。。。

但是这个页面依旧不是我们需要的页面,因为我们的POST数据提交到的页面,应该是表单form的ACTION中提交到的页面。

也就是说,我们需要查看源码,来知道POST数据到底发送到了哪里:


嗯,目测这个才是提交POST数据的地址。

整理到地址栏中,完整的地址应该如下:

http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bks_login2.login

(获取的方式很简单,在火狐浏览器中直接点击那个链接就能看到这个链接的地址了)

5.小试牛刀

接下来的任务就是:用python模拟发送一个POST的数据并取到返回的cookie值。

关于cookie的操作可以看看这篇博文:

http://www.jb51.net/article/57144.htm

我们先准备一个POST的数据,再准备一个cookie的接收,然后写出源码如下:

# -*- coding: utf-8 -*-
#---------------------------------------
#   程序:山东大学爬虫
#   版本:0.1
#   作者:why
#   日期:2013-07-12
#   语言:Python 2.7
#   操作:输入学号和密码
#   功能:输出成绩的加权平均值也就是绩点
#---------------------------------------
import urllib 
import urllib2
import cookielib
cookie = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
#需要POST的数据#
postdata=urllib.urlencode({ 
    'stuid':'201100300428', 
    'pwd':'921030' 
})
#自定义一个请求#
req = urllib2.Request( 
    url = 'http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bks_login2.login', 
    data = postdata
)
#访问该链接#
result = opener.open(req)
#打印返回的内容#
print result.read()  

如此这般之后,再看看运行的效果:


ok,如此这般,我们就算模拟登陆成功了。

6.偷天换日

接下来的任务就是用爬虫获取到学生的成绩。

再来看看源网站。

开启HTTPFOX之后,点击查看成绩,发现捕获到了如下的数据:


点击第一个GET的数据,查看内容可以发现Content就是获取到的成绩的内容。

而获取到的页面链接,从页面源代码中右击查看元素,可以看到点击链接之后跳转的页面(火狐浏览器只需要右击,“查看此框架”,即可):


从而可以得到查看成绩的链接如下:

http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bkscjcx.curscopre

7.万事俱备

现在万事俱备啦,所以只需要把链接应用到爬虫里面,看看能否查看到成绩的页面。

从httpfox可以看到,我们发送了一个cookie才能返回成绩的信息,所以我们就用python模拟一个cookie的发送,以此来请求成绩的信息:

# -*- coding: utf-8 -*-
#---------------------------------------
#   程序:山东大学爬虫
#   版本:0.1
#   作者:why
#   日期:2013-07-12
#   语言:Python 2.7
#   操作:输入学号和密码
#   功能:输出成绩的加权平均值也就是绩点
#---------------------------------------
import urllib 
import urllib2
import cookielib
#初始化一个CookieJar来处理Cookie的信息#
cookie = cookielib.CookieJar()
#创建一个新的opener来使用我们的CookieJar#
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
#需要POST的数据#
postdata=urllib.urlencode({ 
    'stuid':'201100300428', 
    'pwd':'921030' 
})
#自定义一个请求#
req = urllib2.Request( 
    url = 'http:/

您可能想查找下面的文章:

  • 零基础写python爬虫之爬虫编写全记录
  • 零基础写python爬虫之打包生成exe文件
  • 零基础写python爬虫之抓取糗事百科代码分享

相关文章

  • Swift中的协议(protocol)学习教程
  • python socket 超时设置 errno 10054
  • 利用Python中unittest实现简单的单元测试实例详解
  • python在多玩图片上下载妹子图的实现代码
  • 使用Python的Tornado框架实现一个简单的WebQQ机器人
  • Python之父谈Python的未来形式
  • Python采集腾讯新闻实例
  • Python中if __name__ == '__main__'作用解析
  • Python pickle模块用法实例分析
  • Python打包文件夹的方法小结(zip,tar,tar.gz等)

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • python文件读写操作与linux shell变量命令交互执行的方法
    • 使用Python编写类UNIX系统的命令行工具的教程
    • python 生成不重复的随机数的代码
    • python3中str(字符串)的使用教程
    • python检测远程服务器tcp端口的方法
    • Python pip安装lxml出错的问题解决办法
    • Python守护进程和脚本单例运行详解
    • python爬虫scrapy运行ImportError: No module named win32api错误
    • python在Windows8下获取本机ip地址的方法
    • python daemon守护进程实现

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有