澳门新萄京python3深入分析库pyquery的入木八分讲授

澳门新萄京python3深入分析库pyquery的入木八分讲授

Python互联网爬虫神器PyQuery的主干使用教程,pythonpyquery

前言

pyquery库是jQuery的Python完毕,能够以jQuery的语法来操作分析 HTML
文书档案,易用性和分析速度都很好,和它基本上的还大概有BeautifulSoup,都以用来分析的。比较BeautifulSoup完美翔实的文档,即使PyQuery库的文档弱爆了,
不过应用起来依然得以的,某些地点用起来异常低价轻巧。

安装

至于PyQuery的设置能够参照他事他说加以考察那篇作品:

PyQuery库官方文书档案

  • 开头化为PyQuery对象
  • 常用的CCS选择器
  • 伪类选用器
  • 寻找标签
  • 收获标签音讯

初阶化为PyQuery对象

html = """
<html lang="en">
 <head>
 简单好用的
 <title>PyQuery</title>
 </head>
 <body>
 <ul id="container">
  <li class="object-1">Python</li>
  <li class="object-2">大法</li>
  <li class="object-3">好</li>
 </ul>
 </body>
</html>
"""

一定于BeautifulSoup库的初识化方法,将html转化为BeautifulSoup对象。

bsObj = BeautifulSoup(html, 'html.parser')

PyQuery库也要有友好的起先化。

1.1 将字符串最初化

from pyquery import PyQuery as pq
#初始化为PyQuery对象
doc = pq(html)
print(type(doc))
print(doc)

返回

<class 'pyquery.pyquery.PyQuery'>

<html lang="en">
 <head>
 <title>PyQuery学习</title>
 </head>
 <body>
 <ul id="container">
  <li class="object-1"/>
  <li class="object-2"/>
  <li class="object-3"/>
 </ul>
 </body>
</html>

1.2 将html文件开始化

#filename参数为html文件路径
test_html = pq(filename = 'test.html')
print(type(test_html))
print(test_html)

返回

<class 'pyquery.pyquery.PyQuery'><html lang="en">
 <head>
 <title>PyQuery学习</title>
 </head>
 <body>
 <ul id="container">
  <li class="object-1"/>
  <li class="object-2"/>
  <li class="object-3"/>
 </ul>
 </body>
</html>

1.3 对网站响应举办先河化

response = pq(url = 'https://www.baidu.com')
print(type(response))
print(response)

返回

<class 'pyquery.pyquery.PyQuery'>

<html> <head><meta http-equiv="content-type" content="text/html;charset=utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=Edge"/><meta content="always" name="referrer"/><link rel="stylesheet" type="text/css" href="https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css" rel="external nofollow" /><title>ç�¾åº¦ä¸�ä¸�ï¼�ä½ å°±ç�¥é��</title></head> <body link="#0000cc"> <div id="wrapper"> <div id="head"> <div class="head_wrapper"> <div class="s_form"> <div class="s_form_wrapper"> <div id="lg"> <img hidefocus="true" src="//www.baidu.com/img/bd_logo1.png" width="270" height="129"/> </div> <form id="form" name="f" action="//www.baidu.com/s" class="fm"> <input type="hidden" name="bdorz_come" value="1"/> <input type="hidden" name="ie" value="utf-8"/> <input type="hidden" name="f" value="8"/> <input type="hidden" name="rsv_bp" value="1"/> <input type="hidden" name="rsv_idx" value="1"/> <input type="hidden" name="tn" value="baidu"/><input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off" autofocus="autofocus"/><input type="submit" id="su" value="ç�¾åº¦ä¸�ä¸�" class="bg s_btn" autofocus=""/> </form> </div> </div> <div id="u1"> <a href="http://news.baidu.com" rel="external nofollow" name="tj_trnews" class="mnav">æ�°é�»</a> <a href="https://www.hao123.com" rel="external nofollow" name="tj_trhao123" class="mnav">hao123</a> <a href="http://map.baidu.com" rel="external nofollow" name="tj_trmap" class="mnav">å�°å�¾</a> <a href="http://v.baidu.com" rel="external nofollow" name="tj_trvideo" class="mnav">è§�é¢�</a> <a href="http://tieba.baidu.com" rel="external nofollow" name="tj_trtieba" class="mnav">è´´å�§</a> <noscript> <a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1" rel="external nofollow" name="tj_login" class="lb">ç�»å½�</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+%20encodeURIComponent(window.location.href+%20(window.location.search%20===%20" rel="external nofollow" " ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">ç�»å½�</a>');

��产�

二、常用的CCS选择器

打印id为container的标签

print(doc('#container'))
print(type(doc('#container')))

返回

<ul id="container">
 <li class="object-1"/>
 <li class="object-2"/>
 <li class="object-3"/>
</ul>

<class 'pyquery.pyquery.PyQuery'>

打印class为object-1的标签

print(doc('.object-1'))

返回

<li class="object-1"/>

打字与印刷标签字称叫body的竹签

print(doc('body'))

返回

<body>
 <ul id="container">
 <li class="object-1"/>
 <li class="object-2"/>
 <li class="object-3"/>
 </ul>
</body>

三种css选拔器使用

print(doc('html #container'))

返回

<ul id="container">
 <li class="object-1"/>
 <li class="object-2"/>
 <li class="object-3"/>
</ul>

三、伪类接纳器

伪类nth

