Quatrième méthode d'analyse du robot : PyQuery

爱喝马黛茶的安东尼
Libérer: 2019-06-05 15:14:53
avant
3330 Les gens l'ont consulté

De nombreuses langues ​​​​peuvent explorer, mais les robots basés sur python sont plus concis et pratiques. Les robots d’exploration sont également devenus un élément essentiel du langage Python. Il existe également de nombreuses façons d’analyser les robots. L'article précédent vous a parlé de la troisième méthode d'analyse des crawlers : les expressions régulières Aujourd'hui, je vous présente une autre méthode, PyQuery.

Quatrième méthode danalyse du robot : PyQuery

PyQuery

La bibliothèque PyQuery est également une bibliothèque d'analyse de pages Web très puissante et flexible si vous avez un développement front-end. expérience, vous pouvez l'utiliser. Si vous avez été exposé à jQuery, alors PyQuery est un très bon choix pour vous. PyQuery est une implémentation stricte de Python calquée sur jQuery. La syntaxe est presque identique à celle de jQuery, donc plus besoin d'essayer de mémoriser des méthodes étranges.

Il existe généralement trois façons de transmettre lors de l'initialisation : transmettre en chaîne, transmettre en url, transmettre en fichier.

Initialisation de la chaîne

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(&#39;li&#39;))
Copier après la connexion

Les résultats sont les suivants :

Quatrième méthode d'analyse du robot : PyQuery

Puisque PyQuery est plus difficile à écrire, nous l'importons. L'alias sera ajouté quand :

from pyquery import PyQuery as pq
Copier après la connexion

Ici, nous pouvons savoir que le doc dans le code ci-dessus est en fait un objet pyquery. Nous pouvons sélectionner des éléments via doc. un sélecteur CSS, donc toutes les règles du sélecteur CSS peuvent être utilisées. Vous pouvez directement doc (nom de la balise) pour obtenir tout le contenu de la balise. Si vous souhaitez obtenir la classe, alors doc('.class_name'), si c'est le cas. l'identifiant, puis doc('#id_name') ....

Initialisation de l'URL

from pyquery import PyQuery as pq
doc = pq(url="http://www.baidu.com",encoding=&#39;utf-8&#39;)print(doc(&#39;head&#39;))
Copier après la connexion

Initialisation du fichier

Nous pouvons transmettre les paramètres de l'url ou les paramètres de fichier ici dans pq() , bien sûr, le fichier ici est généralement un fichier html, par exemple : pq(filename='index.html')

Sélecteur CSS de base

html = &#39;&#39;&#39;
<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>&#39;&#39;&#39;
from pyquery import PyQuery as pq
doc = pq(html)
print(doc(&#39;#container .list li&#39;))
Copier après la connexion

One la chose à laquelle nous devons prêter attention ici est la doc ("#container .list li"), les trois ici ne doivent pas nécessairement être côte à côte, tant qu'il y a une relation hiérarchique, ce qui suit est le CSS couramment utilisé méthode de sélection :

Quatrième méthode d'analyse du robot : PyQuery

Rechercher un élément

Élément enfant
enfants, trouver
Code exemple :

html = &#39;&#39;&#39;
<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>
&#39;&#39;&#39;
from pyquery import PyQuery as pq
doc = pq(html)
items = doc(&#39;.list&#39;)
print(type(items))
print(items)
lis = items.find(&#39;li&#39;)
print(type(lis))
print(lis)
Copier après la connexion

Les résultats en cours d'exécution sont les suivants

Nous pouvons également voir à partir des résultats que le résultat trouvé via pyquery est en fait un objet pyquery, et vous pouvez continuer à rechercher items.find. ("li") dans le code ci-dessus signifie trouver tous les li dans la balise ul
Bien sûr, le même effet peut être obtenu grâce aux enfants, et le résultat obtenu grâce à la méthode .children est également un objet pyquery

li = items.children()
print(type(li))
print(li)
Copier après la connexion

En même temps, le sélecteur CSS

li2 = items.children(&#39;.active&#39;) 
print(li2)
Copier après la connexion

peut également être utilisé chez les enfants Élément parent
parent, méthode parents

Vous pouvez trouver. le contenu de l'élément parent via .parent. L'exemple est le suivant :

html = &#39;&#39;&#39;<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>&#39;&#39;&#39;from pyquery import PyQuery as pq
doc = pq(html)
items = doc(&#39;.list&#39;)
container = items.parent()
print(type(container))
print(container)
Copier après la connexion

Vous pouvez trouver le nœud ancêtre via .parents Le contenu de

De même, lorsque nous recherchons dans .parents, on peut aussi ajouter des sélecteurs css pour filtrer le contenu

Éléments frères et sœurs

frères et sœurs

html = &#39;&#39;&#39;
<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>
&#39;&#39;&#39;
from pyquery import PyQuery as pq
doc = pq(html)
items = doc(&#39;.list&#39;)
parents = items.parents()
print(type(parents))
print(parents)
Copier après la connexion

Dans le code, .tem-0 et .active dans doc(' .list .item-0.active') sont côte à côte, ils sont donc dans une relation fusionnée, il n'en reste donc qu'un seul qui remplit les conditions : le troisième élément Cette balise

De cette façon, vous pouvez obtenir toutes les balises frères et sœurs via .siblings Bien sûr, les vôtres ne sont pas incluses ici

De même, dans .siblings(), vous pouvez également filtrer via le sélecteur CSS

Traverse

Élément unique

html = &#39;&#39;&#39;
<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>
&#39;&#39;&#39;
from pyquery import PyQuery as pq
doc = pq(html)
li = doc(&#39;.list .item-0.active&#39;)
print(li.siblings())
Copier après la connexion
Les résultats courants sont les suivants : À partir des résultats, nous pouvons voir qu'un générateur peut être obtenu via items(), Et chaque élément que nous obtenons à travers la boucle for est toujours un objet pyquery.

Obtenir des informations

Obtenir les attributs

pyquery object.attr(attribute name)pyquery object.attr.attribute name

html = &#39;&#39;&#39;
<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>
&#39;&#39;&#39;
from pyquery import PyQuery as pq
doc = pq(html)
li = doc(&#39;.item-0.active&#39;)
print(li)
lis = doc(&#39;li&#39;).items()
print(type(lis))for li in lis:    
print(type(li))    
print(li)
Copier après la connexion

Donc ici, nous pouvons aussi savoir que lors de l'obtention de la valeur de l'attribut, nous pouvons directement a.attr (nom de l'attribut) ou a.attr.nom de l'attribut

pour obtenir le texte

Dans de nombreux cas, nous devons obtenir les informations textuelles contenues dans la balise html. Nous pouvons obtenir les informations textuelles via .text()

html = &#39;&#39;&#39;
<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>
&#39;&#39;&#39;
from pyquery import PyQuery as pq
doc = pq(html)
a = doc(&#39;.item-0.active a&#39;)
print(a)
print(a.attr(&#39;href&#39;))
print(a.attr.href)
Copier après la connexion

Les résultats sont les suivants :

Quatrième méthode d'analyse du robot : PyQuery

Obtenir le html

Nous pouvons obtenir les informations html contenues dans la balise actuelle via .html() . L'exemple est le suivant :


html = &#39;&#39;&#39;
<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>
&#39;&#39;&#39;
from pyquery import PyQuery as pq
doc = pq(html)
a = doc(&#39;.item-0.active a&#39;)
print(a)
print(a.text())
Copier après la connexion

Les résultats sont les suivants :

Quatrième méthode d'analyse du robot : PyQueryOpération DOM

addClass、removeClass
熟悉前端操作的话,通过这两个操作可以添加和删除属性

html = &#39;&#39;&#39;
<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>
&#39;&#39;&#39;
from pyquery import PyQuery as pq
doc = pq(html)
li = doc(&#39;.item-0.active&#39;)
print(li)
li.removeClass(&#39;active&#39;)
print(li)
li.addClass(&#39;active&#39;)
print(li)
Copier après la connexion

attr,css
同样的我们可以通过attr给标签添加和修改属性,
如果之前没有该属性则是添加,如果有则是修改
我们也可以通过css添加一些css属性,这个时候,标签的属性里会多一个style属性

html = &#39;&#39;&#39;
<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>
&#39;&#39;&#39;
from pyquery import PyQuery as pq
doc = pq(html)
li = doc(&#39;.item-0.active&#39;)
print(li)
li.attr(&#39;name&#39;, &#39;link&#39;)
print(li)
li.css(&#39;font-size&#39;, &#39;14px&#39;)
print(li)
Copier après la connexion

结果如下:

Quatrième méthode d'analyse du robot : PyQuery

remove
有时候我们获取文本信息的时候可能并列的会有一些其他标签干扰,这个时候通过remove就可以将无用的或者干扰的标签直接删除,从而方便操作

html = &#39;&#39;&#39;<div class="wrap">
    Hello, World
    <p>This is a paragraph.</p>
 </div>&#39;&#39;&#39;from pyquery import PyQuery as pq
doc = pq(html)
wrap = doc(&#39;.wrap&#39;)
print(wrap.text())
wrap.find(&#39;p&#39;).remove()
print(wrap.text())
Copier après la connexion

结果如下:

Quatrième méthode d'analyse du robot : PyQuery

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!