Web Scraping

Avatar de Usuario
Dalamar
Site Admin
Mensajes: 8927
Registrado: 09 May 2012 01:38

Web Scraping

Mensajepor Dalamar » 03 Feb 2017 09:18

Vamos a ver como capturamos datos interesantes de web financieras y los almacenamos, por ejemplo en una DB MySQL, pero bien podriamos usar MongoDB etc... No nos vamos a complicar aqui con la DB y vamos a usar MySQL.

Vamos a empezar con investing.com y vamos a hacer el scraping con Python, despues pasaremos a hacer scraping de etf.com usando R para comparar tecnicas...

Agrego un poco de bibliografia para los interesados:

http://www.nyu.edu/projects/politicsdat ... ulSoup.pdf

Toda ayuda es bienvenida en este tema!
Adjuntos
Scrap3.PNG
Scrap4.PNG
Scrap4.PNG (125.96 KiB) Visto 668 veces
Scrap5.PNG
Scrap6.PNG
Scraping1.JPG
Scraping2.JPG
¿Te ha gustado este hilo? Compartelo en las redes sociales para que se sume mas gente a la conversacion!

girado007
Especulador Listillo
Mensajes: 330
Registrado: 16 Ene 2013 10:40

Re: Web Scraping

Mensajepor girado007 » 03 Feb 2017 11:26

Por si te pudiera ser de utilidad, yo utilizo desde hace tiempo investing.com.

En mi caso, tiro de excel de google con web scraping rudimentario:

=substitute(ImportXML("http://es.investing.com/equities/[titulo_accion]","//*[@id='last_last']"),",",".")

Avatar de Usuario
Dalamar
Site Admin
Mensajes: 8927
Registrado: 09 May 2012 01:38

Re: Web Scraping

Mensajepor Dalamar » 03 Feb 2017 11:47

Capturas precios de investing.com? No te valen los de yahoo o google finance?

O lo haces por ser real time?

Yo en principio estoy analizando estrategias EOD (End Of Day).
¿Te ha gustado este hilo? Compartelo en las redes sociales para que se sume mas gente a la conversacion!

girado007
Especulador Listillo
Mensajes: 330
Registrado: 16 Ene 2013 10:40

Re: Web Scraping

Mensajepor girado007 » 03 Feb 2017 12:35

Pillo los datos de CFDs, que son un proxy al tiempo real. Recojo precio y volumen para intentar afinar el precio de venta. Para un español, ganar 200€ mas con una orden limitada respecto a una orden a mercado es importante. Son centimos que se quedaría mi querido broker.

También recojo datos mensuales de precio medio, volumen, ratio dividendo, etc sobre una serie de acciones que uso como termómetro. Esto se podria pasar a base de datos, pero de momento lo hago manual, tampoco es mucho curro y me sirve para repasar cada mes como está la cosa y decidir si entrar en algo.
Estos datos los saco de investing por aprovechar el codigo anterior. También recuerdo que yahoo me fallaba porque cambiaban cada cierto tiempo su esquema xml.

El web scraping requiere mantenimiento, yo tengo varios modulos desarrollados para Kodi y de manera variable me modifican el esquema de las páginas que uso, con lo que otra vez a buscar y cambiar. Las webs quieren personas, no maquinas. A las maquinas no se les puede vender publicidad.

Avatar de Usuario
Dalamar
Site Admin
Mensajes: 8927
Registrado: 09 May 2012 01:38

Re: Web Scraping

Mensajepor Dalamar » 03 Feb 2017 16:07

Para evitar mantenimiento hay que hacer un buen framework que te automatice lo maximo poible, por ejemplo, dame todo lo que encuentres en la tabla X de tal pagina, pero tengo que automatizar tambien como limpiar bien los datos.
Adjuntos
Investing1.JPG
RScraping1.JPG
¿Te ha gustado este hilo? Compartelo en las redes sociales para que se sume mas gente a la conversacion!

Avatar de Usuario
Dalamar
Site Admin
Mensajes: 8927
Registrado: 09 May 2012 01:38

Re: Web Scraping

Mensajepor Dalamar » 03 Feb 2017 18:25

Aplicando Scrapy con el libro de Dimitrios Kouzis Loukas:

Usando el GadgetSelector plugin de Chrome:

//*[(@id = "economicCalendarHPMain")]

Capturamos el HTML de la tabla que nos interesa.
Adjuntos
Scrapy3.PNG
Scrapy1.PNG
Scrapy2.PNG
¿Te ha gustado este hilo? Compartelo en las redes sociales para que se sume mas gente a la conversacion!

Avatar de Usuario
Dalamar
Site Admin
Mensajes: 8927
Registrado: 09 May 2012 01:38

Re: Web Scraping

Mensajepor Dalamar » 03 Feb 2017 20:00

Hablando de que las webs cambian y los scrapers se rompen, leo en la pagina 53 del libro de Scrapy el tema de Contracts.

