在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编写检测数据库SA用户的方法
Jul 11 Python
python time模块用法实例详解
Sep 11 Python
详解Python的Django框架中的模版相关知识
Jul 15 Python
Python实现中一次读取多个值的方法
Apr 22 Python
Python 实现字符串中指定位置插入一个字符
May 02 Python
用Python将结果保存为xlsx的方法
Jan 28 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
Feb 12 Python
python3.6下Numpy库下载与安装图文教程
Apr 02 Python
python 进程 进程池 进程间通信实现解析
Aug 23 Python
python实现简单的购物程序代码实例
Mar 03 Python
解决django中form表单设置action后无法回到原页面的问题
Mar 13 Python
解决pycharm中的run和debug失效无法点击运行
Jun 09 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语句将数据库*.sql文件导入数据库
2014/05/05 PHP
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
2010/08/13 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
JS实现左右无缝轮播图代码
2016/05/01 Javascript
简单实现js倒计时功能
2017/02/13 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
React中阻止事件冒泡的问题详析
2019/04/12 Javascript
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
Python数据结构之Array用法实例
2014/10/09 Python
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
Python使用django搭建web开发环境
2017/06/09 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
2018/10/17 Python
通过python实现随机交换礼物程序详解
2019/07/10 Python
python3获取当前目录的实现方法
2019/07/29 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
Python 异常处理Ⅳ过程图解
2019/10/18 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
罗技英国官方网站:Logitech UK
2020/11/03 全球购物
密封类可以有虚函数吗
2014/08/11 面试题
介绍一下JNDI的基本概念
2013/07/26 面试题
计算机应届毕业生自荐信范文
2014/02/23 职场文书
股份合作协议书范本
2014/04/14 职场文书
2016基督教会圣诞节开幕词
2016/03/04 职场文书
创业计划书之书店
2019/09/10 职场文书
浅谈什么是SpringBoot异常处理自动配置的原理
2021/06/21 Java/Android
MySQL读取JSON转换的方式
2022/03/18 MySQL