・ J'ai récemment étudié le scraping Web et j'aimerais aider les gens qui étudient également. ・ Pour la sortie de mon propre apprentissage. Pratique de sortie. ・ C'est une production humaine qui est moins d'un mois après que j'ai commencé à toucher le Web scraping ou Selenium. Au contraire, désormais S'il vous plaît, utilisez-le comme guide, car les personnes qui le lancent peuvent généralement le devenir. ・ Je ne comprends pas autant que possible l'explication super détaillée. Je ne peux le comprendre qu'en gros, j'espère donc que ceux qui le liront le comprendront. ・ Nous nous référons à robots.txt et jugeons qu'il ne semble y avoir aucun problème, et nous l'implémentons.
newspaper.py
import requests
from bs4 import BeautifulSoup
import pandas as pd
#Création de la liste requise pour le web scraping
elements_title = []
elements_url = []
#Processus de scraping Web
def get_nikkei_news():
url = "https://www.nikkei.com/"
response = requests.get(url)
html = response.text
soup = BeautifulSoup(html,"html.parser")
#Traitement du titre
title_list = soup.select(".k-card__block-link")
for title in title_list:
elements_title.append(title.text)
#Traitement à propos de l'URL
url_list = soup.select(".k-card__block-link")
for i in url_list:
urls = i.get("href")
if "http" not in urls:
urls = "https://www.nikkei.com" + urls
elements_url.append(urls)
else:
elements_url.append(urls)
#Appel de processus de scraping Web
get_nikkei_news()
#traitement des pandas
df = pd.DataFrame({"news_title":elements_title,
"news_url":elements_url})
print(df)
df.to_csv("nikkei_test_select.csv", index=False, encoding="utf-8")
news_title news_url
0 Taux de croissance de l'exercice 2008, moins 4%Perspectives du gouvernement du centre de Taiwan https://www.nikkei.com/article/DGXMZO62026930Z...
1 États-Unis-Australie 2 Plus 2, «Graves préoccupations» sur la route puissante de la Chine https://www.nikkei.com/article/DGXMZO62026150Z...
2 dangereuses «politiques Xi Jinping» toutes négatives, de l'Union soviétique, qui invite à la collision dans le sort américain https://www.nikkei.com/article/DGXMZO61984420Y...
3 L'usine de retraitement du combustible nucléaire a réussi l'examen de sûreté; l'opération a commencé au cours de l'exercice 2009://www.nikkei.com/article/DGXMZO62026760Z...
4 Études suspendues à l'étranger à Corona, soudainement entré à la recherche d'un emploi, essais pour les étudiants de retour https://www.nikkei.com/article/DGXMZO61953440X...
.. ... ...
70 Petite fusée, petite et moyenne, etc. visant à se lancer dans les airs https://www.nikkei.com/article/DGXMZO61958380X...
71 Marunaka recrute préférentiellement des stagiaires techniques dans son pays d'origine, Aeon https://www.nikkei.com/article/DGXMZO62005790Y...
72 Renforcement des mesures aux frontières, visant à reprendre les vols internationaux Président du bâtiment de l'aéroport de Naha https://www.nikkei.com/article/DGXMZO62017470Y...
73 Le président de la Kanagawa Bank, Kondo, réforme pour la première fois le filtrage des prêts https://www.nikkei.com/article/DGXMZO61933170X...
74 Toriten: Profitez du goût de l'hospitalité d'Oita et mangez en marchant https://www.nikkei.com/article/DGXMZO56989060Z...
・ Nihon Keizai Shimbun (https://www.nikkei.com/) Les titres et URL de toutes les actualités et publicités affichées sur la première page de C'est un code de scraping Web qui effectue un traitement pour cracher au format csv. Je pense que c'est un code de base (éventuellement) pour le scraping Web en utilisant BeautifulSoup et les requêtes.
・ Préparez une liste vide pour stocker le titre et l'url de l'actualité, Le traitement d'extraction des données à inclure dans la liste est effectué dans chaque fonction. Pour extraire le titre de l'actualité, j'aurais dû aller le récupérer, mais l'URL peut avoir "https: //" (partie protocole) depuis le début. Certains d'entre eux n'étaient pas attachés, nous avons donc créé une branche conditionnelle, et pour ceux qui n'étaient pas attachés, "https://www.nikkei.com" Est ajouté. (Peut-être qu'une partie étrange de l'URL sera sortie. Il ne semble pas que je l'ai vérifiée visuellement, mais si c'était le cas, elle serait corrigée (-_-;))
-Il est sorti par print () et une autre sortie au format csv. Cependant, comme il est émis avec utf-8, les caractères sont déformés lorsqu'ils sont ouverts sur un PC Windows. J'utilise atom, google drive, Cloud9, etc. Nous vérifions le contenu, donc si vous souhaitez vérifier la sortie en copiant ce code, veuillez vous y référer <m (__) m>
La partie suivante de la fonction qui exécute le processus de grattage Web est codée avec diligence, ce qui, à mon avis, est magique. Copiez et collez l'URL cible que vous souhaitez extraire sur le Web dans l'URL, puis importez le fichier HTML à partir de cette URL. Je pense que c'est comme analyser la structure avec une perspective HTML.
parts.py
url = "https://www.nikkei.com/"
response = requests.get(url)
html = response.text
soup = BeautifulSoup(html,"html.parser")
Le code ci-dessous récupère le titre. Ensuite, le titre extrait est stocké dans la liste.
parts.py
title_list = soup.select(".k-card__block-link")
for title in title_list:
elements_title.append(title.text)
Le code suivant récupère l'url. Cependant, le contenu peut être insuffisant simplement en le retirant. Comme il y en avait, le branchement conditionnel est effectué avec l'instruction if, et s'il y a une pénurie, compensez la pénurie. Il sera stocké dans la liste.
parts.py
url_list = soup.select(".k-card__block-link")
for i in url_list:
urls = i.get("href")
if "http" not in urls:
urls = "https://www.nikkei.com" + urls
elements_url.append(urls)
else:
elements_url.append(urls)
Ce qui suit utilise un module appelé pandas pour le convertir au format csv et le cracher. Dans les pandas, faites-en un type de dictionnaire, définissez le nom de la colonne dans la clé et définissez l'élément de chaque colonne dans la valeur. J'ai pu sortir les données au format csv proprement. C'est pratique. pandas.
parts.py
df = pd.DataFrame({"news_title":elements_title,
"news_url":elements_url})
print(df)
df.to_csv("nikkei_test.csv", index=False, encoding="utf-8")