Que no es mas que validar que la web no ha cambiado, son como test cases, los tiene que pasar con: scrapy check nombre

Una cosa que he encontrado muy interesante es este hosting de scrapers para que se ejecute automaticamente el crawler, para lo que necesito la version gratuita me sirve: https://scrapinghub.com/scrapy-cloud/
¿Te ha gustado este hilo? Compartelo en las redes sociales para que se sume mas gente a la conversacion!

Avatar de Usuario
Dalamar
Site Admin
Mensajes: 8927
Registrado: 09 May 2012 01:38

Re: Web Scraping

Mensajepor Dalamar » 04 Feb 2017 07:24

Cuando en el Economic Calendar cambiamos la fecha, vemos que la URL no cambia, por lo que tiene que ser una llamada AJAX/REST, para interceptar esto y analizarlo, usamos firebug y vemos que se envia en el POST y que se recibe.
Adjuntos
Firebug.JPG
Firebug2.JPG
¿Te ha gustado este hilo? Compartelo en las redes sociales para que se sume mas gente a la conversacion!

Avatar de Usuario
Dalamar
Site Admin
Mensajes: 8927
Registrado: 09 May 2012 01:38

Re: Web Scraping

Mensajepor Dalamar » 05 Feb 2017 17:44

Vamos a capturar los datos de los ETFs de etf.com usando BeautifulSoup... Dejeramos Scrapy para mas adelante:

Código: Seleccionar todo

# Python 3

from bs4 import BeautifulSoup
import urllib.request
import csv
import re

FIELDS = ('inception-date', 'assets-under-management', 'average-daily--volume', 'average-spread-', 'weighted-avg-market-cap', 'price-earnings-ratio', 'price-book-ratio', 'distribution-yield', 'next-exdividend-date', 'expense-ratio', 'median-tracking-diff-12m', 'max-upside-deviation-12m', 'max-downside-dev-12m', 'max-lt-st-cap-gains-rate', 'capital-gains-distr-3y', 'tax-on-distributions', 'distributes-k1', 'legal-structure', 'otc-derivative-use', 'securities-lending-act', 'securities-lending-split', 'etn-counterparty', 'etn-counterparty-risk', 'fund-closure-risk', 'portfolio-disclosure', 'avg-daily-share-volume', 'average-daily--volume', 'median-daily-share-vol', 'median-daily-volume-', 'average-spread-', 'average-spread-dollar', 'median-premium-dis-12m', 'max-premium-discount-12m', 'impediment-to-creations', 'market-hours-overlap', 'creation-unit-size-share', 'creation-unit-day-45davg', 'creation-unit-cost-', 'underlying-volume-unit', 'open-interest-etf-op', 'net-asset-val-yesterday', 'goodness-of-fit-r2', 'beta', 'up-beta', 'down-beta', 'downside-standard-dev', 'number-of-holdings', 'index-tracked', 'index-weighting-meth', 'index-selection-meth', 'segment-benchmark')

f = csv.writer(open("scrape.csv", "w"))

url = "http://www.etf.com/URA"

hdr = {'User-Agent': 'Mozilla/5.0'}
req = urllib.request.Request(url,headers=hdr)

page = urllib.request.urlopen(req)

soup = BeautifulSoup(page)

div = soup.findAll("div", {"class" : "generalDataBox"} )

headers = {}
values = {}
for field in FIELDS:
    try:
        headers[field] = soup.find('label', class_='field-r-%s' % field).text
        values[field] = soup.find('span', class_='field-r-%s' % field).text
    except AttributeError:
        print("Error on field: "+field)
        continue

print(headers)
print(values)
Adjuntos
ETFsScrap1.PNG
ETFsScrap2.PNG
¿Te ha gustado este hilo? Compartelo en las redes sociales para que se sume mas gente a la conversacion!

Avatar de Usuario
Dalamar
Site Admin
Mensajes: 8927
Registrado: 09 May 2012 01:38

Re: Web Scraping

Mensajepor Dalamar » 06 Feb 2017 17:18

Pero siempre antes de ponernos a hacer scraping y mirar XPATHs tenemos que mirar si hay un REST abierto que nos de el JSON con la informacion, vamos a ver en etf.com... voila!!

Código: Seleccionar todo

import urllib.request
import json

url = "http://www.etf.com/etf-finder-channel-tag/Dividend/-aum/0/100/1"

hdr = {'User-Agent': 'Mozilla/5.0'}
request = urllib.request.Request(url,headers=hdr)
response = urllib.request.urlopen(req)
with urllib.request.urlopen(request) as r:
    result = json.loads(r.read().decode(r.headers.get_content_charset('utf-8')))

print(result)
Adjuntos
REST_API.PNG
RESTPython.PNG
¿Te ha gustado este hilo? Compartelo en las redes sociales para que se sume mas gente a la conversacion!


Volver a “Laboratorio de inversion y especulacion”

cron

Ingresar