print(pseudo_doc('li:nth-child(2)'))
#打印第一个li标签
print(pseudo_doc('li:first-child'))
#打印最后一个标签
print(pseudo_doc('li:last-child'))

返回

<li class="object-2">大法</li>
<li class="object-1">Python</li>
<li class="object-6">好玩</li>

contains

#找到含有Python的li标签
print(pseudo_doc("li:contains('Python')"))
#找到含有好的li标签
print(pseudo_doc("li:contains('好')"))

返回

<li class="object-1">Python</li>
<li class="object-3">好</li>
<li class="object-4">好</li>
<li class="object-6">好玩</li> 

四、查找标签

遵照原则在Pyquery对象中查找符合条件的竹签,类似于BeautifulSoup中的find方法。

打印id=container的标签

print(doc.find('#container'))

返回

<ul id="container">
 <li class="object-1"/>
 <li class="object-2"/>
 <li class="object-3"/>
</ul>
print(doc.find('li'))

返回

<li class="object-1"/>
<li class="object-2"/>
<li class="object-3"/>

4.2 子辈标签-children方法

#id=container的标签的子辈标签
container = doc.find('#container')
print(container.children())

返回

<li class="object-1"/>
<li class="object-2"/>
<li class="object-3"/>

4.3 父辈标签-parent方法

object_2 = doc.find('.object-2')
print(object_2.parent())

返回

<ul id="container">
 <li class="object-1"/>
 <li class="object-2"/>
 <li class="object-3"/>
</ul>

4.4 兄弟标签-siblings方法

object_2 = doc.find('.object-2')
print(object_2.siblings())

返回

<li class="object-1"/>
<li class="object-3"/>

五、获取标签的音讯

定位到指标标签后,我们供给标签内部的文本恐怕属性值,那时候须要开展提取文本或属性值操作

5.1 标签属性值的提取

.attr() 传入 标签的属性名,再次回到属性值

object_2 = doc.find('.object-2')
print(object_2.attr('class'))

返回

object-2

5.2 标签内的公文

.text()

html_text = """
<html lang="en">
 <head>
  简单好用的
  <title>PyQuery</title>
 </head>
 <body>
  <ul id="container">
   Hello World!
   <li class="object-1">Python</li>
   <li class="object-2">大法</li>
   <li class="object-3">好</li>
  </ul>
 </body>
</html>
"""
docs = pq(html_text)
print(docs.text())

返回

简单好用的 PyQuery Hello World! Python 大法 好

object_1 = docs.find('.object-1')
print(object_1.text())
container = docs.find('#container')
print(container.text())

返回

Python

Hello World! Python 大法 好

tips:若是本人只想赢得Hello
World这么些,不想赢得任何的公文,能够使用remove方法将li标签去掉,然后再使用text方法

container = docs.find('#container')
container.remove('li')
print(container.text())

返回

Hello World!

pyquery一些自定义的用法

拜谒网站

PyQuery与BeautifulSoup相比,大家会发现PyQuery能够对网址发起呼吁。 比方

from pyquery import PyQuery
PyQuery(url = 'https://www.baidu.com')

opener参数

那是PyQuery对百度网站举办呼吁,并将呼吁重临的响应数据管理为PyQuery对象。一般pyquery库会暗中认可调用urllib库,固然想选用selenium恐怕requests库,能够自定义PyQuery的opener参数。

opener参数功效是报告pyquery用什么样伏乞库对网站发起呼吁。常见的伸手库如urllib、requests、selenium。这里大家自定义三个selenium的opener。

from pyquery import PyQuery
from selenium.webdriver import PhantomJS
#用selenium访问url
def selenium_opener(url):
 #我没有将Phantomjs放到环境变量,所以每次用都要放上路径
 driver = PhantomJS(executable_path = 'phantomjs的路径')
 driver.get(url)
 html = driver.page_source
 driver.quit()
 return html
#注意,使用时opener参数是函数名,没有括号的!
PyQuery(url='https://www.baidu.com/', opener=selenium_opener)

那儿大家就会对PyQuery对象开展操作,提取有用的音讯。具体请看上次的享受,假若想询问越来越多的意义,pyquery文书档案写的有一点点详细,辛亏着力跟jQuery作用吻合,大家只要想用好pyquery,必要查阅jQuery文书档案。

cookies、headers

在requests用法中,一般为了访谈网站尤其真实,模仿成浏览器。一般大家须求传入headers,要求的时候还索要传入cookies参数。而pyquery库就有那意义,也能矫揉造作浏览器。

from pyquery import PyQuery
cookies = {'Cookie':'你的cookie'}
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}
PyQuery(url='https://www.baidu.com/',headers=headers,cookies=cookies)

让你的selenium带上pyquery功能

让driver访问的网站获得的网页间接造成PyQuery对象,更便于提取数额

from pyquery import PyQuery
from selenium.webdriver import PhantomJS
class Browser(PhantomJS):
 @property 
 def dom(self):
  return PyQuery(self.page_source)"""
这部分property是装饰器,需要知道@property下面紧跟的函数,实现了类的属性功能。
这里browser.dom,就是browser的dom属性。
"""
browser = Browser(executable_path='phantomjs的路径')
browser.get(url='https://www.baidu.com/')
print(type(browser.dom))

返回

<class 'pyquery.pyquery.PyQuery'>

总结

