J'ai intégré diverses informations de balises dans HTML pour l'analyse des données et j'ai essayé diverses méthodes pour voir si «si les données intégrées sont affichées correctement» peut être détecté par un test automatique.
Parmi eux, j'ai pu rechercher les données HTML cibles en utilisant BeautifulSoup de Python, je vais donc résumer la méthode. ** * Ce cas n'est qu'une méthode de recherche et ne décrit pas l'analyse. ** **
Pour obtenir les données HTML cibles avec BeautifulSoup, recherchez d'abord les données entre <> comme point de départ. Ensuite, les données HTML sont recherchées en décrivant les informations contenues dans la balise de départ une par une.
Si vous spécifiez des données qui doivent être le point de départ avec une valeur unique, il vous suffit de spécifier cet élément, ce qui simplifie la description du programme de recherche.
De plus, afin d'exploiter les exemples de phrases à partir du chapitre 3, on suppose que les programmes suivants sont décrits.
import requests
import re
from bs4 import BeautifulSoup
res = requests.get('Décrivez l'URL à analyser ici')
c=res.content
soup = BeautifulSoup(c,'html.parser')
#Un exemple de phrase est décrit ici
print(elems)
Utilisez find s'il n'y a qu'une seule donnée que vous souhaitez acquérir et find_all s'il y a plusieurs données (il existe une autre méthode appelée select, mais cette fois elle est exclue). Find_all est utilisé dans les exemples de phrases suivants.
#Structure de la balise que vous souhaitez rechercher
<script>~</script>
elems = soup.find_all("script")
Il est utilisé lors de la recherche de la pièce entourée de balises simples.
#Structure de la balise que vous souhaitez rechercher
<h1>~</h1>
<div>~</div>
elems = soup.find_all(["h1","div"])
Utilisez cette option lorsque vous souhaitez rechercher plusieurs données entre des balises.
#Structure de la balise que vous souhaitez rechercher
<a class = "test">~</a>
elems = soup.find_all(class_="test")
S'il y a un élément dans lequel une valeur est attribuée en utilisant "=" dans chaque balise, utilisez-le. De plus, lors de la spécification d'une classe, elle doit être "class_". (Parce que la classe est utilisée comme un mot réservé en Python) Si vous avez deux éléments de recherche, utilisez [] comme indiqué ci-dessous.
elems = soup.find_all(id=["test1", "test2"])
#Structure de la balise que vous souhaitez rechercher
<a href="http://○○/△△.html">~<a>
elems = soup.find_all(href=re.compile("http://"))
Il est utilisé lors de la recherche partielle de la valeur attribuée par "=".
#Structure de la balise que vous souhaitez rechercher
<a href="http://○○/△△.html">~<a>
elems = soup.find_all(attrs={"href":"http://○○/△△.html"})
Utilisez "attrs" lorsqu'il y a quelque chose qui ne peut pas être utilisé comme mot clé, comme la balise de données HTML5.
#Exemple)
× elems = soup.find_all("meta",name="test")
⇒TypeError: find_all() got multiple values for argument 'name'
○ elems = soup.find_all("meta",attrs={"name":"test"})
#Structure de la balise que vous souhaitez rechercher
<a href="http://○○/△△.html">~<a>
elems = soup.find_all(href=True)
Tout peut être utilisé dans des balises telles que href, alors utilisez-le lors de la vérification des valeurs. S'il n'y a pas de valeur, spécifiez False comme suit
elems = soup.find_all(id=False)
#Structure de la balise que vous souhaitez rechercher
<a href="http://○○/△△.html">Mode d'emploi<a> #ここのMode d'emploiのみ検索したい
elems = soup.find_all(text='Mode d'emploi')
Utilisez cette option lorsque vous souhaitez extraire uniquement le texte entouré de balises.
#Structure de la balise que vous souhaitez rechercher
<a href="http://○○/△△.html">Mode d'emploi<a> #ここのMode d'emploiのみ検索したい
elems = soup.find_all(text=re.compile("Aller"))
Utilisez cette option lorsque vous souhaitez extraire uniquement le texte entouré de balises. Ce n'est pas une correspondance exacte, mais une correspondance partielle.
#Structure de la balise que vous souhaitez rechercher
<p>test1</p> #Je veux arriver seulement ici
<p>test2</p>
elems = soup.find_all('p', limit=1)
Utilisez cette option lorsque vous souhaitez obtenir le nombre spécifié à partir de plusieurs balises.
Pour trouver les données structurelles spécifiées, ** utilisez souvent une combinaison des modèles de base ci-dessus **.
#Structure de la balise que vous souhaitez rechercher
<meta name="test">
elems = soup.find_all("meta",attrs={"name":"test"})
Il est utilisé lors de la recherche d'une balise qui a name = test dans la balise appelée meta.
#Structure de la balise que vous souhaitez rechercher
<a href="http://○○/△△.html">C'est un test<a>
elems = soup.find_all("a",text="C'est un test")
Lors de la recherche d'une balise contenant la phrase textuelle "C'est un test" dans la balise a
#Structure de la balise que vous souhaitez rechercher
<a href="http://○○/△△.html" title="test">C'est un test</a>
elems = soup.find_all(attrs={"title":"test","href":"http://○○/△△.html"})
De plus, si les données structurelles spécifiées ne peuvent pas être recherchées car il existe plusieurs balises similaires, ** déterminez les données structurelles de départ et effectuez une recherche avant et après ces données. ** Utilisez "next_element" et "previous_element" pour rechercher avant et après. (Next_element est utilisé pour rechercher le dernier élément, previous_element est utilisé pour rechercher l'élément précédent)
#Structure de la balise que vous souhaitez rechercher
<ui>
<li>
<a href="http://○○/△△.html">test</a>
</li>
</ui>
#Je veux l'avoir ici
<ui>
<li>
<a href="http://□□/☆☆.html">test2</a> #Obtenez des données d'ici
</li>
</ui>
elems = soup.find_all("a",href="http://□□/☆☆.html")
elems2 = elems[0].previous_element.previous_element #.previous_Utilisez l'élément deux fois,<ui><li>Pour inclure jusqu'à
Vous pouvez également créer des fonctions pour récupérer des données à partir de structures de balises complexes.
#Structure de la balise que vous souhaitez rechercher
<a class="test">~</a> #Je veux arriver seulement ici
<a id="test">~</a>
def has_class_but_no_id(tag):
return tag.has_attr('class') and not tag.has_attr('id')
elems = soup.find_all(has_class_but_no_id)
Recommended Posts