在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 相关文章推荐
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
Apr 02 Python
python得到windows自启动列表的方法
Oct 14 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
Apr 17 Python
pandas DataFrame 行列索引及值的获取的方法
Jul 02 Python
python用match()函数爬数据方法详解
Jul 23 Python
Python-接口开发入门解析
Aug 01 Python
python修改字典键(key)的方法
Aug 05 Python
python队列原理及实现方法示例
Nov 27 Python
在keras 中获取张量 tensor 的维度大小实例
Jun 10 Python
基于python实现模拟数据结构模型
Jun 12 Python
Python数据可视化之用Matplotlib绘制常用图形
Jun 03 Python
Python matplotlib多个子图绘制整合
Apr 13 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
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
程序员编程十条戒律
2009/07/09 PHP
php 输出双引号"与单引号'的方法
2010/05/09 PHP
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
深入extjs与php参数交互的详解
2013/06/25 PHP
php轻量级的性能分析工具xhprof的安装使用
2015/08/12 PHP
详解php魔术方法(Magic methods)的使用方法
2016/02/14 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
2016/03/21 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
PHP 实现base64编码文件上传出现问题详解
2020/09/01 PHP
用js一次改变多个input的readonly属性值的方法
2014/06/11 Javascript
jquery实现动态画圆
2014/12/04 Javascript
jQuery中is()方法用法实例
2015/01/06 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
2015/11/24 Javascript
实例讲解jquery与json的结合
2016/01/07 Javascript
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
2016/10/26 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
vue 集成jTopo 处理方法
2019/08/07 Javascript
vue项目中自定义video视频控制条的实现代码
2020/04/26 Javascript
js实现弹幕飞机效果
2020/08/27 Javascript
Python实现的批量下载RFC文档
2015/03/10 Python
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
Python中filter与lambda的结合使用详解
2019/12/24 Python
Virtualenv 搭建 Py项目运行环境的教程详解
2020/06/22 Python
Python 基于jwt实现认证机制流程解析
2020/06/22 Python
80年代复古T恤:TruffleShuffle
2018/07/02 全球购物
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
诚信考试承诺书
2014/03/27 职场文书
校长寄语大全
2014/04/09 职场文书
2014年体育教师工作总结
2014/12/03 职场文书
怎样评估创业计划书是否有可行性?
2019/08/07 职场文书
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
mybatis 获取更新记录的id
2022/05/20 Java/Android