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
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())