在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写的图片蜘蛛人代码
Aug 27 Python
Python Web框架Pylons中使用MongoDB的例子
Dec 03 Python
python实现给字典添加条目的方法
Sep 25 Python
深入理解Python 代码优化详解
Oct 27 Python
Python实现统计文本文件字数的方法
May 05 Python
Python使用Tkinter实现机器人走迷宫
Jan 22 Python
基于python批量处理dat文件及科学计算方法详解
May 08 Python
python快排算法详解
Mar 04 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
Aug 23 Python
Python实现基于socket的udp传输与接收功能详解
Nov 15 Python
PyQt5多线程刷新界面防假死示例
Dec 13 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
Feb 28 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
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
PHP中判断变量为空的几种方法分享
2013/08/26 PHP
php跨站攻击实例分析
2014/10/28 PHP
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
PHP tp5中使用原生sql查询代码实例
2020/10/28 PHP
Jquery获取复选框被选中值的简单方法
2013/07/04 Javascript
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
jqTransform美化表单
2015/10/10 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
Bootstrap的fileinput插件实现多文件上传的方法
2016/09/05 Javascript
浅谈mint-ui 填坑之路
2017/11/06 Javascript
vue项目国际化vue-i18n的安装使用教程
2018/03/14 Javascript
微信小程序中使用自定义图标(阿里icon)的方法
2018/08/20 Javascript
Nodejs中获取当前函数被调用的行数及文件名详解
2018/12/12 NodeJs
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
JS代码优化的8点建议
2020/02/04 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
Python中优化NumPy包使用性能的教程
2015/04/23 Python
Python fileinput模块使用实例
2015/05/28 Python
对Python Class之间函数的调用关系详解
2019/01/23 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
2019/07/03 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
解决Keras 中加入lambda层无法正常载入模型问题
2020/06/16 Python
pytorch随机采样操作SubsetRandomSampler()
2020/07/07 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
新西兰珠宝品牌:Michael Hill
2017/09/16 全球购物
DataReader和DataSet的异同
2014/12/31 面试题
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
建筑设计师岗位职责
2013/11/18 职场文书
会计电算化专业毕业生推荐信
2013/12/24 职场文书
党校培训自我鉴定范文
2014/03/20 职场文书
歌颂祖国的演讲稿
2014/05/04 职场文书
义和团口号
2014/06/17 职场文书
关于读书的演讲稿1000字
2014/08/27 职场文书
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android