在Python中使用cookielib和urllib2配合PyQuery抓取网页信息


Posted in Python onApril 25, 2015

刚才好无聊,突然想起来之前做一个课表的点子,于是百度了起来。

刚开始,我是这样想的:在写微信墙的时候,用到了urllib2【两行代码抓网页】,那么就只剩下解析html了。于是百度:python解析html。发现一篇好文章,其中介绍到了pyQuery。

pyQuery 是 jQuery 在 Python 中的实现,能够以 jQuery 的语法?聿僮鹘馕 HTML 文档。使用前需要安装,Mac安装方法如下:

sudo easy_install pyquery

OK!安装好了!

我们来试一试吧:

from pyquery import PyQuery as pq
html = pq(url=u'http://seam.ustb.edu.cn:8080/jwgl/index.jsp')
#现在已经获取了本科教学网首页的html
classes = html('.haveclass')
#通过类名获取元素
#如果你对jQuery熟悉的话,那么你现在肯定明白pyQuery的方便了
更多用法参见pyQuery API

好像学会了使用pyQuery就能抓课表了呢,但是,如果你直接用我的源码,肯定会出错。因为还没有登录啊!

所以,在运行这一行抓取正确的代码之前,我们需要模拟登录本科教学网。这个时候,我想起来urllib有模拟post请求的函数,于是我百度了:urllib post。

这是一个最简的模拟post请求例子:

import urllib
import urllib2
import cookielib

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [('User-agent','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)')]
urllib2.install_opener(opener)
req = urllib2.Request("http://seam.ustb.edu.cn:8080/jwgl/Login",urllib.urlencode({"username":"41255029","password":"123456","usertype":"student"}))
req.add_header("Referer","http://xxoo.com")
resp = urllib2.urlopen(req)
#这里面用到了cookielib,我不太清楚,以后慢慢了解吧
#还用到了urllib和urllib2,urllib2大概是urllib的扩展包【233想到了三国杀

在这个最简的实例里,用我的校园网账号向登录页面提交表单数据,模拟登录。

现在,我们已经登录了本科教学网,然后结合之前的pyQuery解析html就可以获取网页内的课表了。

html = pq(url=u'http://seam.ustb.edu.cn:8080/jwgl/index.jsp')
self.render("index.html",data=html('.haveclass'))

结果展示如图:

在Python中使用cookielib和urllib2配合PyQuery抓取网页信息

最后:

我发现,pyQuery不但用于解析html非常方便,而且可以作为跨域抓取数据的工具,NICE!!!

希望对大家有帮助。

Python 相关文章推荐
python进阶教程之循环相关函数range、enumerate、zip
Aug 30 Python
Python解析json文件相关知识学习
Mar 01 Python
Python 常用string函数详解
May 30 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
Nov 16 Python
ubuntu系统下 python链接mysql数据库的方法
Jan 09 Python
如何使用VSCode愉快的写Python于调试配置步骤
Apr 06 Python
python实现批量注册网站用户的示例
Feb 22 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
Apr 29 Python
Scrapy-Redis结合POST请求获取数据的方法示例
May 07 Python
用Pelican搭建一个极简静态博客系统过程解析
Aug 22 Python
python脚本框架webpy的url映射详解
Nov 20 Python
Python借助with语句实现代码段只执行有限次
Mar 23 Python
使用Python的Tornado框架实现一个一对一聊天的程序
Apr 25 #Python
使用Python发送邮件附件以定时备份MySQL的教程
Apr 25 #Python
安装Python的web.py框架并从hello world开始编程
Apr 25 #Python
用Python编写一个基于终端的实现翻译的脚本
Apr 24 #Python
Python的Bottle框架中获取制定cookie的教程
Apr 24 #Python
利用Python的装饰器解决Bottle框架中用户验证问题
Apr 24 #Python
在Python中使用mongoengine操作MongoDB教程
Apr 24 #Python
You might like
PHP 批量删除数据的方法分析
2009/10/30 PHP
php ajax 静态分页过程形式
2011/09/02 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
2012/10/06 PHP
phpize的深入理解
2013/06/03 PHP
php读取大文件示例分享(文件操作类)
2014/04/13 PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
2016/07/20 PHP
Laravel中如何增加自定义全局函数详解
2017/05/09 PHP
Yii框架实现的验证码、登录及退出功能示例
2017/05/20 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
javascript实现分栏显示小技巧附图
2014/10/13 Javascript
jQuery 选择器详解
2015/01/19 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
AngularJS实现表单手动验证和表单自动验证
2015/12/09 Javascript
Es6 写的文件import 起来解决方案详解
2016/12/13 Javascript
nodejs服务搭建教程 nodejs访问本地站点文件
2017/04/07 NodeJs
浅谈Webpack 持久化缓存实践
2018/03/22 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
Nodejs监听日志文件的变化的过程解析
2019/08/04 NodeJs
[04:50]2019DOTA2高校联赛秋季赛四强集锦
2019/12/27 DOTA
python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
2009/04/09 Python
在Python下尝试多线程编程
2015/04/28 Python
python 数据清洗之数据合并、转换、过滤、排序
2017/02/12 Python
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
Python实现栈和队列的简单操作方法示例
2019/11/29 Python
使用SVG实现提示框功能的示例代码
2020/06/05 HTML / CSS
质量承诺书范文
2014/03/27 职场文书
合作意向协议书范本
2014/03/31 职场文书
《春天来了》教学反思
2014/04/07 职场文书
大学生村官考核材料
2014/05/23 职场文书
收费员岗位职责
2015/02/14 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python
vscode中使用npm安装babel的方法
2021/08/02 Javascript