De Junior'a à Middle'a: Parser

Bonjour, Khabrovchans! Pendant longtemps, il y avait un désir d'écrire un article, mais n'a pas osé.
Ma série de postes décrira mon cheminement de Junior à Middle, puis peut-être même à Senior. Nous programmerons en Python.

La documentation PS pour certaines bibliothèques peu connues sera jointe à la fin.

En bref sur moi-même: Python a commencé à étudier il y a deux ans, il n'y a eu aucune avancée particulière.
Les bases elles-mêmes sont devenues déçues, puisque je leur ai enseigné pendant un an et demi. Maintenant j'étudie la langue en profondeur, je comprends sa structure et comment tout se passe. Dans les articles suivants, je téléchargerai le code, j'utilise toutes les nouvelles et nouvelles bibliothèques, et comme vous le savez, python en a beaucoup :)

Par où commencer? Il y a quelques mois, j'ai écrit mon premier analyseur. Il s'est avéré que l'écriture d'analyseurs est assez simple et vous pouvez même gagner de l'argent avec eux. Jusqu'à présent, je vais vous montrer quelques exemples utilisant la pile de requêtes bs4 + . Nous analyserons notre bien-aimé Habr .

#      from bs4 import BeautifulSoup as bs import requests from fake_useragent import UserAgent 

Je ne sais pas si tout le monde connaît la bibliothèque fake_useragent . Il est assez pratique pour l'analyse, il crée un faux agent utilisateur.

 ua = UserAgent() headers = {'accept': '*/*', 'user-agent': ua.firefox} 

Ceci est le prochain petit bloc de notre code. Dans la première ligne, nous avons créé la variable ua, qui utilise les méthodes de la classe UserAgent. Dans la deuxième ligne, nous avons créé un dictionnaire qui nous aidera à analyser à l'avenir.

Créez maintenant la fonction elle-même pour l'analyse.

 def without_post(url, headers): response = requests.get(url, headers=headers) if response.status_code == 200: soup = bs(response.text, 'html.parser') links = {} for i in soup.find_all('a', {'class': 'post__title_link'}): links.update({i.text: i.get('href')}) return links else: print("Connection Error") 

Cette fonction analysera le lien, ce qui nous indique la présence d'une balise avec la classe "post__title_link".

La façon la plus simple d'enregistrer des données est de les enregistrer dans un fichier. Alors faisons-le.

 url = "https://habr.com/ru/all/" links = without_post(url, headers) with open('parsed.txt', 'w') as f_obj: for name, href in links.items(): f_obj.write(name + ':\n' + href + '\n\n') 

À la fin, nous obtenons un fichier qui contient les noms et les liens des messages que nous avons collectés à partir de la première page.

Code source (complet), uniquement sans commentaire:

 from bs4 import BeautifulSoup as bs from fake_useragent import UserAgent import requests ua = UserAgent() headers = {'accept': '*/*', 'user-agent': ua.firefox} def without_post(url, headers): response = requests.get(url, headers=headers) if response.status_code == 200: soup = bs(response.text, 'html.parser') links = {} for i in soup.find_all('a', {'class': 'post__title_link'}): links.update({i.text: i.get('href')}) return links else: print("Connection Error") url = "https://habr.com/ru/all/" links = without_post(url, headers) with open('parsed.txt', 'w') as f_obj: for name, href in links.items(): f_obj.write(name + ':\n' + href + '\n\n') 

Bon résultat! À l'exception des sauts de ligne et des commentaires, nous avons rencontré exactement 20 lignes. Pour commencer, plutôt bien :)

Comme promis, des liens vers la documentation des bibliothèques utilisées:

Demandes: * presser *
bs4: * presser *
fake_useragent: * squeeze *

Merci à tous pour votre attention! A très bientôt!

PS S'il y a des commentaires, l'article suivant ne tardera pas à venir

Source: https://habr.com/ru/post/fr482340/


All Articles