7, datos pyquery Get

pyquery biblioteca jQuery es una implementación de Python puede operar con documentos jQuery sintaxis análisis de HTML

web de referencia

https://www.jianshu.com/p/770c0cdef481

https://pythonhosted.org/pyquery/css.html

https://www.osgeo.cn/pyquery/index.html

La inicialización de objetos

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>
"""
##############字符串初始化
from pyquery import PyQuery as pq
#初始化为PyQuery对象
doc = pq(html)
print(type(doc))
print(doc)



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

####网址获取
response = pq(url = 'https://www.baidu.com')
print(type(response))
print(response)

selector común CCS

Id para la impresión de etiquetas de contenedores

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

Imprimir clase para la etiqueta de objeto-1

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

Imprimir etiqueta denominado cuerpo de la etiqueta

print(doc('body'))

selector CSS utiliza una variedad de

print(doc('html #container'))

selector de pseudo clase

print(pseudo_doc('li:nth-child(2)'))

#打印第一个li标签
print(pseudo_doc('li:first-child'))

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

contiene

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

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

etiqueta hallazgo

Encontrar etiqueta cualificado objetos Pyquery de acuerdo con las condiciones, se encontró método BeautifulSoup es similar.

Id = impresión de etiquetas envase

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

método de generación de sub-etiqueta -Niños

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

Padres etiquetan método -Padre

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

método Hermanos etiqueta -siblings

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

El acceso a la información de la etiqueta

Después de localizar la etiqueta de destino, necesitamos texto o valor de atributo de la etiqueta interna, esta vez la necesidad de extraer valor de texto o atributo de la operación

Tag valor del atributo extraída

.attr() 传入 标签的属性名,返回属性值

object_2 = doc.find('.object-2')
print(object_2.attr('class'))
El texto dentro de la etiqueta
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())

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


tips:如果我只想获得Hello World这个,不想得到其他的文本,可以使用remove方法将li标签去掉,然后再使用text方法
container = docs.find('#container')
container.remove('li')
print(container.text())

pyquery cierto uso personalizada

PyQuery y contraste BeautifulSoup, nos encontramos con que PyQuery puede iniciar una solicitud para una dirección URL

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

parámetros abridor

Esta es una solicitud PyQuery URL de Baidu, y datos devueltos en respuesta a la petición de procesamiento es objeto PyQuery. pyquery biblioteca llamadas generales urllib biblioteca por defecto, si desea utilizar la biblioteca de selenio o solicitudes, puede personalizar los parámetros definidos PyQuery el primer partido.

parámetro abridor dice pyquery ¿cuál es el papel de la biblioteca a la petición de URL para iniciar la solicitud. biblioteca pedir común como urllib, solicitudes, el selenio. Aquí personalizamos el primer partido de una selenio.

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)

galletas, encabezados

En el uso peticiones en general, con el fin de acceder más real URL, imitando en el navegador. En general, necesitamos pasar encabezados, cuando sea necesario, también se necesita pasar parámetros cookies. Las bibliotecas pyquery tienen esta función, sino también para el navegador de camuflaje.

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)

Deje que su función selenio llevar 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))

PyQuery- obtener datos

documentación de la API

inicialización

Inicialización de generalmente tres maneras entrantes: cadena entrante aprobada en url, el archivo entrante

cadena de inicialización

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)
print(type(doc))
print(doc('li'))

# 代码中的doc其实就是一个pyquery对象,我们可以通过doc可以进行元素的选择,其实这里就是一个css选择器,所以CSS选择器的规则都可以用,直接doc(标签名)就可以获取所有的该标签的内容,如果想要获取class 则doc('.class_name'),如果是id则doc('#id_name')....

URL de inicialización

from pyquery import PyQuery as pq

doc = pq(url="http://www.baidu.com",encoding='utf-8')
print(doc('head'))

archivo de inicialización

pq (nombre de archivo = 'index.html')

selectores CSS básicos

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"><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('#container .list li'))

# doc('#container .list li'),这里的三者之间的并不是必须要挨着,只要是层级关系就可以

Los métodos utilizados comúnmente selectores CSS:

.class    .color   选择class="color"的所有元素
#id       .info    选择id="info"的所有元素
*          *       选择所有元素
element   p        选择所有的p元素
element,element    div,p        选择所有的div元素和所有的p元素
element element    div p        选择div标签内部所有的p元素
[attribute]        [target]     选择带有target属性的元素
[attribute=value]        [target=_blank]     选择target=_blank的所有元素

Elementos hallazgo

Subelementos

niños, encuentra


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"><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)
items = doc('.list')
print(type(items))
print(items)
lis = items.find('li')
print(type(lis))
print(lis)

 # 通过pyquery找到结果其实还是一个pyquery对象,可以继续查找,上述中的代码中的items.find('li') 则表示查找ul里的所有的li标签

Puede lograr el mismo efecto por los niños, y los resultados obtenidos por el método es también un pyquery objetos .children

li = items.children()
print(type(li))
print(li)

# 同时在children里也可以用CSS选择器

li2 = items.children('.active') print(li2)

El elemento padre

padre, el método de los padres

Por .parent se puede encontrar el contenido del elemento padre

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"><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)
items = doc('.list')
container = items.parent()
print(type(container))
print(container)

Por .parents se puede encontrar lo antepasado nodo

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

Del mismo modo, también podemos añadir selector CSS por .parents en la búsqueda de filtrado de contenido

hermanos

hermanos

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"><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>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.list .item-0.active')
print(li.siblings())

Doc-0 .tem código y .active ( 'Lista .item-0.active ') es la siguiente, y así se expresa la relación, tal condición es satisfecha a la izquierda del: artículo de thired que la etiqueta
para que pueda obtener toda la etiqueta hermano por .siblings, por supuesto, no se incluye aquí poseer
la misma también puede ser proyectado por .siblings selectores CSS () en

Transversal

Los elementos individuales

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"><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>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)

lis = doc('li').items()
print(type(lis))
for li in lis:
    print(type(li))
    print(li)
##通过items()可以得到一个生成器,并且我们通过for循环得到的每个元素依然是一个pyquery对象

Acceso a la información

La adquisición de la propiedad
pyquery objetos .attr (nombre de la propiedad)
pyquery objetos .attr. Nombre del Atributo

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"><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>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a)
print(a.attr('href'))
print(a.attr.href)
#获得属性值的时候可以直接a.attr(属性名)或者a.attr.属性名

Obtener el texto

En muchos casos tenemos que conseguir información de texto se contiene etiquetas HTML, por .text () se puede obtener el mensaje de texto

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"><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>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a)
print(a.text())

Obtener hTML

Podemos obtener información acerca de la etiqueta html actual contenida por .html () manera,

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"><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>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
print(li.html())

manipulación del DOM?

addClass, removeClass
familiarizado con el funcionamiento de la parte delantera, se puede añadir y atributos de eliminación de estas dos operaciones

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"><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>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.removeClass('active')
print(li)
li.addClass('active')
print(li)

attr, css

Lo mismo podemos añadir y modificar los atributos attr a las etiquetas,
si no se añade la propiedad antes de que, si hay una modificación
, también podemos añadir algunas propiedades CSS a través de CSS, esta vez, la propiedad de la etiqueta será más en un atributo de estilo

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"><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>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.attr('name', 'link')
print(li)
li.css('font-size', '14px')
print(li)

eliminar

A veces, cuando conseguimos el mensaje de texto puede ser cierto paralelismo interfiere con otras etiquetas, en este momento puede eliminar la interferencia o eliminar etiquetas no deseados, tan fácil de operar

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

Supongo que te gusta

Origin www.cnblogs.com/g2thend/p/12452212.html
Recomendado
Clasificación