在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的Django框架中的缓存控制
Jul 24 Python
Python使用logging结合decorator模式实现优化日志输出的方法
Apr 16 Python
Python中py文件引用另一个py文件变量的方法
Apr 29 Python
python实现windows壁纸定期更换功能
Jan 21 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
Django框架之DRF 基于mixins来封装的视图详解
Jul 23 Python
Python 保持登录状态进行接口测试的方法示例
Aug 06 Python
python使用sklearn实现决策树的方法示例
Sep 12 Python
Python常驻任务实现接收外界参数代码解析
Jul 21 Python
python绘图pyecharts+pandas的使用详解
Dec 13 Python
python-地图可视化组件folium的操作
Dec 14 Python
matlab xlabel位置的设置方式
May 21 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
一个简易需要注册的留言版程序
2006/10/09 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
php解压缩zip和rar压缩包文件的方法
2019/07/10 PHP
javascript 面向对象,实现namespace,class,继承,重载
2009/10/29 Javascript
js动态加载以及确定加载完成的代码
2011/07/31 Javascript
解决js下referer兼容各大浏览器的方法
2014/11/03 Javascript
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
Javascript常用小技巧汇总
2015/06/24 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
2016/10/17 Javascript
JQuery学习总结【二】
2016/12/01 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
2018/05/03 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
使用JavaScript保存文本文件到本地的两种方法
2019/01/22 Javascript
微信小程序左滑删除实现代码实例
2019/09/16 Javascript
Jquery异步上传文件代码实例
2019/11/13 jQuery
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
Mac安装python3的方法步骤
2019/08/09 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
Python使用os.listdir和os.walk获取文件路径
2020/05/21 Python
CSS3 Notes: -webkit-box-reflect实现倒影的实例
2016/12/08 HTML / CSS
威盛公司软件C++工程师笔试题面试题
2012/07/16 面试题
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
党校培训自我鉴定范文
2014/03/20 职场文书
市场营销调查计划书
2014/05/02 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
幼儿园中班教师个人总结
2015/02/05 职场文书
红色革命电影观后感
2015/06/18 职场文书
《青山不老》教学反思
2016/02/22 职场文书
关于拾金不昧的感谢信(五篇)
2019/10/18 职场文书
浅谈python数据类型及其操作
2021/05/25 Python
【海涛教你打DOTA】死灵飞龙第一视角解说
2022/04/01 DOTA