uz
Feedback
Python Brasil

Python Brasil

Kanalga Telegram’da o‘tish

Canal para compartilhamento de links, cursos vagas e eventos sobre Python. @laenderoliveira

Ko'proq ko'rsatish

📈 Telegram kanali Python Brasil analitikasi

Python Brasil (@pythonbrasil) Portugal til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 25 009 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 5 451-o'rinni va Braziliya mintaqasida 1 957-o'rinni egallagan.

📊 Auditoriya ko‘rsatkichlari va dinamika

невідомо sanasidan buyon loyiha tez o‘sib, 25 009 obunachiga ega bo‘ldi.

19 Iyun, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -169 ga, so‘nggi 24 soatda esa -6 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.

  • Tasdiqlash holati: Tasdiqlanmagan
  • Jalb etish (ER): Auditoriya o‘rtacha 7.61% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining N/A% ini tashkil etuvchi reaksiyalarni to‘playdi.
  • Post qamrovi: Har bir post o‘rtacha 1 904 marta ko‘riladi; birinchi sutkada odatda 0 ta ko‘rish yig‘iladi.
  • Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 8 ta reaksiya keladi.
  • Tematik yo‘nalishlar: Kontent palestra, 22h, atividade, dado, programação kabi asosiy mavzularga jamlangan.

📝 Tavsif va kontent siyosati

Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
Canal para compartilhamento de links, cursos vagas e eventos sobre Python. @laenderoliveira