如上就是那篇小说的全体内容了,希望本文的从头到尾的经过对大家的上学或然工作富有一定的参阅学习价值,即使有疑点我们能够留言交换,感激我们对帮客之家的扶助。

前言 pyquery库是jQuery的Python完毕,能够以jQuery的语法来操作分析 HTML
文档,易用性息争…

此时大家就能够对PyQuery对象开展操作,提取有用的信息。具体请看上次的享用,假若想询问越来越多的机能,pyquery文书档案写的多少详细,幸而基本跟jQuery功效吻合,大家要是想用好pyquery,须求查阅jQuery文档。

2.2传入URL

开首化的参数不仅可以够以字符串的款式传递,还能流传网页的U陆风X8L,在此处只需求钦点参数为url就可以。

>>> from pyquery import PyQuery as pq
>>> doc=pq(url="http://www.baidu.com")
>>> print(doc("head"))#输出head标签
<head><meta http-equiv="content-type" content="text/html;charset=utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=Edge"/><meta content="always" name="referrer"/><link rel="stylesheet" type="text/css" href="http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css"/><title>ç�¾åº¦ä¸�ä¸�ï¼�ä½ å°±ç�¥é��</title></head> 

与上述同类的话PyQuery会首先乞求这几个UCR-VL,然后用收获的HTML内容完毕伊始化,其实就约等于我们用网页的源代码以字符串的情势传递给PyQuery来初步化。

它与下部的作用是一致的:

>>> from pyquery import PyQuery as pq
>>> import requests
>>> doc=pq(requests.get("http://www.baidu.com").text)
>>> print(doc("head"))
<head><meta http-equiv="content-type" content="text/html;charset=utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=Edge"/><meta content="always" name="referrer"/><link rel="stylesheet" type="text/css" href="http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css"/><title>ç�¾åº¦ä¸�ä¸�ï¼�ä½ å°±ç�¥é��</title></head> 
>>> 

您大概感兴趣的篇章:

拜望网站

7.1addClass、removeClass

第一大家选中了第八个li节点,然后调用了removeClass()方法,将li的active这些class移除,后来又调用了addClass()方法,又将class增添回来,每推行二回操作,就打字与印刷输出一下当下li节点的内容。

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.item-0.active')
>>> print(li)
<li class="item-0 active"><a href="link3.html">third item</a></li>

>>> li.removeClass('active')#[<li.item-0>]
>>> print(li)
<li class="item-0"><a href="link3.html">third item</a></li>

>>> li.addClass('active')#[<li.item-0.active>]
>>> print(li)
<li class="item-0 active"><a href="link3.html">third item</a></li>

能够看出一共进行了三次输出,第壹次输出li标签的active这么些class被移除了,首次class又加多回来了。
由此说笔者们addClass()、removeClass()那一个办法能够动态地改造节点的class属性。

1、pyquery安装

pip方式安装:

$pip install pyquery

#它依赖cssselect和lxml包
pyquery==1.4.0
 - cssselect [required: >0.7.9, installed: 1.0.3] #CSS选择器并将它转换为XPath表达式
 - lxml [required: >=2.1, installed: 4.2.2] #处理xml和html解析库

注解安装:

In [1]: import pyquery

In [2]: pyquery.text
Out[2]: <module 'pyquery.text' from '/root/pp1/.venv/lib/python3.6/site-packages/pyquery/text.py'>
<li class="object-1"/>
<li class="object-3"/>

1.1 pyquery库的设置格局:

在cmd输入:pip install pyquery

5、遍历

对此pyquery的选项结果大概是八个字节,也只怕是单个节点,类型都是PyQuery类型,它并未有回到列表等格局,对于当个节点大家可指直接打印输出或许直接调换到字符串,而对于两个节点的结果,大家须要遍历来取得具有节点能够接纳items()方法,它会重回一个生成器,循环得到的各种节点类型依旧是PyQuery类型,所以大家能够承继方法来抉择节点或质量,内容等

lis=doc('li').items()
for i in lis:
 print(i('a')) #继续获取节点下的子节点

返回

7.2.1attr

道理当然是那样的除了操作class那天性情,也许有attr()方法来特别针对属性举行操作

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.item-0.active')
>>> print(li)
<li class="item-0 active"><a href="link3.html">third item</a></li>

>>> li.attr('name', 'link')#[<li.item-0.active>]
>>> print(li)
<li class="item-0 active" name="link"><a href="link3.html">third item</a></li>

在此间我们首先入选了li标签,然后调用attr()方法来修改/扩充属性,第二个参数为属性名,第贰个参数为属性值.如原来存在,则修改属性值,如官样文章,则扩张.

4、查找节点

PyQuery使用查询函数来询问节点,同jQuery中的函数用法毫无二致

(1)查找子节点和子孙节点

选拔find()方法赢得子孙节点,children()获取子节点,使用上述的HTML代码测验

from pyquery import PyQuery as pq
import requests

doc=pq(html,parser='html')
print('find:',doc.find('a'))
print('children:',doc('li').children('a'))

(2)获取父节点和祖辈节点

parent()方法获得父节点,parents()获取祖先节点

doc(.list).parent()
doc(.list).parents()

(3)获取兄弟节点

siblings()方法用来博取兄弟节点,能够嵌套使用,传入CSS选取器就可以继续同盟

doc('.list .item-0 .active').siblings('.active')

返回

4.2.2parents()方法

