Aidemy 2020/9/30
Bonjour, c'est Yope! Je suis une école littéraire croustillante, mais j'étais intéressé par les possibilités de l'IA, alors je suis allé à l'école spécialisée en IA "Aidemy" pour étudier. Je voudrais partager les connaissances acquises ici avec vous, et je les ai résumées dans Qiita. Je suis très heureux que de nombreuses personnes aient lu l'article de synthèse précédent. Je vous remercie! Ceci est le deuxième article de grattage. Ravi de vous rencontrer.
Quoi apprendre cette fois ・ Méthode de grattage (reportez-vous à Grattage 1 pour l'exploration préparatoire) ・ Gratter plusieurs pages
・ (Revue) Le grattage consiste à acquérir une page Web et à en extraire les données nécessaires. -Il existe deux types de méthodes de scraping: "expression régulière (re module)" ou "utiliser une bibliothèque tierce", mais cette fois c'est une méthode majeure __ "utiliser une bibliothèque tierce" «Le grattage est effectué par la méthode __.
-XML est un langage __markup __ qui crée directement les mêmes pages Web que HTML. Il est plus extensible que HTML. -En HTML et XML, il y a du texte entouré de quelque chose comme ** \
-Vous pouvez facilement gratter en utilisant la méthode __BeautifulSoup (page web décodée, "parser") . - Parser __ est un programme qui analyse (analyse) les chaînes de caractères, et il existe plusieurs types pour chaque fonctionnalité, et l'un d'eux est spécifié. Les exemples incluent "html.parser" qui ne nécessite pas de bibliothèque supplémentaire, "lxml" qui peut traiter à grande vitesse et "xml" qui correspond à XML.
#Importer des demandes d'exploration et Beautiful Soup pour gratter
from bs4 import BeautifulSoup
import requests
#Obtenir l'URL
url=requests.get("https://www.google.co.jp")
#Scraping (le décodage est l'url du module de requête.L'analyseur est fait avec du texte"xml"Spécifié comme)
soup=BeautifulSoup(url.text,"xml")
-Les données nécessaires peuvent être extraites des données analysées effectuées dans la section précédente. Il existe les deux méthodes suivantes. -Si vous mettez les données analysées dans la variable soup, __soup.find ("nom de balise ou nom d'attribut") __ extraira uniquement le premier élément avec cette balise ou cet attribut. De plus, si la partie de recherche est find_all, tous les éléments spécifiés seront répertoriés et extraits. -Si vous voulez extraire de l'attribut de classe, ajoutez _class = "nom d'attribut de classe" __ à l'argument.
-Si vous mettez les données analysées dans la variable soup, __soup.selected_one ("CSS selector") __ extraira uniquement le premier élément qui satisfait cela. De plus, si la partie selected_one est select, tous les éléments spécifiés seront répertoriés et extraits. -Le sélecteur __CSS est une méthode d'indication d'éléments dans la représentation CSS. __ Vous pouvez également l'utiliser pour spécifier un élément à l'intérieur d'un élément (ex) L'élément h1 à l'intérieur d'un élément body est "body> h1").
-Aussi, comme astuce, vous pouvez copier des éléments et des sélecteurs CSS avec les outils de développement de Chrome. Par conséquent, il est possible d'extraire les données souhaitées d'une manière visuellement facile à comprendre sans avoir à se soucier de sortir les données décodées.
Google_title = soup.find("title") #<title>Google</title>
Google_h1 = soup.select("body > h1") #[](La liste vide est sortie car il n'y a pas d'élément h1 de l'élément body)
-Si ce qui précède est laissé tel quel, Google_title sera affiché avec la balise de titre attachée, mais en utilisant text, seul le texte de ceux-ci peut être obtenu.
print(Google_title.text) #Google
・ Avec la méthode jusqu'à présent, vous ne pouvez gratter qu'une page à la fois. Si vous voulez gratter plusieurs pages, vous pouvez obtenir l'URL de l'autre page à partir du lien vers l'autre page sur la page supérieure, etc. __ et gratter toutes les URL par un traitement itératif. -Les URL des autres pages peuvent être obtenues avec __top page URL + attribut href (lien de chaque page) __ de l'élément .
top="http://scraping.aidemy.net"
r=requests.get(top)
soup=BeautifulSoup(r.text,"lxml")
url_lists=[]
#Obtenez l'URL d'une autre page à partir du lien
#(La méthode consiste à obtenir d'abord toutes les balises, à utiliser get pour coder l'attribut href pour chacune d'elles et à la connecter à topURL pour en faire une URL.)
urls = soup.find_all("a")
for url in urls:
url = top + url.get("href")
url_lists.append(url)
・ Si vous pouvez obtenir l'URL d'une autre page, effacez-la. Comme mentionné ci-dessus, le scraping doit être effectué pour toutes les URL par un traitement itératif. -Dans ce qui suit, tous les titres de photos (répertoriés dans la balise h3) seront extraits de toutes les pages acquises dans la section précédente, et tous seront acquis et affichés sous forme de liste.
photo_lists=[]
#Après avoir encodé la page obtenue dans la section précédente, grattage du titre de la photo avec Beautiful Soup
for url in url_lists:
r2=requests.get(url)
soup=BeautifulSoup(r2.text,"lxml")
photos=soup.find_all("h3")
#Ajouter le titre de la photo obtenue en grattant à la liste sans la balise h3
for photo in photos:
photo_text=photo.text
photo_lists.append(photo_text)
print(photo_lists) #['Minim incididunt pariatur', 'Voluptate',...(Abréviation)]
-Lors de la capture d'une page explorée, analysez-la d'abord avec la méthode BeautifulSoup. -Toutes les données peuvent être extraites des données analysées. Utilisez __find () __ ou __selected_one () __ pour extraire. -Si vous ajoutez text aux données extraites, les balises etc. seront omises et seuls les éléments pourront être extraits. -Lorsque vous grattez plusieurs pages à la fois, vous pouvez explorer en extrayant le lien de la page __top, etc. et en le connectant à l'URL de base, donc grattez-le individuellement.
Cette fois, c'est fini. Merci d'avoir lu jusqu'ici.
Recommended Posts