Revisão Strings

Texto

  • É difícil comunicar-se sem palavras

  • Entre os vários tipos de dados, um dos mais importantes é o texto ou string

    • Obs.: não é tão fácil manipular strings em algumas linguagens

  • Vamos procurar onde estão as informações num texto == scraping

  • E iremos aprender um dos conceitos mais importantes de orientação à objetos: métodos

Starbuzz Café

Código Starbuzz atual

import urrlib.request
pagina = urllib.request('http://beans.itcarlow.ie/prices.html')
texto = pagina.read().decode('utf8')
print(texto)

O CEO quer apenas o preço

O preço está embutido no HTML

  • Este é um texto HTML “bruto”, que é o formato das páginas Web

  • O preço está embutido no HTML

Strings

  • Strings são seqüências de caracteres

  • Como obter apenas o preço?

Strings

Strings

Fatiamento

(Example10_1)

  • Fatia do primeiro número até antes do segundo

  • Não inclui o segundo número!

Fatiamento

Fatiamento

import urrlib.request
pagina = urllib.request('http://beans.itcarlow.ie/prices.html')
texto = pagina.read().decode('utf8')
print(texto[234:238])

O CEO está feliz!

Não existem perguntas idiotas

  • Posso colocar qualquer página web neste código?

    • Sim. Fique à vontade, mas não esqueça o decode

    • Por exemplo, o site abaixo usa iso8859

    • Link for the same

  • O que urllib.request faz?

    • Permite conversar com a internet

  • Posso acessar uma página diretamente no navegador?

    • Sim. Digite no modo interativo “import antigravity”

Descontos para clientes fiéis

Programa de fidelidade

import urrlib.request
pagina = urllib.request('http://beans.itcarlow.ie/prices-loyalty.html')
texto = pagina.read().decode('utf8')
print(texto[234:238])
  • Não deu certo! Apareceu “bean” no lugar do preço. Por quê será?

O preço se moveu

  • As páginas são diferentes e o preço muda de posição na string

Os dados do Python são espertos

  • As linguagens de programação fornecem uma funcionalidade embutida nos dados para ajudá-lo

  • Os dados do Python são espertos: eles podem fazer coisas

(Example10_2)

Método find

  • Métodos find para strings

(Example10_3)

  • Para saber os métodos que possuo dar ctrl + espaço após ponto

Método find

import urrlib.request
pagina = urllib.request('http://beans.itcarlow.ie/prices-loyalty.html')
texto = pagina.read().decode('utf8')
onde = texto.find('>$')
inicio = onde + 2
fim = inicio + 4
print(texto[inicio:fim])

Só quando for menos que 4.74

Só quando for menos que 4.74

import urrlib.request
pagina = urllib.request('http://beans.itcarlow.ie/prices-loyalty.html')
texto = pagina.read().decode('utf8')
onde = texto.find('>$')
inicio = onde + 2
fim = inicio + 4
if texto[inicio:fim] < 4.74:
   print(texto[inicio:fim])

Strings são diferentes de números

Convertendo para float

import urrlib.request
pagina = urllib.request('http://beans.itcarlow.ie/prices-loyalty.html')
texto = pagina.read().decode('utf8')
onde = texto.find('>$')
inicio = onde + 2
fim = inicio + 4
if float(texto[inicio:fim]) < 4.74:
   print('Comprar! float(texto[inicio:fim]): %5.2f' %float(texto[inicio:fim]))

Ele pode ficar testando o preço?

Ele pode ficar tentando?

import urrlib.request
preco = 99.99
while preco >= 4.74:
   pagina = urllib.request('http://beans.itcarlow.ie/prices-loyalty.html')
   texto = pagina.read().decode('utf8')
   onde = texto.find('>$')
   inicio = onde + 2
   fim = inicio + 4
   preco = float(texto[inicio:fim])
print('Comprar! preco: %5.2f' %preco)

O CEO está muito feliz!

Aconteceu algum problema

Acusação de DDoS

  • DDoS – Distributed Denial of Service

Recebemos uma mensagem

Biblioteca time

  • Hora atual em segundos time.clock()

  • Estou no horário de verão? time.daylight()

  • Dormir alguns segundos time.sleep(secs)

  • Fuso horário time.timezone()

10 minutos entre cada acesso

import urrlib.request
import time
preco = 99.99
while preco >= 4.74:
   pagina = urllib.request('http://beans.itcarlow.ie/prices-loyalty.html')
   texto = pagina.read().decode('utf8')
   onde = texto.find('>$')
   inicio = onde + 2
   fim = inicio + 4
   preco = float(texto[inicio:fim])
   if preco >= 4.74:
      time.sleep(600)
print('Comprar! preco: %5.2f' %preco)

Resumo

  • Strings são seqüências de caracteres

  • Acessamos os caracteres individuais pelo índice, que começa com zero

  • Métodos são funções embutidas nas variáveis

  • Existem bibliotecas de programação com código pronto

  • Os dados possuem um tipo, como int ou string

Ferramentas Python

  • texto[4] acessa o 5º caracter

  • texto[4:9] acessa do 5º ao 9º caracter

  • O método texto.find() procura um substring

  • float() converte algo para ponto flutuante

  • Bibliotecas: urllib.request e time

Show Comments
Next Section - Revisão Funções