以下案例:不过只要大家想获得某些祖先节点如何是好吧?能够用parents()方法。

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <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">third item</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>
 </div>
'''

parents查找全体的老爸节点,重回八个结果.

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> items = doc('.list')
>>> parents = items.parents()
>>> print(type(parents))
<class 'pyquery.pyquery.PyQuery'>
>>> print(parents)
<div class="wrap">
    <div id="container">
        <ul class="list">
             <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">third item</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>
 </div><div id="container">
        <ul class="list">
             <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">third item</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>

parents可进行重复筛选

>>> parent = items.parents('.wrap')
>>> print(parent)
<div class="wrap">
    <div id="container">
        <ul class="list">
             <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">third item</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>
 </div>
>>> 

9、实例应用

 抓取

#!/usr/bin/env python
#coding:utf-8
import requests
from requests.exceptions import RequestException
from pyquery import PyQuery as pq
from PIL import Image
from PIL import ImageFile
from io import BytesIO
import time
from multiprocessing import Pool,freeze_support
ImageFile.LOAD_TRUNCATED_IMAGES = True

headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'
,'Referer':'http://www.mzitu.com'
}

img_headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'
,'Referer':'http://i.meizitu.net'
}
#保持会话请求
sesion=requests.Session()

#获取首页所有URL并返回列表
def get_url(url):
 list_url = []
 try:
  html=sesion.get(url,headers=headers).text
  doc=pq(html,parser='html')
  url_path=doc('#pins > li').children('a')
  for i in url_path.items():
   list_url.append(i.attr('href'))
 except RequestException as e:
  print('get_url_RequestException:',e)
 except Exception as e:
  print('get_url_Exception:',e)
 return list_url

#组合首页中每个地址的图片分页返回列表
def list_get_pages(list_url):
 list_url_fen=[]
 try:
  for i in list_url:
   doc_children = pq(sesion.get(i,headers=headers).text,parser='html')
   img_number = doc_children('body > div.main > div.content > div.pagenavi > a:nth-child(7) > span').text()
   number=int(img_number.strip())
   for j in range(1,number+1):
    list_url_fen.append(i+'/'+str(j))
 except ValueError as e:
  print('list_get_pages_ValueError:',e)
 except RequestException as e:
  print('list_get_pages_RequestException',e)
 except Exception as e:
  print('list_get_pages_Exception:',e)
 return list_url_fen

#获取image地址并下载图片
def get_image(url):
 im_path=''
 try:
  html=sesion.get(url, headers=headers).text
  doc=pq(html,parser='html')
  im_path=doc('.main-image a img').attr('src')
  image_names = ''.join(im_path.split('/')[-3:])
  image_path = 'D:\images\\' + image_names
  with open('img_url.txt','a') as f:
   f.write(im_path + '\n')
  r=requests.get(im_path,headers=img_headers)
  b=BytesIO(r.content)
  i=Image.open(b)
  i.save(image_path)
  b.close()
  i.close()
  #print('下载图片:{}成功!'.format(image_names))
 except RequestException as e:
  print('RequestException:',e)
 except OSError as e:
  print('OSError:',e)
 except Exception as e: #必须捕获所有异常,运行中有一些链接地址不符合抓取规律,需要捕获异常使程序正常运行
  print('Exception:',e)
 return im_path


#主调用函数
def main(item):
 url1='http://www.mzitu.com/page/{}'.format(item) #分页地址
 print('开始下载地址:{}'.format(url1))
 获取首页链接地址
 html=get_url(url1)
 #获取分页链接地址
 list_fenurl = list_get_pages(html)
 #根据分页链接地址获取图片并下载
 for i in list_fenurl:
  get_image(i)
 return len(list_fenurl) #统计下载数

if __name__ == '__main__':
 freeze_support() #windows下进程调用时必须添加
 pool=Pool() #创建进程池
 start=time.time()
 count=pool.map(main,[i for i in range(1,185)]) #多进程运行翻页主页
 print(sum(count),count) #获取总的下载数
 end=time.time()
 data=time.strftime('%M:%S',time.localtime(end-start)) #获取程序运行时间
 print('程序运行时间:{}分{}秒'.format(*data.split(':')))

#学习阶段,代码写得通用性很差,以后改进!
#运行结果
#会有几个报错都忽略了是获取文件名时的分割问题和在图片很少的情况下导致获取不到单分页图片的数目,先忽略以后有时间再改正
#Exception: 'NoneType' object has no attribute 'split'
#list_get_pages_ValueError: invalid literal for int() with base 10: '下一页»'

开始下载地址:http://www.mzitu.com/page/137
OSError: image file is truncated (22 bytes not processed)
开始下载地址:http://www.mzitu.com/page/138

程序运行时间:28分27秒

进程完成,退出码 0

pyquery相关链接:

GitHub:
(本地下载)

PyPI:

合丹麦语档:

总结

如上就是那篇小说的全部内容了,希望本文的开始和结果对我们的上学大概干活有所自然的参阅学习价值,假如有疑点我们能够留言调换,谢谢大家对剧本之家的帮助。

返回

5.遍历

大家刚刚能够观测到,PyQuery的精选结果恐怕是四个节点,恐怕是单个节点,类型都以PyQuery类型,并未回到像BeautifulSoup一样的列表。

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <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">third item</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>
 </div>
'''

