Gratter les résultats de recherche de Google Actualités en Python (2) Utiliser Beautiful Soup

Si vous effectuez une recherche par mots-clés ou phrases qui vous intéressent, Google Actualités affichera 100 articles classés par pertinence et par date et heure de sortie. Afin de savoir comment les produits alimentaires à succès sont apparus, recherchez les actualités passées en recherchant des mots-clés et des phrases susceptibles d'être liés à l'aliment à succès, et vérifiez le degré d'intérêt croissant au moment de ces communiqués de presse sur Google Trends. Ce faisant, il semble que nous pouvons explorer le processus menant au succès. Il peut également être utilisé pour capturer des sujets qui mènent à de nouveaux hits. Dans le rapport précédent, j'ai présenté comment analyser Google News RSS en Python (analyseur de flux). Scraping Google News avec Python et édition avec R. Cependant, avec cette méthode, le texte de résumé est devenu le même que le texte du titre depuis octobre 2019 environ.

Par conséquent, cette fois, je présenterai un script qui utilise Beautiful Soup pour acquérir des informations d'article sur la page de résultats de recherche de Google Actualités. Contrairement à feedparser, qui fournit des informations sur l'article organisées, il est nécessaire de rechercher l'emplacement des informations sur l'article à partir de la page Web des résultats de la recherche et de spécifier les informations à extraire par des balises, des éléments et des attributs.

Ici, nous allons introduire une méthode pour rechercher les informations d'article que vous souhaitez récupérer avec Google Ghrome, et un script pour récupérer les informations d'article à partir des informations de structure de page obtenues à l'aide des requêtes de bibliothèque et de Beautful Soup.

1. Analyse des informations d'article sur la page de résultats de recherche par Google Chrome

Pour le mot de recherche, nous avons utilisé "Tapiru", qui a été sélectionné parmi les dix meilleurs des prix des nouveaux mots et des mots populaires 2019. Les résultats de la recherche ci-dessous s'affichent. image.png

Pour examiner la structure de cette page, placez votre curseur sur le titre de l'article, faites un clic droit et cliquez sur Valider en bas du menu qui apparaît.

image.png

La configuration des éléments de la page HTML est affichée en haut à droite. À partir de cette fenêtre, identifiez l'emplacement des informations sur l'article et comprenez les balises et les attributs nécessaires pour obtenir les informations.

image.png

Si vous regardez le code HTML affiché, vous serez timide, mais les informations dont vous avez besoin sont toujours à proximité de cette zone bleu clair, il est donc important de rechercher soigneusement et de manière persistante. Juste en dessous de la zone bleu clair

Lorsque vous cliquez sur ▶, le calque inférieur s'ouvre et le texte du titre «# Tapiru English Savez-vous? ...» s'affiche. J'ai pu confirmer que les informations du premier article étaient écrites près de la zone bleu clair. タイトル.jpg

Donc, si vous recherchez la balise de regroupement "div" (voir la fin de la référence de phrase pour la balise div) sur la partie grise pour trouver la balise supérieure qui contient les informations de cet article

▼<div class="xrnccd"

Il semble y avoir des informations d'article que vous voulez dans cette couche inférieure, donc sélectionnez approximativement les informations d'environ 100 articles en utilisant "xrnccd" de la classe qui identifie cette balise comme le sélecteur de Beautiful Soup. Toutes les informations d'article recherchées par le script suivant peuvent être affectées aux articles.

articles = soup.select(".xrnccd")

Ensuite, trouvez et récupérez la partie où sont décrits le titre, le résumé, l'URL de l'article original et la date de sortie de chaque article. Le texte du titre "# Tapiru no English ..." est juste en dessous de la zone bleu clair.

Juste en dessous

Cliquez sur ▶ pour ouvrir le calque inférieur

<classe de portée = ・ ・ ・

Le texte des premières lignes de l'article était affiché juste en dessous. Il n'a pas été affiché sur la page Web des résultats de recherche, mais il a été masqué ici. C'est ce qu'on appelle un résumé.

image.png

Le script pour obtenir ce texte summary = entry.find (" span "). Text.

Pour les informations sur la date de publication de l'article, cliquez sur ▶ de <div class = "Qmr ..." juste en dessous pour ouvrir la couche inférieure, et "datetime = 2019-12-13 ..." est directement sous "<time class =". eu.

image.png

Le script pour obtenir cette date / heure time_elm = entry.find (" heure ").

Enfin, l'url de la page de l'article, qui se trouve dans la partie bleu clair de la vérification. Cela signifie que les informations liées sont placées dans le titre de l'article.

image.png

