Python爬虫辅助利器PyQuery模块的安装使用攻略


Posted in Python onApril 24, 2016

Windows下的安装:
下载地址:https://pypi.python.org/pypi/pyquery/#downloads
下载后安装:

C:\Python27>easy_install E:\python\pyquery-1.2.4.zip

也可以直接在线安装:

C:\Python27>easy_install pyquery

pyquery是一个类似jquery的python库,可以使用像jquery那样的语法来提取网页中的任何数据,这个用于html网页的数据提取和挖掘还是一个很不错的第三方库的。下面我们来看下pyquery的用法有哪些。

从html字符串中提取信息

#!/usr/bin/python
# -*- coding: utf-8 -*-

from pyquery import PyQuery as pq
html = '''
<html>
<head>
 <title>this is title</title>
</head>
<body>
 <p id="hi">Hello, World</p>
 <p id="hi2">Nihao</p>
 <div class="class1">
  <img src="1.jpg" />
 </div>
 <ul>
  <li>list1</li>
  <li>list2</li>
 </ul>
</body>
</html>
'''
d=pq(html)

print d('title') # 相当于css选择器,根据html标签获取元素
print d('title').text() # text()方法获取当前选中的文本块

print d('#hi').text() # 相当于id选择器,直接根据id名获取元素
print d('p').filter('#hi2').text() # 可以根据id或class得到指定元素
print d('.class1') # 相当于class选择器
print d('.class1').html() # html()方法获取当前选中的html块
print d('.class1').find('img').attr('src') # 查找嵌套元素,并选中属性
print d('ul').find('li').eq(0).text() # 根据索引号获取多个相同html元素中的某一个
print d('ul').children() # 获取所有子元素
print d('ul').children().eq(0) #根据索引获取子元素
print d('img').parents() # 获取父元素
print d('#hi').next() # 获取下一个元素
print d('#hi').nextAll() #获取后面全部元素块
print d('p').not_('#hi2') # 返回不匹配选择器的元素
# 遍历所有匹配的元素
for i in d.items('li'):
 print i.text()
print [i.text() for i in d.items('li')] # 遍历用于列表推倒
print d.make_links_absolute(base_url='http://www.baidu.com') # 把html文档中的相对路径变为绝对路径

上面的代码段给出了pyquery常用的操作方法。我们先定义了一段html代码,然后利用pyquery的一系列方法对该html代码进行了操作,主要是获取特定的元素以及文本等。当然,pyquery不仅仅能够获取元素,还能进行设置元素属性、增加元素等功能,鉴于我们最常用的就是上面代码中用到的方法,这里就不再对其他方法进行介绍了。

从url或本地html文件中提取信息

当然,pyquery也不仅仅可以解析像上面的html字符串,还可以这样:

d = pq(url='http://www.baidu.com/')

我们可以直接加载一个URL,和上面的操作方法没有任何区别。这种方法默认使用urllib模块进行http请求,但如果你的系统中安装了requests的话,那么就会使用requests来进行http请求,这也就意味着你可以使用requests的任何参数,比如:

pq('http://www.baidu.com/', headers={'user-agent': 'pyquery'})

或者,如果你在你的本地已经有了对应的html文件,那么还可以这样:

d = pq(filename=path_to_html_file)

上面的写法直接指定了本地的html文件,且操作方法仍然与上面的相同。
可以看到,pyquery给我们提供充分的便利性来进行任何元素的选取,就像jquery一样。

利用pyquery抓取豆瓣电影top250

看完了pyquery的语法,我们来看一个实例,抓取豆瓣电影top250。
因为豆瓣反爬虫反的厉害,运行几次就没法再抓了,我只好先用requests把页面下载下来,直接使用pyquery分析页面的方法来提取信息:

from pyquery import PyQuery as pq
import requests

head_req = {
 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',
 'Referer':'https://movie.douban.com/top250?start=0',

}
r=requests.get("https://movie.douban.com/top250?start=0",headers=head_req)
with open("1.html","wb") as html:
 html.write(r.content)

d=pq(filename="1.html")

# print d('ol').find('li').html()
for data in d('ol').items('li'):
 print data.find('.hd').find('.title').eq(0).text()
 print data.find('.star').find('.rating_num').text()
 print data.find('.quote').find('.inq').text()
 print

运行下看看结果:

肖申克的救赎
9.6
希望让人自由。

这个杀手不太冷
9.4
怪蜀黍和小萝莉不得不说的故事。