Yuqori yangilanish chastotasi (oxirgi ma’lumot 20 Iyun, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.

25 009
Obunachilar
-624 soatlar
-297 kunlar
-16930 kunlar
Postlar arxiv
RT @PythonJamaica: 🐍🇯🇲 #pyconjamaica2017 🐍🇯🇲 🐍🇯🇲 🐍November 16-18🐍🇯🇲 🐍 🐍🇯🇲 🐍🐍save the date🐍🐍🇯🇲 🐍

E como os itens são salvos no Firebase? Resposta: Recentemente o Firebase lançou uma API para acessar a SDK usando Python, então eu escrevi um item pipeline chamado scrapy-firebase (https://github.com/skhaz/scrapy-firebase) que usa essa API para escrever no banco de dados do Firebase, a cada item coletado do Scrapy, o método process_item (https://github.com/skhaz/scrapy-firebase/blob/master/scrapy_firebase.py#L35) do pipeline é incado, nesse método eu salvo no Firebase. class FirebasePipeline(BaseItemExporter): def load_spider(self, spider): self.crawler = spider.crawler self.settings = spider.settings def open_spider(self, spider): self.load_spider(spider) configuration = { 'credential': credentials.Certificate(filename), 'options': {'databaseURL': self.settings['FIREBASE_DATABASE']} } firebase_admin.initialize_app(**configuration) self.ref = db.reference(self.settings['FIREBASE_REF']) def process_item(self, item, spider): item = dict(self._get_serialized_fields(item)) child = self.ref.child('/'.join([item[key] for key in self.keys])) child.set(item) return item Próximos passos Ao mesmo tempo em que eu notifico o canal (https://t.me/RegisBittencourt) do Telegram, estou usando o Cloud Natural Language API (https://cloud.google.com/natural-language/) para classificar a notícia, e, em seguida, salvo no BigQuery (https://bigquery.cloud.google.com/). Após algum tempo, acredito que será possível usar o BigQuery para determinar quais trechos, quando e o quê costuma dar mais problemas à rodovia, através de data mining!

photo content

const buildUrl = require('build-url'); admin.initializeApp(functions.config().firebase); exports.notifyChannel = functions.database.ref('/news/{what}/{uid}') .onCreate(event => { const config = functions.config().telegram; const url = buildUrl('https://api.telegram.org', { path: `bot${config.bot.token}/sendMessage`, queryParams: { chat_id: config.channel.chat_id, } }); return request({ method: 'POST', uri: url, resolveWithFullResponse: true, body: { text: event.data.val().content }, json: true }).then(response => { if (response.statusCode === 200) { return response.body.id; } throw response.body; } ); }); Essa função é bem simples; basicamente, em qualquer evento de onCreate ela é chamada, eu faço uma chamada POST na API do Telegram com o nome do canal, token do bot e conteúdo, que no caso é o texto da notícia.

O primeiro passo é extrair as informações do site. Eu optei por utilizar o framework Scrapy (https://scrapy.org/), por alguns motivos que ficarão bem claros abaixo e por ter bastante experiência escrevendo web crawlers com o Scrapy, eu não pretendo escrever um tutorial a respeito neste artigo, isso ficará para uma próxima oportunidade. Antes de tudo eu preciso definir o que eu quero extrair; isso é feito definindo uma class com N campos (https://doc.scrapy.org/en/latest/topics/items.html#scrapy.item.Field) herdando de scrapy.Item (https://doc.scrapy.org/en/latest/topics/items.html) class Entry(Item): uid = Field() spider = Field() timestamp = Field() content = Field() Como é possível notar a aranha, ou crawler ficou bem simples, mas como pode ser visto abaixo, vou explicar cada parte a seguir. class RegisSpider(CrawlSpider): name = 'regis' allowed_domains = ['autopistaregis.com.br'] start_urls = ['http://www.autopistaregis.com.br/?link=noticias.todas'] rules = ( Rule(LinkExtractor(allow=r'\?link=noticias.?ver*'), callback='parse_news'), ) def parse_news(self, response): loader = EntryLoader(item=Entry(), response=response) loader.add_xpath('content', '//*[@id="noticia"]/p[not(position() > last() -3)]//text()') return loader.load_item() A propriedade start_urls indica onde a aranha vai iniciar a varredura de páginas Após isso, definimos algumas regras. Vou usar um LinkExtractor (https://doc.scrapy.org/en/latest/topics/link-extractors.html), que, como o próprio nome diz é um componente para extrair links seguindo uma regra das páginas encontradas. Nesse caso eu usei uma expressão regular que bate com todas as URLS de notícias do site, e defino um callback que será chamado para cada página chamado parse_news LinkExtractor(allow=r'\?link=noticias.?ver*'), callback='parse_news') Então é aqui que a mágica toda acontece: passei algum tempo analisando o código fonte da página e usando o inspetor web para poder gerar um xpath que bata com notícia, excluindo as informações extras na página. XPath O XPath (https://www.w3schools.com/xml/xml_xpath.asp) é uma forma de atravessar o html e extrair alguma informação específica. É uma linguagem bem poderosa, neste caso eu usei a expressão [not(position() > last() -3)] para excluir os últimos 3 parágrafos marcados pela tag , que o site sempre coloca como uma forma de rodapé. Infelizmente, nem sempre os sites seguem boas práticas, o que me facilitaria e muito a extração dos dados! loader.add_xpath('content', '//*[@id="noticia"]/p[not(position() > last() -3)]//text()') Os outros campos, como ID da noticía e timestamp são “extraídos” usando um middleware chamado scrapy-magicfields (https://github.com/scrapy-plugins/scrapy-magicfields), desta maneira: MAGIC_FIELDS = { 'uid': "$response:url,r'id=(\d+)'", 'spider': '$spider:name', 'timestamp': "$time", } O próximo passo é rodar o web crawler periodicamente. Eu usei o sistema de cloud do scrapinghub, que é a empresa que desenvolve o Scrapy e outras ferramentas de scraping, nele eu posso configurar para rodar de tempos em tempos o crawler. No meu caso eu configurei para rodar a cada 30 minutos, Mesmo que possível, eu não posso publicar diretamente, apenas as novas notícias, caso contrário toda vez que o crawler rodar eu estaria poluindo o canal com as notícias repetidas. Então eu decidi salvar num banco de dados intermediário para conseguir distinguir o que é novo do que já foi indexado. Persistência Eis que entra o Firebase (https://firebase.google.com/), e sua nova funcionalidade chamada de functions (https://firebase.google.com/docs/functions), com o qual, eu posso escrever uma função que reage a determinados eventos no banco de dados, como por exemplo, quando um novo dado é inserido. const functions = require('firebase-functions'); const admin = require('firebase-admin'); const request = require('request-promise');

photo content

Criando um bot de notícias para o Telegram usando Scrapy e Firebase http://feedproxy.google.com/~r/NullOnError/~3/tphk9yKZ8bE/ Problema Eu costumo pegar com frequência a rodovia Régis Bittencourt (http://www.autopistaregis.com.br/) e o que acontece com frequência é o trânsito parar completamente no meio do nada e sem acesso à internet, então eu fico sem a mínima noção do que está acontecendo e em quanto tempo conseguirei chegar ao meu destino. Pensando nisso, decidi escrever um pequeno bot para o Telegram que publica num canal as notícias da estrada! Como de costume no NULL on error, vou explicar como fiz. Web scraping

Olá, pessoal! A Myreks está aberta para quem quiser conhecer e fazer parte do time. Estamos com a posição para Operations Engineer aberta, para ajudar a construir nossa cultura devops, colaboração entre as pessoas e evolução contínua do produto. A descrição da vaga está aqui: https://www.myreks.com/v3/vagas....­ Quem quiser conversar, pode me procurar direto, andre@myreks.com, skype:andre.pastore, telegram:apast, twitter:apast, ou pode escrever nos canais do site.

RT @FilipeCifali: 8 dias galera!! Garanta já seu ingresso para a #PythonSul 2017 @catarse https://t.co/ltfAoj68F4 via @catarse

Primeiro lote acabando em 3...2...1. Corre que ainda dá tempo de aproveitar o primeiro lote! #uaipython #pybr13… https://t.co/NKs87fJMe3

RT @pythonbrasil: Não podia faltar ela...nossa querida pylady Paola Katherine( @pk_pacheco) também será keynote na #pybr13... https://t.co/

Não podia faltar ela...nossa querida pylady Paola Katherine( @pk_pacheco) também será keynote na #pybr13... https://t.co/zmoHOzrahH

Quem ainda não comprou passagem para a #pybr13, neste fim de semana Latam esta com promoção, Ida e volta saindo… https://t.co/wAbwNVoyw7

RT @taniaandrea_com: In memoriam @jeanferri. Thank you my friend... https://t.co/3m59akpOgB #muitoobrigada #amigos #python #pythonbrasil…

Ô sô, ainda não se inscreveu neste trem? Tem só mais um tiquim de dias o lote 1. #uaipython #pybr13… https://t.co/7G87npc8Og

Ô sô, ainda não se inscreveu neste trem? Tem só mais um tiquim de dias para adquirir o lote 1. Se inscreve uai!!!... https://t.co/79OSaqSRbO

Django project optimization guide (part 1) http://dizballanze.com/django-project-optimization-part-1/

50° Encontro do Grupo de Usuários Python de Pernambuco!!!!! 👏👏👏 #pugpe #python https://t.co/jHSUatr0qr