pyquery是三个像样jquery的python库,它完结能够在xml文档中进行jQuery查询,pyquery使用lxml解析器进行高效在xml和html文书档案上操作,它提供了和jQuery类似的语法来分析HTML文书档案,协理CSS接纳器,使用极度实惠

contains

4.1子元素

查找子节点须要用到find()方法,传入的参数是CSS选用器,我们照旧以上边的HTML为例。能够动用层层嵌套的方式.

'''
>>> from pyquery import PyQuery as pq
>>> doc=pq(html)
>>> items=doc(".list")
>>> print(type(items))
<class 'pyquery.pyquery.PyQuery'>

>>> print(items)
<ul class="list">
         <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">third item</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>

>>> list=items.find("li")
>>> print(type(list))
<class 'pyquery.pyquery.PyQuery'>
>>> print(list)
<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">third item</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>

第一大家选用了class为list的节点,然后大家调用了find()方法,传入了CSS采取器,选择其里面包车型的士li节点,最终都打字与印刷输出就能够观察到对应的查询结果,能够开掘find()方法会将符合条件的具有节点接纳出来,结果的种类是PyQuery类型。

实际find()的物色范围是节点的有所子孙节点,而借使大家只想查找子节点,那能够用children()方法。

>>> list = items.children()
>>> print(type(list))
<class 'pyquery.pyquery.PyQuery'>
>>> print(list)
<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">third item</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>

倘使要筛选全数子节点中符合条件的节点,举例我们想筛选出子节点中class为active的节点,能够向children()方法传入CSS选拔器.active

>>> list = items.children('.active')
>>> print(list)
<li class="item-0 active"><a href="link3.html">third item</a></li>
         <li class="item-1 active"><a href="link4.html">fourth item</a></li>

前言

伪类nth

6.获取音讯

领取到节点之后,大家的末梢目标自然是领取节点所蕴藏的音讯了,相比较主要的新闻有两类,一是收获属性,二是猎取文本,下面大家独家开展表明。

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <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">third item</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>
 </div>
'''

6、获撤销息

attr()方法用来获取属性,如再次回到的结果有四个时得以调用items()方法来遍历获取

doc('.item-0.active a').attr('href') #多属性值中间不能有空格

text()方法用来博取文本内容,它只回去内部的公文消息不包蕴HTML文本内容,假若想再次来到包蕴HTML的文件内容能够行使html()方法,假诺结果有七个,text()方法会方法全数节点的公文信息内容并将它们拼接用空格分开重回字符串内容,html()方法只会再次来到第一个节点的HTML文本,假如要博取具备就须求动用items()方法来遍历获取了

from pyquery import PyQuery as pq
html='''
<div id="container">
 <ul class="list">
   <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">third item</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>
'''
doc=pq(html,parser='html')
print('text:',doc('li').text()) #获取li节点下的所有文本信息
lis=doc('li').items()
for i in lis:
 print('html:',i.html()) #获取所有li节点下的HTML文本

#
text: first item second item third item fourth item fifth item
html: first item
html: <a href="link2.html">second item</a>
html: <a href="link3.html">third item</a>
html: <a href="link4.html">fourth item</a>
html: <a href="link5.html">fifth item</a>

4.2 子辈标签-children方法

7.DOM操作

PyQuery提供了一雨后鞭笋措施来对节点进行动态修改操作,比如为有个别节点增添多个class,移除某些节点等等,这一个操作有的时候候会为领取新闻带来比较大的有利。

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <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">third item</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>
 </div>
'''

2、pyquery对象初阶化

pyquery首先须求传入HTML文本来开端化叁个pyquery对象,它的开始化方式有种种,如直接传入字符串,传入UCRUISERL也许传播文件名

(1)字符串初叶化

from pyquery import PyQuery as pq

html='''
<div id="wenzhangziti" class="article 389862"><p>人生是一条没有尽头的路,不要留恋逝去的梦,把命运掌握在自己手中,让我们来掌握自己的命运,别让别人的干扰与诱惑,别让功名与利禄,来打翻我们这坛陈酿已久的命运之酒!</p>
</div>
'''
doc=pq(html) #初始化并创建pyquery对象
print(type(doc))
print(doc('p').text())

#
<class 'pyquery.pyquery.PyQuery'>
人生是一条没有尽头的路,不要留恋逝去的梦,把命运掌握在自己手中,让我们来掌握自己的命运,别让别人的干扰与诱惑,别让功名与利禄,来打翻我们这坛陈酿已久的命运之酒!

(2)URL初始化

from pyquery import PyQuery as pq

doc=pq(url='https://www.cnblogs.com/zhangxinqi/p/9218395.html')
print(type(doc))
print(doc('title'))

#
<class 'pyquery.pyquery.PyQuery'>
<title>python3解析库BeautifulSoup4 - Py.qi - 博客园</title>

PyQuery能够从url加载贰个html文书档案,之际上是暗许意况下调用python的urllib库去乞请响应,假使requests已设置的话它将采纳requests来呼吁响应,这大家就足以采用request的呼吁参数来组织诉求了,实际央求如下:

from pyquery import PyQuery as pq
import requests

doc=pq(requests.get(url='https://www.cnblogs.com/zhangxinqi/p/9218395.html').text)
print(type(doc))
print(doc('title'))

#输出同上一样
<class 'pyquery.pyquery.PyQuery'>
<title>python3解析库BeautifulSoup4 - Py.qi - 博客园</title>

(3)通过文件早先化

经过本地的HTML文件来布局PyQuery对象

from pyquery import PyQuery as pq

doc=pq(filename='demo.html',parser='html')
#doc=pq(open('demo.html','r',encoding='utf-8').read(),parser='html') #注意:在读取有中文的HTML文件时,请使用此方法,否则会报解码错误
print(type(doc))
print(doc('p'))

前言

1.pyquery库的刺探

pyquery库是jQuery的Python达成,可以以jQuery的语法来操作分析 HTML
文书档案,易用性和剖析速度都很好。

澳门新萄京 1

3、CSS选择器

在选取质量选择器中,使用性质采纳特定的竹签,标签和CSS标志必需引用为字符串,它会过滤筛选符合条件的节点打字与印刷输出,重临的是八个PyQuery类型对象

from pyquery import PyQuery as pq
import requests
html='''
<div id="container">
 <ul class="list">
  <li class="item-0">first item</li>
  <li class="item-1"><a href="link2.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >second item</a></li>
  <li class="item-0 active"><a href="link3.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >third item</a></li>
  <li class="item-1 active"><a href="link4.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >fourth item</a></li>
  <li class="item-0"><a href="link5.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >fifth item</a></li>
 </ul>
 </div>
