在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 相关文章推荐
微信 用脚本查看是否被微信好友删除
Oct 28 Python
在django中使用自定义标签实现分页功能
Jul 04 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
Jan 04 Python
Python装饰器原理与用法分析
Apr 30 Python
Opencv实现抠图背景图替换功能
May 21 Python
django框架使用orm实现批量更新数据的方法
Jun 21 Python
pytorch中tensor张量数据类型的转化方式
Dec 31 Python
Ubuntu16.04安装python3.6.5步骤详解
Jan 10 Python
使用pytorch完成kaggle猫狗图像识别方式
Jan 10 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
Jul 20 Python
简单了解python关键字global nonlocal区别
Sep 21 Python
python中的None与NULL用法说明
May 25 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 面向对象 final类与final方法
2010/05/05 PHP
PHP获取MAC地址的具体实例
2013/12/13 PHP
浅谈PHPANALYSIS提取关键字
2019/03/08 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
jQuery 表单验证扩展代码(一)
2010/10/11 Javascript
js实现局部页面打印预览原理及示例代码
2014/07/03 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
2016/04/06 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
2016/05/24 Javascript
nodejs的压缩文件模块archiver用法示例
2017/01/18 NodeJs
基于vue2.0+vuex+localStorage开发的本地记事本示例
2017/02/28 Javascript
微信分享调用jssdk实例
2017/06/08 Javascript
微信小程序request请求后台接口php的实例详解
2017/09/20 Javascript
JS排序算法之希尔排序与快速排序实现方法
2017/12/12 Javascript
vue如何在自定义组件中使用v-model
2018/05/14 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
详解webpack自定义loader初探
2018/08/29 Javascript
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
使用React手写一个对话框或模态框的方法示例
2019/04/25 Javascript
Vue.js watch监视属性知识点总结
2019/11/11 Javascript
[02:44]DOTA2英雄基础教程 钢背兽
2013/12/19 DOTA
Python探索之自定义实现线程池
2017/10/27 Python
Python GUI布局尺寸适配方法
2018/10/11 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
Django之模板层的实现代码
2019/09/09 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
使用HTML5的链接预取功能(link prefetching)给网站提速
2012/12/13 HTML / CSS
HTML5之tabindex属性全面解析
2016/07/07 HTML / CSS
商业用房租赁协议书
2014/10/13 职场文书
2014年业务工作总结
2014/11/17 职场文书
小学英语教学随笔
2015/08/14 职场文书
2016年八一建军节活动总结
2016/04/05 职场文书
2019年恭贺升学祝福语集锦
2019/08/15 职场文书
php 原生分页
2021/04/01 PHP
Java设计模式之代理模式
2022/04/22 Java/Android