在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 ElementTree 基本读操作示例
Apr 09 Python
python利用hook技术破解https的实例代码
Mar 25 Python
Python 字典(Dictionary)操作详解
Mar 11 Python
python中如何使用朴素贝叶斯算法
Apr 06 Python
简述Python2与Python3的不同点
Jan 21 Python
python使用folium库绘制地图点击框
Sep 21 Python
Python设计模式之享元模式原理与用法实例分析
Jan 11 Python
Python类的继承用法示例
Jan 31 Python
Django 实现Admin自动填充当前用户的示例代码
Nov 18 Python
python实现滑雪游戏
Feb 22 Python
Python如何读写CSV文件
Aug 13 Python
windows安装python超详细图文教程
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
PHP数组操作汇总 php数组的使用技巧
2011/07/17 PHP
PHP分页效率终结版(推荐)
2013/07/01 PHP
详解PHP归并排序的实现
2016/10/18 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
老生常谈PHP数组函数array_merge(必看篇)
2017/05/25 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
2010/05/15 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
JS来动态的修改url实现对url的增删查改
2014/09/05 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
javascript中Date对象应用之简易日历实现
2016/07/12 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
2017/02/07 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
2017/09/21 Javascript
vue+vue-validator 表单验证功能的实现代码
2017/11/13 Javascript
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
2019/04/10 Javascript
Vue实现验证码功能
2019/12/03 Javascript
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
利用Python半自动化生成Nessus报告的方法
2019/03/19 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
2019/06/17 Python
python实现控制COM口的示例
2019/07/03 Python
python实现倒计时小工具
2019/07/29 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
2020/02/17 Python
Python使用grequests并发发送请求的示例
2020/11/05 Python
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
Amaze UI 文件选择域的示例代码
2020/08/26 HTML / CSS
加拿大在线旅游公司:Flighthub
2019/03/11 全球购物
行政管理专业推荐信
2013/11/02 职场文书
和睦家庭事迹
2014/05/14 职场文书
导游词之长城八达岭
2019/09/24 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
go原生库的中bytes.Buffer用法
2021/04/25 Golang