'''
doc=pq(html,parser='html')
print(doc('#container .list .item-0 a'))
print(doc('.list .item-1'))

#
<a href="link3.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >third item</a><a href="link5.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >fifth item</a>
<li class="item-1"><a href="link2.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >second item</a></li>
  <li class="item-1 active"><a href="link4.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >fourth item</a></li>

返回

6.1收获属性

领到到有些PyQuery类型的节点之后,我们能够调用attr()方法来收获属性,有二种艺术得以拓宽获取,如下:

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> a = doc('.item-0.active a')#这里有个空格,则选择里面的标签
>>> print(a)
<a href="link3.html">third item</a>
>>> print(a.attr('href'))#方法一
link3.html
>>> print(a.attr.href)#方法二
link3.html

注意:

8、伪类选取器

CSS选择器之所以庞大,是因为它扶助八种多种的伪类选拔器,如:选取第一个节点,最终叁个节点,奇偶数节点等。

#!/usr/bin/env python
#coding:utf-8
from pyquery import PyQuery as pq

html='''
<div id="container">
 <ul class="list">
   <li id="1">first item</li>
   <li class="item-1"><a href="link2.html">second item</a></li>
   <li class="item-2 active"><a href="link3.html">third item</a></li>
   <li class="item-3 active"><a href="link4.html">fourth item</a></li>
   <li class="item-4"><a href="link5.html">fifth item</a></li>
  </ul>
  <div><input type="text" value="username"/></div> 
</div>
'''
doc=pq(html,parser='html')
print('第一个li节点:',doc('li:first-child')) #第一个li节点
print('最后一个li节点:',doc('li:last_child')) #最后一个li节点
print('第二个li节点:',doc('li:nth-child(2)')) #第二个li节点
print('第三个之后的所有li节点:',doc('li:gt(2)')) #第三个之后的所有li节点
print('偶数的所有li节点:',doc('li:nth-child(2n)')) #偶数的所有li节点
print('包含文本内容的节点:',doc('li:contains(second)')) #包含文本内容的节点
print('索引第一个节点:',doc('li:eq(0)'))
print('奇数节点:',doc('li:even'))
print('偶数节点:',doc('li:odd'))

#
第一个li节点: <li id="1">first item</li>

最后一个li节点: <li class="item-4"><a href="link5.html">fifth item</a></li>

第二个li节点: <li class="item-1"><a href="link2.html">second item</a></li>

第三个之后的所有li节点: <li class="item-3 active"><a href="link4.html">fourth item</a></li>
   <li class="item-4"><a href="link5.html">fifth item</a></li>

偶数的所有li节点: <li class="item-1"><a href="link2.html">second item</a></li>
   <li class="item-3 active"><a href="link4.html">fourth item</a></li>

包含文本内容的节点: <li class="item-1"><a href="link2.html">second item</a></li>

索引第一个节点: <li id="1">first item</li>

奇数节点: <li id="1">first item</li>
   <li class="item-2 active"><a href="link3.html">third item</a></li>
   <li class="item-4"><a href="link5.html">fifth item</a></li>

偶数节点: <li class="item-1"><a href="link2.html">second item</a></li>
   <li class="item-3 active"><a href="link4.html">fourth item</a></li>

越来越多伪类参照他事他说加以考察:

越来越多css选择器参谋:

打字与印刷标签字为body的竹签

5.2多少个因素

正如案例:

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> lis=doc("li").items()
>>> print(type(list))
<class 'pyquery.pyquery.PyQuery'>
>>> for li in lis:
    print(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">third item</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>

7、节点操作

pyquery提供了一密密麻麻措施来对节点开展动态修改,如增加二个class,移除有些节点,修改某些属性的值

addClass()增加Class,removeClass()删除Class

attr()增添属性和值,text()增Gavin本内容,html()扩展HTML文本,remove()移除

from pyquery import PyQuery as pq
import requests
html='''
<div id="container">
 <ul class="list">
   <li id="1">first item</li>
   <li class="item-1"><a href="link2.html">second item</a></li>
   <li class="item-2 active"><a href="link3.html">third item</a></li>
   <li class="item-3 active"><a href="link4.html">fourth item</a></li>
   <li class="item-4"><a href="link5.html">fifth item</a></li>
  </ul>
 </div>
