Python爬虫辅助利器PyQuery模块的安装使用攻略
作者:onlyanyz 发布时间:2023-10-18 02:19:34
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()
运行下看看结果:
肖申克的救赎
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
所以可以写个循环把它们都抓下来。
猜你喜欢
- 在设计中保持一致性(uniformity)是网页设计中一个重要的组成部分,它能使你的设计有效地传达信息而不会导致用户迷惑或焦虑。保证一致性的
- 前言在迷宫问题中,给定入口和出口,要求找到路径。本文将讨论三种求解方法,递归求解、回溯求解和队列求解。在介绍具体算法之前,先考虑将迷宫数字化
- 函数内部的函数只能在函数内部调用,不能在函数外部调用,通过接下来的学习你将会知道为什么会出现这种情况。一、名称空间名称空间(name spa
- 作为开发者,我们可以通过以下3中方式来配置logging:1)使用Python代码显式的创建loggers, handlers和format
- 为了更直观的了解prometheus如何工作,本文使用prometheus的python库来做一些相应的测试。python库的github地
- python安装pywifi1.Windows安装:在Dos窗口中输入以下命令:pip install pywifi如果找不到pip命令,那
- 一. 抛出异常Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,
- 1. 数据集基本信息df = pd.read_csv()df.head():前五行;df.info():rangeindex:行索引;dat
- 本文实例为大家分享了selenium+python京东自动登录及秒杀的代码,供大家参考,具体内容如下运行环境:python 2.7pytho
- 目前代码应该没什么bug了,兼容IE6.0 & FF 1.5, 通过xHTML 的Transitional验证和 CSS 验证。为了
- 前言plt.contour是python中用于画等高线的函数,这里介绍一下plt.contour的使用。使用示例import numpy a
- 本文实例讲述了python追加元素到列表的方法。分享给大家供大家参考。具体实现方法如下:scores = ["1",&q
- 前言本文仅仅介绍了常见的一些JS加密,并记录了JS和Python的实现方式常见的加密算法基本分为这几类:(1)base64编码伪加密(2)线
- Mysql数据库备份和还原常用的命令是进行Mysql数据库备份和还原的关键,没有命令,什么都无从做起,更谈不上什么备份还原,只有给系统这个命
- 在正文前,先简短介绍自己。我任职于广州的某个网站服务公司的系统开发员,主要任务是以.Net编写各种web系统,例如CMS.EIP。大家都知道
- 1,SELECT 语句 在SQL的世界里,最最基础的操作就是SELECT 语句了。在数据库工具下直接采用SQL
- 之前在网上看过一些介绍Django处理请求的流程和Django源码结构的文章,觉得了解一下这些内容对开发Django项目还是很有帮助的。所以
- 本文实例为大家分享了python图形用户接口实例的具体代码,供大家参考,具体内容如下运用tkinter图形库,模拟聊天应用界面,实现信息发送
- 前言在遇到三维数据时,三维图像能给我们对数据带来更加深入地理解。python的matplotlib库就包含了丰富的三维绘图工具。1.创建三维
- 对于Python开发用户来讲,安装第三方库是家常便饭,下面提供两种安装方式pycharm软件安装1.打开file>setting2.点