<a class="VDXfz" jsname="hXuDdf" jslog="85008; 2:https://prtimes.jp/main/thml/rd/p/000001434.000011710.html;

C'est la partie de https: // ~. J'ai utilisé les deux scripts suivants. ~~ url_elm = entry.find("a")~~ ~~ url_elm = entry.find("a", class_= "VDXfz")~~ url_elm = entry.find("article") link = url_elm.get("jslog")

Introduisons le script à travers. Utilisez lstrip () et rstrip () pour supprimer les caractères inutiles à la fin des informations acquises. S'il n'y a pas d'informations sur la date de publication, "0000-00-00" est remplacé à la place dans le traitement des exceptions. Les informations acquises sont converties en trame de données par les pandas de la bibliothèque et enregistrées dans un fichier csv.

2. Script de récupération des résultats de recherche Google Actualités

environnement

Windows10 Python 3.6.2

scénario

google_news


#Appeler la bibliothèque requise
import pandas as pd    #Pour enregistrer le résultat du scraping dans un fichier cvs au format de bloc de données
import pprint    #Pour afficher une partie du bloc de données
from bs4 import BeautifulSoup  #Analyse et extraction des informations de page Web acquises
import requests     #Obtenir des informations sur les pages Web
import urllib       #Obtenir le codage de l'URL des mots clés

#Convertissez le mot de recherche "tapiru" en caractères et insérez-le entre les URL de la page de résultats de recherche.
s = "Tapiru"
s_quote = urllib.parse.quote(s)
url_b4 = 'https://news.google.com/search?q=' + s_quote + '&hl=ja&gl=JP&ceid=JP%3Aja'

#Obtenir des informations sur la page de résultats de recherche
res = requests.get(url_b4)
soup = BeautifulSoup(res.content, "html.parser")

#Sélectionnez les informations pour tous les articles
articles = soup.select(".xrnccd")

#Obtenez les informations de chaque article à plusieurs reprises pour ~ enumerate et attribuez-les à la liste
news = list()   #Créer une liste vide pour l'affectation

for i, entry in enumerate(articles, 1):
    title = entry.find("h3").text
    summary = entry.find("span").text
    summary = title + "。" + summary
    #url_elm = entry.find("a")Changé en
    url_elm = entry.find("article")
    link = url_elm.get("jslog")
    link = link.lstrip("85008; 2:")		#Supprimer le bord gauche
    link = link.rstrip("; track:click")	#Supprimer le bord droit
    time_elm = entry.find("time")
    try:	#Gestion des exceptions
        ymd = time_elm.get("datetime")
    except AttributeError:
	    ymd = "0000-00-00"
	ymd = ymd[0:10]
	ymd = ymd.replace("-", "/")		#Remplacement
	sortkey = ymd[0:4] + ymd[5:7] + ymd[8:10] #Pour trier par date
				
	tmp = {				#Stocké dans le type de dictionnaire
	    "title": title,
	    "summary": summary,
	    "link": link,
	    "published": ymd,
	    "sortkey": sortkey
        }

	news.append(tmp)  #Ajouter des informations pour chaque article à la liste
	
	#Convertir en bloc de données et enregistrer en tant que fichier csv
	news_df = pd.DataFrame(news)
	pprint.pprint(news_df.head())  #Affichez les 5 premières lignes pour vérifier les données
	filename = s + ".csv"
	news_df.to_csv(filename, encoding='utf-8-sig', index=False)	

Le script de recherche Google Actualités est utilisé pour les articles suivants.

[Trouvez les graines des succès alimentaires dans la science des données! (1) - Le secret du succès Baschi de Lawson](https://blog.hatena.ne.jp/yamtakumol/yamtakumol.hatenablog.com/edit?entry= 26006613407003507)

[Trouvons les graines des succès culinaires! (2) --- "Nourriture complète" et "Recette enfant météo" de juin à août 2019](https://blog.hatena.ne.jp/yamtakumol/ yamtakumol.hatenablog.com/edit?entry=26006613422742161)

[Trouvons les graines des succès alimentaires! (3) - Septembre 2019 est la nourriture de Taiwan qui suit Tapiocati, en particulier le «thé au fromage»](https://blog.hatena.ne.jp/yamtakumol/ yamtakumol.hatenablog.com/edit?entry=26006613447159392)

Trouvons les graines des succès alimentaires! - Tarte aux pommes de terre sucrée en octobre 2019

** Graines de succès alimentaires attendues en 2020-Boules de fromage - **

référence:

Qu'est-ce que HTML? Si vous lisez ceci, même les débutants peuvent certainement écrire du HTML! Qu'est-ce qu'une classe div HTML? Commentaire avec des exemples compréhensibles en 5 minutes

Recommended Posts