'''
doc=pq(html,parser='html')
print(doc('#1'))
print(doc('#1').add_class('myclass')) #增加Class
print(doc('.item-1').remove_class('item-1')) #删除Class
print(doc('#1').attr('name','link')) #添加属性name=link
print(doc('#1').text('hello world')) #添加文本
print(doc('#1').html('changed item')) #添加HTML文本
print(doc('.item-2.active a').remove('span')) #删除节点

#
<li id="1">first item</li>

<li id="1" class="myclass">first item</li>

<li class=""><a href="link2.html">second item</a></li>

<li id="1" class="myclass" name="link">first item</li>

<li id="1" class="myclass" name="link">hello world</li>

<li id="1" class="myclass" name="link">changed item</li>
<a href="link3.html"/>

after()在节点后增添值

before()在节点在此之前插入值

append()将值增添到每种节点

contents()重返文本节点内容

empty()删除节点内容

remove_attr()删除属性

val()设置或获得属性值

另外还应该有非常多节点操作方法,它们和jQuery的用法完全一致,详细请参见:

print(doc('#container'))
print(type(doc('#container')))

4.2父元素

from pyquery import PyQuery
from selenium.webdriver import PhantomJS
class Browser(PhantomJS):
 @property 
 def dom(self):
  return PyQuery(self.page_source)"""
这部分property是装饰器,需要知道@property下面紧跟的函数,实现了类的属性功能。
这里browser.dom,就是browser的dom属性。
"""
browser = Browser(executable_path='phantomjs的路径')
browser.get(url='https://www.baidu.com/')
print(type(browser.dom))

4.查找元素

上边我们介绍一些常用的问答函数,那一个函数和jQuery中的函数用法也完全同样。

html = '''
<div id="container">
    <ul class="list">
         <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">third item</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>
'''

打印id为container的标签

7.2.2css
>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.item-0.active')
>>> print(li)
<li class="item-0 active"><a href="link3.html">third item</a></li>

>>> li.css('font-size', '14px')#[<li.item-0.active>]
>>> print(li)
<li class="item-0 active" name="link" style="font-size: 14px"><a href="link3.html">third item</a></li>

返回

6.4拿走属性/文本/HTML总括

在意:这里同样有四个标题,借使大家选中的结果是两个节点,text()或html()会重临什么内容?

#filename参数为html文件路径
test_html = pq(filename = 'test.html')
print(type(test_html))
print(test_html)

5.1单个成分

对此单个节点的话,我们得以一贯打字与印刷输出,也可直接转成字符串。

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.item-0.active')
>>> print(li)
<li class="item-0 active"><a href="link3.html">third item</a></li>
<class 'pyquery.pyquery.PyQuery'>

<html> <head><meta http-equiv="content-type" content="text/html;charset=utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=Edge"/><meta content="always" name="referrer"/><link rel="stylesheet" type="text/css" href="https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css" rel="external nofollow" /><title>ç�¾åº¦ä¸�ä¸�ï¼�ä½ å°±ç�¥é��</title></head> <body link="#0000cc"> <div id="wrapper"> <div id="head"> <div class="head_wrapper"> <div class="s_form"> <div class="s_form_wrapper"> <div id="lg"> <img hidefocus="true" src="//www.baidu.com/img/bd_logo1.png" width="270" height="129"/> </div> <form id="form" name="f" action="//www.baidu.com/s" class="fm"> <input type="hidden" name="bdorz_come" value="1"/> <input type="hidden" name="ie" value="utf-8"/> <input type="hidden" name="f" value="8"/> <input type="hidden" name="rsv_bp" value="1"/> <input type="hidden" name="rsv_idx" value="1"/> <input type="hidden" name="tn" value="baidu"/><input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off" autofocus="autofocus"/><input type="submit" id="su" value="ç�¾åº¦ä¸�ä¸�" class="bg s_btn" autofocus=""/> </form> </div> </div> <div id="u1"> <a href="http://news.baidu.com" rel="external nofollow" name="tj_trnews" class="mnav">æ�°é�»</a> <a href="https://www.hao123.com" rel="external nofollow" name="tj_trhao123" class="mnav">hao123</a> <a href="http://map.baidu.com" rel="external nofollow" name="tj_trmap" class="mnav">å�°å�¾</a> <a href="http://v.baidu.com" rel="external nofollow" name="tj_trvideo" class="mnav">è§�é¢�</a> <a href="http://tieba.baidu.com" rel="external nofollow" name="tj_trtieba" class="mnav">è´´å�§</a> <noscript> <a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1" rel="external nofollow" name="tj_login" class="lb">ç�»å½�</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+%20encodeURIComponent(window.location.href+%20(window.location.search%20===%20" rel="external nofollow" " ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">ç�»å½�</a>');

7.2attr、css

��产�

å
³äº�ç�¾åº¦
About Baidu

©2017 Baidu 使ç�¨ç�¾åº¦å��å¿
读
���� 京ICP�030173�

新近立异:2018-02-06

上述就是那篇作品的全部内容了,希望本文的内容对大家的读书也许办事有着一定的仿照效法学习价值,要是有毛病我们能够留言沟通,谢谢我们对剧本之家的援助。

6.3获取HTML

但假设大家想要获取那么些节点内部的HTML文本,就足以用html()方法

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.item-0.active')
>>> print(li)
<li class="item-0 active"><a href="link3.html">third item</a></li>

>>> print(li.html())
<a href="link3.html">third item</a>

此地大家选中了第多少个li节点,然后调用了html()方法,它回到的结果应该是li标签内的有所HTML文本。

print(doc('html #container'))

4.3男子成分

在地方大家证实了子节点和父节点的用法,还恐怕有一种节点那正是兄弟节点,要是要收获兄弟节点可以应用siblings()方法。大家依旧以上边的HTML代码为例来感受一下:

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <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">third item</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>
 </div>
'''

