在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三元运算符实现方法
Dec 17 Python
python连接oracle数据库实例
Oct 17 Python
详解Python函数作用域的LEGB顺序
May 14 Python
Python实现视频下载功能
Mar 14 Python
Python实现简单求解给定整数的质因数算法示例
Mar 25 Python
如何安装并使用conda指令管理python环境
Jul 10 Python
python实现一行输入多个值和一行输出多个值的例子
Jul 16 Python
Python根据服务获取端口号的方法
Sep 25 Python
python-numpy-指数分布实例详解
Dec 07 Python
python如何在word中存储本地图片
Apr 07 Python
python小程序之飘落的银杏
Apr 17 Python
python数字图像处理:图像简单滤波
Jun 28 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
怎样在UNIX系统下安装MySQL
2006/10/09 PHP
基于php上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
PHP输出XML格式数据的方法总结
2017/02/08 PHP
在laravel中使用Symfony的Crawler组件分析HTML
2017/06/19 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
2019/12/12 PHP
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
jquery $.ajax相关用法分享
2012/03/16 Javascript
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
javascript实现限制上传文件大小
2015/02/06 Javascript
跟我学习javascript的call(),apply(),bind()与回调
2015/11/16 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
详解Vue监听数据变化原理
2017/03/08 Javascript
jQuery输入框密码的显示隐藏【代码分享】
2017/04/29 jQuery
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
如何实现双向绑定mvvm的原理实现
2019/05/28 Javascript
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
python数据处理实战(必看篇)
2017/06/11 Python
python tornado微信开发入门代码
2018/08/24 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
解决Python import docx出错DLL load failed的问题
2020/02/13 Python
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
如何提高JDBC的性能
2013/04/30 面试题
财务管理专业应届毕业生求职信
2013/09/22 职场文书
高中生期末评语大全
2014/01/28 职场文书
大学生党校培训心得体会
2014/09/11 职场文书
2014年校务公开工作总结
2014/12/18 职场文书
学术研讨会欢迎词
2015/01/26 职场文书
python实现简单的井字棋
2021/05/26 Python