在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中input和raw_input的一点区别
Oct 21 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
Python离线安装PIL 模块的方法
Jan 08 Python
Python面向对象之继承和多态用法分析
Jun 08 Python
用Anaconda安装本地python包的方法及路径问题(图文)
Jul 16 Python
python scipy卷积运算的实现方法
Sep 16 Python
python 使用递归实现打印一个数字的每一位示例
Feb 27 Python
一文带你掌握Pyecharts地理数据可视化的方法
Feb 06 Python
matplotlib 范围选区(SpanSelector)的使用
Feb 24 Python
python实现简单聊天功能
Jul 07 Python
OpenCV图像变换之傅里叶变换的一些应用
Jul 26 Python
python 管理系统实现mysql交互的示例代码
Dec 06 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获取url的函数代码
2011/08/02 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
2019/10/25 PHP
JavaScript使用技巧精萃[代码非常实用]
2008/11/21 Javascript
各浏览器对click方法的支持差异小结
2011/07/31 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
jquery中添加属性和删除属性
2015/06/03 Javascript
超赞的jQuery图片滑块动画特效代码汇总
2016/01/25 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
jQuery增加、删除及修改select option的方法
2016/08/19 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
2018/05/04 Javascript
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
2019/02/28 Javascript
vue 解决数组赋值无法渲染在页面的问题
2019/10/28 Javascript
python与php实现分割文件代码
2017/03/06 Python
利用Opencv中Houghline方法实现直线检测
2018/02/11 Python
python实现随机加减法生成器
2020/02/24 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
Bowflex美国官方网站:高级家庭健身器材
2017/12/22 全球购物
荷兰包包购物网站:The Little Green Bag
2018/03/17 全球购物
外贸学院会计专业应届生求职信
2013/11/14 职场文书
化工专业推荐信范文
2013/11/28 职场文书
公司清洁工岗位职责
2013/12/14 职场文书
大学生水果店创业计划书
2014/01/28 职场文书
黄河的主人教学反思
2014/02/07 职场文书
优秀的2014年两会精神解读
2014/03/17 职场文书
大学生英语演讲稿
2014/04/24 职场文书
检讨书范文大全
2015/05/07 职场文书