质量未有加空格表表示同多个标签列里面,是玉石俱焚的意思.在那边我们率先采纳了class为list的节点内部的class为item-0和active的节点,也正是第多个li节点。那么很显著它的哥们儿节点有多少个,那正是率先、二、四、三个li节点。能够观察运行结果也多亏我们刚刚所说的四个匹夫节点。

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.list .item-0.active')
>>> print(li.siblings())
<li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0">first item</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>

果要筛选有个别兄弟节点,我们照样得以向方法传入CSS选用器,那样就能从具备兄弟节点中挑选出符合条件的节点了。
在此地我们筛选了class为active的节点,通过刚才的结果大家能够观测到class为active的男士儿节点独有第多个li节点,所以结果应当是一个,如下:

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.list .item-0.active')
>>> print(li.siblings('.active'))
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
Hello World!

2.3传文书名

当然除了传递多个UEnclaveL,还足以传递本地的文本名,参数钦点为filename就能够。

澳门新萄京 2

本来在这里须求有三个本地HTML文件demo.html,内容是待深入分析的HTML字符串。那样它会首先读取本地的文件内容,然后用文件内容以字符串的款型传递给PyQuery来初始化。

如上三种最初化方式均可,当然最常用的开头化格局可能以字符串格局传递。

4.4 兄弟标签-siblings方法

8.伪类选拔器

CSS选用器之所以强大,还应该有贰个相当的重大的来由正是它辅助多种二种的伪类选用器。举例选拔第叁个节点、最终多个节点、奇偶数节点、包含某一文书的节点等等,我们用二个实例感受一下:

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <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">third item</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>
 </div>
'''

计数是从0最初的

from pyquery import PyQuery as pq
doc = pq(html)
li = doc('li:first-child')#节点、第一个
print(li)
li = doc('li:last-child')#节点、最后一个
print(li)
li = doc('li:nth-child(2)')#节点、第二个
print(li)
li = doc('li:gt(2)')#获取序号比2大的标签
print(li)
li = doc('li:nth-child(2n)')#获取偶数的标签,2n+1则是获得奇数
print(li)
li = doc('li:contains(second)')#包含second文本的
print(li)

<li class="item-0">first item</li>

<li class="item-0"><a href="link5.html">fifth item</a></li>

<li class="item-1"><a href="link2.html">second item</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>

<li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>

<li class="item-1"><a href="link2.html">second item</a></li>

越多CSS接纳器能够查看
http://www.w3school.com.cn/css/index.asp
合塞尔维亚(Република Србија)语档
http://pyquery.readthedocs.io/

让你的selenium带上pyquery功能

3.基本CSS选择器

从这一节初步,大家将在对PyQuery对象举办操作,获得我们想要的各类数据。你拜会到深入分析网页,不论什么库,基本原理实际上是没有分别的,学会了一种分析库。再看别的剖判库文书档案,是很轻易通晓的。

在 CSS 中,选用器是一种形式,用于选取须要加上样式的成分。

澳门新萄京 3

本文只讲clas id
和element最广泛的css采用器。对css不太懂了,也没提到,能够去w3c的css采纳器

html = '''
<div id="container">
    <ul class="list">
         <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">third item</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>
'''

在此间大家开首化PyQuery对象之后,传入了一个CSS选用器,#container .list
li,意思是选项id为container的节点内部的class为list的节点内部的具有li节点。然后打字与印刷输出,能够看到成功获得到了符合条件的节点。

接下来大家将它的项目打印输出,能够阅览它的品种依然是PyQuery类型。有层级的关系供给用空格隔绝.

>>> from pyquery import PyQuery as pq
>>> doc=pq(html)
>>> print(doc("#container .list 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">third item</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>

返回

1.2 pyquery库的援引:(注意分寸写)

from pyquery import PyQuery as pq

pyquery一些自定义的用法

1.pyquery库的询问
2.pyquery初始化
3.基本CSS选择器
4.查找成分
5.遍历
6.获取音讯
7.DOM操作
8.伪类选用器
学习参考链接:Python3中PyQuery的利用办法

<body>
 <ul id="container">
 <li class="object-1"/>
 <li class="object-2"/>
 <li class="object-3"/>
 </ul>
</body>

7.3remove

remove以文害辞移除,remove()方法有的时候会为新闻的领到带来比比较大的方便人民群众。那几个用的可比频仍上边大家看三个实例:

html = '''
<div class="wrap">
    Hello, World
    <p>This is a paragraph.</p>
 </div>
'''

在这里有一段HTML文本,大家未来想提取Hello,
World那个字符串,而毫不p节点内部的字符串,那些什么来领取?

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> wrap = doc('.wrap')
>>> print(wrap.text())
Hello, World
This is a paragraph.
>>> wrap.find('p').remove()#[<p>]
>>> print(wrap.text())
Hello, World

注意:

其他DOM方法

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图