1. Introducción a pyquery
Lo anterior describe el uso de Beautiful Soup, encontrará que los selectores CSS no son tan potentes, a continuación
Aprender pyquery compensa los selectores CSS
Instalar:
pip install pyquery
2. Uso básico
html = '' ' <! DOCTYPE html> <html> <head> <title> 故事 </title> </head> <body> <p class = "title" name = "dromouse"> <b> 这个 是 dromouse </b> </p> <p class = "story"> Había una vez tres hermanas pequeñas; y sus nombres eran <a href="http://www.baidu.com" class="sister" id="link1"> <! - GH -> </a> <a href = "http: / /www.baidu.com/oracle "class =" sister "id =" link2 "> Local </a> y <a href =" http://www.baidu.com/title "class =" sister "id = "link3"> Tillie </a>; y vivían en el fondo de un pozo. </p> <p class = "story"> ... </p> </body> </html> '' ' de pyqueryImportación pyquery AS pq # parámetros objeto pasado pq conocido de DOC = pq (HTML) # salida de todo el contenido de p etiqueta de impresión (DOC ( ' p ' ))
Puedes pasar directamente la URL
de pyquery importación pyquery AS pq # parámetros objeto pasado conocido pq de DOC = pq (URL = " https://www.baidu.com " ) Imprimir (DOC ( ' titulo ' ))
Solicitar archivo también
Importación solicitudes de pyquery importación pyquery AS pq URL = " https://www.baidu.com " # parámetros objeto pasado pq conocido de DOC = pq (requests.get (URL) .text) Imprimir (DOC ( ' título ' ))
Inicialización de archivo
de pyquery importación pyquery AS pq # parámetros objeto pasado conocido pq de PQ = DOC (archivo = " demo.html " ) Imprimir (DOC ( ' titulo ' ))
Tres. Selector CSS básico
1. Uso básico
desde pyquery importa PyQuery como pq doc = pq (url = " https://www.baidu.com " ) div = doc ( ' .card .lazyload ' ) print (div)
2. Encuentra nodos
Introduzca la función de consulta. El uso de estas funciones es exactamente el mismo que la función en jQuery.
1. Nodo hijo
El método find () encuentra todos los nodos descendientes
de pyquery importación pyquery AS pq DOC = pq (url = " https://www.baidu.com " ) div = DOC ( ' .card ' ) # Uso de búsqueda para localizar la etiqueta img = div.find ( ' img ' ) Imprimir ( img)
Solo desea encontrar los nodos secundarios, luego puede usar el método children ()
de pyquery importación pyquery AS PQ DOC = PQ (URL = " https://www.baidu.com " ) div = DOC ( ' .card ' ) # uso de los niños encuentran directa nodo hijo IMG = div.children ( ' A ' ) imprimir (img)
2. El nodo padre
Podemos usar el método parent () para obtener el nodo padre de un nodo (nodo padre directo)
de pyquery importación pyquery AS PQ DOC = PQ (URL = "" ) # En primer nodo de localización de artículos DOC = ( ' .fa ' ) # matriz directa del nodo hijo de la contiene = items.parent ()
Imprimir (la contiene)
Si es un nodo abuelo, es decir, el nodo padre del nodo padre usa los padres ()
de pyquery importación pyquery AS PQ DOC = PQ (URL = " : //.com HTTPS " ) # En primer nodo de localización de artículos DOC = ( ' .fa ' ) # abuelo del niño nodo de la contiene = items.parents () Imprimir ( contiene)
3. Nodo hermano
Si usa nodos hermanos, use el método siblings ()
de pyquery importación pyquery AS PQ DOC = PQ (URL = "" ) # primer elemento de posicionamiento artículos DOC = ( ' .card de texto ' ) # nodos hermanos en el mismo nivel del contiene = items.siblings () Imprimir (la contiene)
4. atravesar
Pyquery puede seleccionar múltiples nodos o un solo nodo. Para los resultados de múltiples nodos, necesitamos usar el recorrido
de pyquery importación pyquery AS PQ DOC = PQ (URL = "" ) # pluralidad de nodos de lista = DOC ( ' .card ' ) .items () Imprimir (tipo (Lista)) # iterate cada salida para el div en lista: Imprimir (div)
5. Obtener información
Hemos terminado el nodo, luego tenemos que obtener la información en el nodo, obtener el texto u obtener los atributos
Obtener atributo attr ()
de pyquery importación pyquery AS PQ DOC = PQ (URL = "" ) # pluralidad de nodos, la adición de elementos () representa a todos IMG = DOC ( ' .card .lazyload ' ) .items () para que en IMG: # Get Atributo img_href = i.attr ( ' data-src ' ) # img_href = i.attr.data-src print (img_href)
Obtener texto usando text () y html ()
de pyquery importación pyquery AS PQ DOC = PQ (URL = "" ) # pluralidad de nodos, la adición de elementos () representa a todos los infos = DOC ( ' .btn ' ) .items () para que en las infos: # Obtener texto info = I .text () # texto de html con info_html = i.html () Imprimir (información, info_html)
El atributo anterior (nombre de atributo, valor de atributo) , texto ("modificar texto") y html ("<a> </a>") pueden modificar parámetros directamente
6. Operación del nodo
pyquery proporciona una serie de métodos para modificar dinámicamente nodos, como agregar una clase a un nodo, eliminar un nodo, etc. Estas operaciones a veces brindan una gran conveniencia para extraer información
Los métodos addClass () y removeClass () cambian dinámicamente el atributo de clase de un nodo
de pyquery importación pyquery AS PQ DOC = PQ (URL = "" ) # consulta IMG = DOC ( ' .card Un IMG ' ) Imprimir (IMG) # clase eliminado de lazyload img.removeClass ( ' lazyload ' ) Imprimir (IMG)
7. Eliminar ()
El método remove () es eliminar el elemento
desde pyquery importa PyQuery como pq html = '' ' <div class = "wrap"> Hola, mundo <p> Esto es un hombre </p> </div> ' '' doc = pq (html) # 获取 hola mundo wrap = doc ( ' .wrap ' ) wrap.find ( ' p ' ) .remove () print (wrap.text ())
Algunos métodos comúnmente utilizados append (), empty () y prepend () y otros métodos, son completamente consistentes con el uso de jQuery
Documentación oficial: http://pyquery.readthedocs.io/en/latest/api.html
8. Selector de pseudo-clase
desde pyquery importa PyQuery como pq html = '' ' <! DOCTYPE html> <html> <head> <title> 故事 </title> </head> <body> <p class = "title" name = "dromouse"> <b> 这个 是 dromouse </b> </p> <p class = "story"> Había una vez tres hermanas pequeñas; y sus nombres eran <a href="http://www.baidu.com" class="sister" id="link1"> <! - GH -> </a> <a href = "http: / /www.baidu.com/oracle "class =" sister "id =" link2 "> Local </a> y < a href = "http://www.baidu.com/title" class = "sister" id = "link3"> Tillie </a>; y vivían en el fondo de un pozo. </p> <ul> <p class = "story"> ... </p> <li> 1 </li> <li> 2 </li> <li> 3 </li> <li> 4 </li> </ul> </body> </html> '' ' doc = pq (html) li_f = doc ( " li: primer hijo " ) li_l = doc ( " li: último hijo " ) li_n = doc ( " li: nth-child (2) " ) li_n = doc ( " li: nth -child (2n) " ) li_text = doc ( " li:contiene (eran) " ) li = doc (" li: gt (2) " )