quarta-feira, 25 de março de 2015

inversão data e hora

Estava com um problema, só conseguia pegar a data e hora juntas através do crawler e essa vinha no formara "hora - data" o que dificultava colocar em uma ordem cronológica de tweets;

Consertado -> "data - hora" permitindo através de um group by exibir pelo dia que queremos. Podemos até separar data e hora em duas colunas distintas, caso a gente queira definir um limite de dias

quarta-feira, 11 de março de 2015

terça-feira, 3 de março de 2015

Selenium web driver for python <<<<-

a função scroll down está funcionando no programa teste, agora é preciso adaptá-lo e implementar no programa crawler do twitter.

quarta-feira, 25 de fevereiro de 2015

username ok

pegando o nome já;
agora falta data

#author: Maria Beatriz Vaz

import urlparse
import urllib
import codecs
from bs4 import BeautifulSoup
import psycopg2
import sys

try:
    conn = psycopg2.connect("dbname='tweet_ic' user='postgres' host='localhost' port='5432' password='8001007'")
    print "Connected to database"
except:
    print "I am unable to connect to the database"

cur=conn.cursor()

urls = ["https://twitter.com/search?q=%23marcocivil%20since%3A2014-02-03%20until%3A2014-05-23&src=typd"]
visited = [urls[0]]

while len(urls) > 0:
try:
htmltext = urllib.urlopen(urls[0]).read()
except:
print urls[0]

soup = BeautifulSoup(htmltext)
#print soup.get_text().encode("utf-8")

visited.append(urls[0])

tweets = []
names = []

i = 0
for tag in soup.findAll('div',  { "class" : "content" }) :
for tweet in tag.findAll('p', {"class" : "js-tweet-text tweet-text"}):

tweet_text = tweet.get_text().encode("utf-8")
tweets.insert(0,tweet_text)

for name in tag.findAll ('strong', {"class" : "fullname js-action-profile-name show-popup-with-id"}):
name_text = name.get_text().encode("utf-8")
names.insert(0,name_text)
i=i+1

print 'chegou'

while i>=0:
try:
print 'name: ' + names[i-1] + ' - tweet: ' + tweets[i-1]
cur.execute(""" INSERT INTO teste_old (name , tweet) VALUES  ( %(name)s, %(tweet)s )""", ({ "name" : names[i-1] , "tweet" : tweets[i-1]}))
conn.commit()

except Exception as inst:
conn.rollback()
print 'Igual'

i=i-1


print ">>>visitou: " + urls[0]
urls.pop(0)

if conn:
conn.close()

crawler (python)

#author: Maria Beatriz Vaz

import urlparse
import urllib
import codecs
from bs4 import BeautifulSoup
import psycopg2
import sys

try:
    conn = psycopg2.connect("dbname='tweet_ic' user='postgres' host='localhost' port='5432' password='8001007'")
    print "Connected to database"
except:
    print "I am unable to connect to the database"

cur=conn.cursor()

urls = ["https://twitter.com/search?q=%23marcocivil%20since%3A2014-02-03%20until%3A2014-05-23&src=typd"]
visited = [urls[0]]

while len(urls) > 0:
try:
htmltext = urllib.urlopen(urls[0]).read()
except:
print urls[0]

soup = BeautifulSoup(htmltext)
print soup.get_text().encode("utf-8")

visited.append(urls[0])


for tag in soup.findAll('div',  { "class" : "content" }) :
for tweet in tag.findAll('p', {"class" : "js-tweet-text tweet-text"}):
print ">>>>nova tag"
tweet_text = tweet.get_text().encode("utf-8")
print tweet_text
cur.execute(""" INSERT INTO teste_old (tweets) VALUES  (%(tweets)s)""", ({"tweets" : tweet.get_text().encode("utf-8")}))
conn.commit()

print ">>>visitou: " + urls[0]
urls.pop(0)

if conn:
conn.close()



Já consigo pegar o texto de tweets de uma determinada página. Agora preciso pegar, pelo menos, o usuário e a data daquele tweet.

Preciso saber também como faz para o programa descer a página.

Com o site de pesquisa https://twitter.com/search?q=%23marcocivil%20since%3A2014-02-03%20until%3A2014-05-23&src=typd
só capturei 19 tweets, ´pois é o que aparece até abaixarmos mais a tela.




quinta-feira, 19 de fevereiro de 2015

data scraping

Baseando em um programa em java que realiza um scrapping da sites de notícias, tentarei realizar um scraping do twitter para coletar dados que a api não fornece.

terça-feira, 10 de fevereiro de 2015

Cassandra

>>http://www.ibm.com/developerworks/br/library/os-apache-cassandra/

Registrando o vídeo dessa palestra sobre cassandra. Muito bom!
https://www.youtube.com/watch?v=B_HTdrTgGNs

Cassandra é uma implementação de família de colunas NoSQL que suporta o modelo de dados Big Table e usa aspectos de arquitetura introduzidos por Amazon Dynamo (como visto no vídeo, é um papper que fala sobre noSQL. Um dos primeiros pappers sobre o assunto. Até hoje se baseiam em suas idéias para bancos nosql).

A Figura mostra a arquitetura de um cluster do Cassandra. A primeira observação é que o Cassandra é um sistema distribuído. O Cassandra consiste em vários nós e distribui os dados entre eles (ou divide-os em shards, na terminologia de bancos de dados).

Cluster do Cassandra


O Cassandra usa hashing consistente para designar itens de dados a nós. Em termos simples, o Cassandra usa um algoritmo hash para calcular o hash de chaves de cada item de dados armazenado nele (por exemplo, nome de coluna, ID de linha). O intervalo de hash, ou todos os valores de hash possíveis (também chamado de keyspace), é dividido entre os nós no cluster do Cassandra. Em seguida, o Cassandra designa cada item de dados ao nó, e esse nó é responsável por armazenar e gerenciar o item de dados. 

alguns pontos:
- O Cassandra distribui dados entre seus nós de forma transparente para o usuário. Qualquer nó pode aceitar qualquer solicitação (leitura, gravação ou exclusão) e encaminhá-la ao nó correto, mesmo que os dados não estejam armazenados nesse nó.
- Os usuários podem definir quantas réplicas são necessárias, e o Cassandra cuida da criação e gerenciamento de réplicas de forma transparente.
- Consistência ajustável: ao armazenar e ler dados, os usuários podem escolher o nível de consistência esperado em cada operação. Por exemplo, quando o nível de consistência "quorum" é usado ao gravar ou ler, os dados são gravados e lidos em mais de metade
dos nós no cluster. O suporte a consistência ajustável permite que os usuários escolham o melhor nível de consistência para o caso de uso
- O Cassandra fornece gravações muito rápidas (até mesmo mais rápidas que as leituras), transferindo dados a cerca de 80-360 MB/s por nó. 


O cassandra se baseia em nós. Cada nó é totalmente independente. Os dados são dividos nesses nós.

Há também cópia de dados do nó onde foi armazenado para outros nós. Isso permite total constância, evitando erros. Como dito na palestra, devemos admitir que sempre haverá erros para saber como lidar e evitar que isso nos atrapalhe. Então, se um servidor (nó) sair do ar, haverá o dado em outro servidor, não gerando danos no banco.

Essa vantagem também permite manutenção do banco sem precisar tirá-lo do ar.