De Junior'a a Middle'a: Analisador

Olá, Khabrovchans! Durante muito tempo, houve um desejo de escrever um artigo, mas não se atreveu.
Minhas séries de posts descreverão meu caminho do Junior ao Middle e, talvez, até ao Senior. Vamos programar em Python.

A documentação do PS para algumas bibliotecas pouco conhecidas será anexada no final.

Brevemente sobre mim: Python começou a estudar há dois anos, não houve avanços especiais.
O básico em si ficou desapontado, porque eu os ensinei por um ano e meio. Agora estou estudando a língua em profundidade, entendo sua estrutura e como tudo acontece. Nos artigos a seguir, irei fazer o upload do código, usar todas as bibliotecas novas e novas e, como você sabe, o python tem muito :)

Por onde começar? Alguns meses atrás, escrevi meu primeiro analisador. Descobriu-se que escrever analisadores é bastante simples e você pode até ganhar dinheiro com eles. Até agora, mostrarei alguns exemplos usando a pilha de solicitações bs4 + . Vamos analisar nosso amado Habr .

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

Não tenho certeza se todos estão familiarizados com a biblioteca fake_useragent . É bastante conveniente para análise, pois cria uma farsa de agente do usuário.

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

Este é o próximo pequeno bloco do nosso código. Na primeira linha, criamos a variável ua, que usa os métodos da classe UserAgent. Na segunda linha, criamos um dicionário que nos ajudará a analisar no futuro.

Agora crie a própria função para análise.

 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") 

Esta função irá analisar o link, o que indica a presença de uma tag com a classe "post__title_link".

A maneira mais fácil de salvar dados é salvá-los em um arquivo. Então vamos lá.

 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') 

No final, obtemos um arquivo que contém os nomes e os links das postagens que coletamos da primeira página.

Código fonte (completo), apenas sem comentários:

 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') 

Bom resultado! Exceto pelos pulos e comentários das linhas, encontramos exatamente 20 linhas. Para iniciantes, muito bom :)

Conforme prometido, links para a documentação das bibliotecas usadas:

Pedidos: * squeeze *
bs4: * aperto *
fake_useragent: * squeeze *

Obrigado a todos pela atenção! Até breve!

PS Se houver algum feedback, o artigo a seguir não demorará a chegar

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


All Articles