ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python 爬虫(五):PyQuery 框架

2021-06-28 15:55:21  阅读:222  来源: 互联网

标签:PyQuery Python doc 爬虫 ul l2 print pyquery


 

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

PyQuery 是仿照 jQuery 实现的,语法与 jQuery 几乎完全相同,如果你熟悉 jQuery,又不想再记一套 BeautifulSoup (Python 爬虫(三):BeautifulSoup 库) 的调用方法,那么 PyQuery 是一个很好的选择。

1 准备工作

1.1 安装

使用如下终端命令安装

pip install pyquery

安装完成后导包

from pyquery import PyQuery as pq

1.2 初始化

传入字符串

  •  
from pyquery import PyQuery as pq
html = '''<html> <head> <title>Hello PyQuery</title> </head> <body> <ul id="container"> <li class="l1">l1</li> <li class="l2">l2</li> <li class="l3">l3</li> </ul> </body></html>'''doc = pq(html)print(type(doc))print(doc)

传入文件

  •  
from pyquery import PyQuery as pq
doc= pq(filename='p.html')print(type(doc))print(doc)

传入 lxml.etree

  •  
from pyquery import PyQuery as pqfrom lxml import etree
doc = pq(etree.fromstring('<html><title>Hello PyQuery</title></html>'))print(type(doc))print(doc)

传入 URL

  •  
from pyquery import PyQuery as pqdoc = pq('http://www.baidu.com')print(type(doc))print(doc)

2 快速上手

2.1 基本使用

获取元素

首先,我们使用 PyQuery 的 CSS 选择器获取指定元素。示例如下:

  •  
from pyquery import PyQuery as pq
html = '''<html> <head> <title>Hello PyQuery</title> </head> <body> <ul id="container"> <li class="l1">l1</li> <li class="l2">l2</li> <li class="l3">l3</li> </ul> </body></html>'''doc = pq(html)# 获取 ulul = doc('#container')# 获取 lili = doc('ul li')print(ul)print(li)

遍历元素

  •  
from pyquery import PyQuery as pq
html = '''<html> <head> <title>Hello PyQuery</title> </head> <body> <ul id="container"> <li class="l1">l1</li> <li class="l2">l2</li> <li class="l3">l3</li> </ul> </body></html>'''doc = pq(html)# 遍历 lilis =doc('li').items()for li in lis: print(li)

存在多个相同元素时,获取指定元素

  •  
from pyquery import PyQuery as pq
html = '''<html> <head> <title>Hello PyQuery</title> </head> <body> <ul id="container"> <li class="l1">l1</li> <li class="l2">l2</li> <li class="l3">l3</li> </ul> </body></html>'''doc = pq(html)lis =doc('li').items()# 获取第二个 lil2 = list(lis)[1]print(l2)

获取父、子、兄弟元素

PyQuery 可以通过方法直接获取指定元素的父、子、兄弟元素。示例如下:

  •  
from pyquery import PyQuery as pq
html = '''<html> <head> <title>Hello PyQuery</title> </head> <body>
<ul></ul> <ul id="container"> <li class="l1">l1</li> <li class="l2">l2</li> <li class="l3">l3</li> </ul> <ul></ul> </body></html>'''doc = pq(html)ul = doc('#container')l2 = doc('#container .l2')# 获取 ul 父元素ul_parent = ul.parent()# 获取 ul 子元素ul_child = ul.children()# 获取第二个 li 兄弟元素l2_sib = l2.siblings()print(ul_parent)print(ul_child)print(l2_sib)

获取属性、文本信息

  •  
from pyquery import PyQuery as pq
html = '''<html> <head> <title name='title'>Hello PyQuery</title> </head></html>'''doc = pq(html)title =doc('title')# 获取 name 属性print(title.attr('name'))# 获取 title 标签文本信息print(title.text())

获取 html

  •  
from pyquery import PyQuery as pq
html = '''<html> <head> <title>Hello PyQuery</title> </head> <body> <ul id="container"> <li class="l1">l1</li> <li class="l2">l2</li> <li class="l3">l3</li> </ul> </body></html>'''doc = pq(html)# 获取 ul 中 htmlul =doc('ul')print(ul.html())

2.2 伪类选择器

伪类可以根据一个元素的特征进行分类,下面通过示例了解下伪类选择器的使用。

  •  
from pyquery import PyQuery as pq
html = '''<html> <head> <title>Hello PyQuery</title> </head> <body> <ul id="container"> <li class="l1">l1</li> <li class="l2">l2</li> <li class="l3">l3last</li> </ul> </body></html>'''doc = pq(html)# 设置起始位置lis = doc('li:gt(-1)')# 获取第一个 lifli = doc('li:first-child')# 获取最后一个 lilli = doc('li:last-child')# 获取指定 lil2 = doc('li:nth-child(2)')# 获取包含 last 的 licli = doc('li:contains("last")')print(lis)print(fli)print(lli)print(l2)print(cli)

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

标签:PyQuery,Python,doc,爬虫,ul,l2,print,pyquery
来源: https://blog.51cto.com/u_15283574/2951488

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有