阿甘正传
9.4
一部美国近现代史。

霸王别姬
9.4
风华绝代。

美丽人生
9.5
最美的谎言。

千与千寻
9.2
最好的宫崎骏,最好的久石让。

辛德勒的名单
9.4
拯救一个人,就是拯救整个世界。

海上钢琴师
9.2
每个人都要走一条自己坚定了的路,就算是粉身碎骨。

机器人总动员
9.3
小瓦力,大人生。

盗梦空间
9.2
诺兰给了我们一场无法盗取的梦。

泰坦尼克号
9.1
失去的才是永恒的。

三傻大闹宝莱坞
9.1
英俊版憨豆,高情商版谢耳朵。

放牛班的春天
9.2
天籁一般的童声,是最接近上帝的存在。

忠犬八公的故事
9.2
永远都不能忘记你所爱的人。

龙猫
9.1
人人心中都有个龙猫,童年就永远不会消失。

大话西游之大圣娶亲
9.1
一生所爱。

教父
9.2
千万不要记恨你的对手,这样会让你失去理智。

乱世佳人
9.2
Tomorrow is another day.

天堂电影院
9.1
那些吻戏,那些青春,都在影院的黑暗里被泪水冲刷得无比清晰。

当幸福来敲门
8.9
平民励志片。

搏击俱乐部
9.0
邪恶与平庸蛰伏于同一个母体,在特定的时间互相对峙。

楚门的世界
9.0
如果再也不能见到你,祝你早安,午安,晚安。

触不可及
9.1
满满温情的高雅喜剧。

指环王3:王者无敌
9.1
史诗的终章。

罗马假日
8.9
爱情哪怕只有一天。

当然这只是第一页的25条,我们已经知道了豆瓣电影top250的url是

https://movie.douban.com/top250?start=0
start参数从0,每次加25,直到

https://movie.douban.com/top250?start=225
所以可以写个循环把它们都抓下来。

Python 相关文章推荐
详解Python设计模式编程中观察者模式与策略模式的运用
Mar 02 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
Jun 13 Python
利用Pyhton中的requests包进行网页访问测试的方法
Dec 26 Python
python 画三维图像 曲面图和散点图的示例
Dec 29 Python
python实现图片彩色转化为素描
Jan 15 Python
详解Python 函数如何重载?
Apr 23 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
Apr 17 Python
python中前缀运算符 *和 **的用法示例详解
May 28 Python
Matlab中plot基本用法的具体使用
Jul 17 Python
Python 爬虫的原理
Jul 30 Python
Python return语句如何实现结果返回调用
Oct 15 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
Mar 03 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
Apr 23 #Python
Python 中的 else详解
Apr 23 #Python
Python 探针的实现原理
Apr 23 #Python
一键搞定python连接mysql驱动有关问题(windows版本)
Apr 23 #Python
Linux 发邮件磁盘空间监控(python)
Apr 23 #Python
web.py 十分钟创建简易博客实现代码
Apr 22 #Python
在windows下快速搭建web.py开发框架方法
Apr 22 #Python
You might like
PHP的栏目导航程序
2006/10/09 PHP
PHP数组排序函数合集 以及它们之间的联系分析
2013/06/27 PHP
php while循环得到循环次数
2013/10/26 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
2016/08/01 PHP
PHP AjaxForm提交图片上传并显示图片源码
2016/11/29 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
2014/09/03 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
2015/09/12 Javascript
JS实现仿PS的调色板效果完整实例
2016/12/21 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
总结js函数相关知识点
2018/02/27 Javascript
js+canvas实现图片格式webp/png/jpeg在线转换
2020/08/22 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
2017/05/31 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
2018/10/09 Python
使用python list 查找所有匹配元素的位置实例
2019/06/11 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
python飞机大战pygame游戏背景设计详解
2019/12/17 Python
python实现ftp文件传输功能
2020/03/20 Python
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
AmazeUI 网格的实现示例
2020/08/13 HTML / CSS
英国高档百货连锁店:John Lewis
2017/11/20 全球购物
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
蔻驰法国官网:COACH法国
2018/11/14 全球购物
Java语言的优势
2015/01/10 面试题
青年志愿者事迹材料
2014/02/07 职场文书
护理助产毕业生的求职信
2014/03/02 职场文书
2015公务员试用期工作总结
2014/12/12 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书
教您:房贷工资收入证明应该怎么写?
2019/08/19 职场文书
Python数组变形的几种实现方法
2022/05/30 Python