在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基础学习之常见的内建函数整理
Sep 06 Python
Python探索之静态方法和类方法的区别详解
Oct 27 Python
python实现决策树
Dec 21 Python
python字符串的方法与操作大全
Jan 30 Python
python3实现公众号每日定时发送日报和图片
Feb 24 Python
django自带的server 让外网主机访问方法
May 14 Python
Python简单计算给定某一年的某一天是星期几示例
Jun 27 Python
Python 实现王者荣耀中的敏感词过滤示例
Jan 21 Python
解决Python中pandas读取*.csv文件出现编码问题
Jul 12 Python
复化梯形求积分实例——用Python进行数值计算
Nov 20 Python
python自动识别文本编码格式代码
Dec 26 Python
python Tensor和Array对比分析
Jan 08 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函数utf8转gb2312编码
2006/12/21 PHP
PHP 魔术变量和魔术函数详解
2015/02/25 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
laravel 获取当前url的别名方法
2019/10/11 PHP
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
10条建议帮助你创建更好的jQuery插件
2015/05/18 Javascript
JQuery自动触发事件的方法
2015/06/13 Javascript
vue中mint-ui环境搭建详细介绍
2017/04/06 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
2017/06/17 Javascript
详解js静态资源文件请求的处理
2017/08/01 Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
2018/12/11 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
js 获取扫码枪输入数据的方法
2020/06/10 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
2021/01/25 Javascript
Python import自定义模块方法
2015/02/12 Python
使用相同的Apache实例来运行Django和Media文件
2015/07/22 Python
python 调用c语言函数的方法
2017/09/29 Python
Django 使用logging打印日志的实例
2018/04/28 Python
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
Python操作json的方法实例分析
2018/12/06 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
Python3 tkinter 实现文件读取及保存功能
2019/09/12 Python
python函数中将变量名转换成字符串实例
2020/05/11 Python
深入了解NumPy 高级索引
2020/07/24 Python
HTML5单选框、复选框、下拉菜单、文本域的实现代码
2020/12/01 HTML / CSS
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
质检部经理岗位职责
2014/02/19 职场文书
根叔历年演讲稿
2014/05/20 职场文书
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
大学教师个人总结
2015/02/10 职场文书
MySQL Shell import_table数据导入的实现
2021/08/07 MySQL
Python中 range | np.arange | np.linspace三者的区别
2022/03/22 Python
Spring中的@Transactional的工作原理
2022/06/05 Java/Android