1.初始化
- 字符串初始化(常用)
以一段HTML字符串初始化
html = '''
<div>
<ul>
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('li'))
运行结果:
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
- URL初始化
传入网页的URL,PyQuery对象会先请求网页,返回网页源代码(字符串形式)来初始化。
import pyquery
url = 'http://maoyan.com/board/4'
doc = pyquery.PyQuery(url=url)
print(doc('title'))
运行结果
<title>TOP100榜 - 猫眼电影 - 一网打尽好电影</title>
- 文件初始化
以本地保存的文件作为参数
from pyquery import PyQuery as pq
doc = pq(filename='demo.html')
print(doc('li'))
2.CSS知识
3.查找节点
#find()方法
#children()方法
#parent()方法
#parents()方法
#siblings()方法
4.遍历
item()方法 当选择的结果中包含多个结果时使用
5.获取信息
- 获取属性
attr() #获取节点的属性,返回的结果是第一个符合的结果
- 获取文本
text() #获取节点的文本,返回的结果是所有符合的结果,无需再使用遍历
html() #获取HTML文本,返回第一个符合的结果
- 区分
attr()、text()、html()有无参数的区别
attr(参数1) #获取节点的该属性(参数1)的属性值
attr(参数1,参数2) #把属性:参数1 的属性值改为(参数2)
例子:
li.attr('name') #获取li节点name属性的属性值
li.attr('name','link') #若存在name属性,则把name属性的属性值改为'link'
若不存在name属性,则添加属性name,其属性值为’link'
text()、html()无参数时是获取该节点内的纯文本和HTML文本,有参数是,则进行赋值
6.节点操作
addClass() #添加节点的class属性
removeClass() #移除节点的某个属性
7.伪类选择器
print(doc('li:first-child') #选取第一个li节点
例程(猫眼TOP100榜:文字加图片)
程序
import requests
import pyquery
import re
url = 'http://maoyan.com/board/4'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
html = requests.get(url, headers=headers).text
doc = pyquery.PyQuery(html)
contents = doc('.board-wrapper')
indexs = contents.find('.board-index').items()
names = contents.find('.name').items()
stars = contents.find('.star').items()
releasetimes = contents.find('.releasetime').items()
integers = contents.find('.integer').items()
fractions = contents.find('.fraction').items()
image_contents = contents('img[data-src^="http://"]') #获取data-src属性值以“http://"”开头的img节点
images = re.findall('data-src="(.*?)"', str(image_contents))#正则表达式匹配图片的链接 注意find()的第二个参数是str(image_contents)
for index, name, star, releasetime, integer, fraction, image in zip(indexs, names, stars, releasetimes, integers, fractions, images):
print(index.text(), name.text(), star.text()[3:], releasetime.text()[4:], str(integer.text())+str(fraction.text()))
images_data = requests.get(str(image)).content
with open(str(index.text())+str(name.text())+'.jpg', 'wb') as f:
f.write(images_data)
#以排名+电影名进行命名,注意使用的是index.text()和name.text()方法,index 和 name的数据类型是generator
结果:文字加图片保存到本地
1 霸王别姬 张国荣,张丰毅,巩俐 :1993-01-01(中国香港) 9.6
2 肖申克的救赎 蒂姆·罗宾斯,摩根·弗里曼,鲍勃·冈顿 :1994-10-14(美国) 9.5
3 罗马假日 格利高里·派克,奥黛丽·赫本,埃迪·艾伯特 :1953-09-02(美国) 9.1
4 这个杀手不太冷 让·雷诺,加里·奥德曼,娜塔莉·波特曼 :1994-09-14(法国) 9.5
5 教父 马龙·白兰度,阿尔·帕西诺,詹姆斯·肯恩 :1972-03-24(美国) 9.3
6 泰坦尼克号 莱昂纳多·迪卡普里奥,凯特·温丝莱特,比利·赞恩 :1998-04-03 9.5
7 龙猫 日高法子,坂本千夏,糸井重里 :1988-04-16(日本) 9.2
8 唐伯虎点秋香 周星驰,巩俐,郑佩佩 :1993-07-01(中国香港) 9.2
9 千与千寻 柊瑠美,入野自由,夏木真理 :2001-07-20(日本) 9.3
10 魂断蓝桥 费雯·丽,罗伯特·泰勒,露塞尔·沃特森 :1940-05-17(美国) 9.2
TIM截图20180813204549.jpg
网友评论