(二)PyQuery 知识点及应用(猫眼TOP100榜单:文字加

2018-08-13  本文已影响0人  机器视觉CV_有三言选

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,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知识

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
上一篇下一篇

猜你喜欢

热点阅读