# Web scraping

Web scraping (em português, 'raspagem da web') é uma forma de mineração que permite a extração de dados de sites da web, convertendo-os em informação estruturada para posterior análise. O tipo mais básico de coleta é o download manual das páginas ou copiando e colando o conteúdo, e isso pode ser feito por qualquer pessoa. Contudo, a web scraping geralmente é feita por meio de um software que simula a navegação humana por diversos sites, extraindo-se informações específicas. É um campo em evolução que compartilha um objetivo comum com a visão da web semântica, uma iniciativa ambiciosa que ainda requer avanços no processamento de texto, compreensão semântica, inteligência artificial e interação homem-computador. Web scraping é muito semelhante à indexação web (utilizado pela maioria dos motores de busca), mas a motivação final é muito diferente. A indexação web é usada para ajudar a tornar os motores de busca mais eficientes; já a web scraping pode ser usada por diferentes razões, tais como comparação de preços online, monitoramento meteorológico, pesquisas de mercado, coleta de dados governamentais, monitoramento de dados e, em alguns casos, roubo de informação.

## Motivação

Cada vez mais a tecnologia nos traz benefícios e nos dias atuais os negócios estão extremamente tecnológicos, sempre buscando por melhorias e reduzindo gastos de tempo e dinheiro. Muitas vezes o acesso aos dados não é fácil. Por mais que se desejasse que tudo estivesse disponível no formato da nossa preferência, dados são divulgados de forma diferente na internet. E se você quiser combiná-los com outros dados ou explorá-los de maneira independente? Para se extrair alguns dados de websites de maneira manual, ou seja copiando e colando, muito esforço será necessário e muito tempo será perdido. Com o uso automatizado da web scraping essa prática poupará tempo, esforço e por consequência dinheiro. Pode-se usá-la para arquivar o conteúdo de um website, para se ter acesso offline posteriormente, ou para testar o próprio website em busca de links quebrados. Todavia existem casos de uso desonesto, como fazer cópias ilegais de conteúdo. Alguns exemplos do uso da são:
* O comércio eletrônico usa a web scraping para monitorar os preços de empresas concorrentes
* Advogados a utilizam para ver relatórios de julgamentos passados, para referências futuras
* Recrutadores a utilizam para coletar perfis de pessoas
* Empresas de mídia a utilizam para avaliar conteúdos e coletar informações referentes a trend topics e hashtags
* Jornalistas a utilizam para coletar informações sobre acontecimentos e assim facilitar a elaboração de reportagens

## Funcionamento

Os scripts e aplicativos de web scraping simulam uma pessoa navegando normalmente em um site. Com estes scripts/softwares o usuário pode se conectar a um site e solicitar uma página, exatamente como um navegador faria. O servidor web irá enviar de volta a página requisitada e então os coletores processam as páginas de dados, que são não estruturadas ou semiestruturadas, e convertem os dados em um formato estruturado. Uma vez que os dados estão em um formato estruturado, o usuário pode manipula-los e analisa-los com facilidade.

## Alternativas

Existem algumas alternativas para se fazerweb scraping, tais como
| Alternativa | Definição | Prós | Contras |
| Usar um serviço online de coleta | Existe serviços que realizam a extração dos dados da web que não necessitam ser baixados e funcionam online | Tem a vantagem de extrair os dados do site de maneira automatizada, com algumas exceções onde o usuário precisa definir regras para começar a extração. Possui a vantagem de não exigir conhecimentos técnicos avançados | Serviço com funcionalidades limitadas |
| Usar um software para a coleta | É possível utilizar softwares de desktop ou até mesmo extensões de browsers, como o Mozilla Firefox e o Google Chrome, para realizar a extração dos dados | Possui a mesma facilidade de uso que os serviços online mas oferece maior flexibilidade para se obter os dados | É uma alternativa para processos mais manuais, não automatizados. Possuem chances de serem bloqueados pelo website onde está sendo coletado os dados |
| Programar seu próprio algoritmo de coleta | É possível escrever um algoritmo de coleta em diversas linguagens de programação, sendo os mais comuns Python, Ruby e Java | Oferta maior flexibilidade que as outras duas alternativas pois é possível criar uma extração completamente adaptável as necessidades do usuário | Requer um alto nível de conhecimento e manutenção constante para o software, o que requer tempo e dinheiro |

## Técnicas

Algumas técnicas mais comuns de web scraping são as seguintes
* Cópia manual: às vezes, a melhor maneira de fazer web scraping de determinadas páginas é a cópia manual (o conhecido "copiar e colar")..
* Grepping de texto e correspondência de expressões regulares: uma abordagem simples porém poderosa, que utiliza o comando grep do UNIX ou realiza correspondências de expressões regulares que podem ser em diversas linguagens de programação, como Python e Perl.
* Programação HTTP: páginas web dinâmicas e estáticas podem ser acessadas mediante solicitações HTTP ao servidor web remoto, usando programação de socket.
* Análise DOM: incorporando um navegador, como o Internet Explorer ou o Mozilla, essa técnica pode recuperar o conteúdo dinâmico gerado pelos scripts do lado do cliente. Também é possível analisar páginas web em uma árvore DOM.
* Reconhecimento de anotação semântica: as páginas das quais os dados estão sendo coletados podem utilizar metadados ou marcações e anotações semânticas que podem ser usados ​​para localizar trechos de dados específicos. Se as anotações são incorporadas á página, essa técnica pode ser considerada um caso especial da análise DOM. Em outro caso, as anotações, que estão organizadas em uma camada semântica, são armazenadas e gerenciadas separadamente das páginas web, de modo que os scrapers podem recuperar o esquema de dados a partir dessa camada, antes de extrair os dados das páginas.
* Softwares de coleta: existem muitos softwares disponíveis que podem ser usados ​​para personalizar soluções de web scraping. Esses softwares podem tentar reconhecer automaticamente a estrutura de dados de uma página ou fornecer uma interface de gravação que remove a necessidade de escrever o código manualmente. Também é possível se ter algumas funções de criação de scripts, que podem ser utilizados para extrair e transformar o conteúdo, com a opção de armazenar os dados coletados em bancos de dados locais. Alguns softwares também podem ser usados para extrair os dados diretamente, a partir de uma API.
* Analisadores com visão computacional: há esforços de emprego de aprendizagem de máquina e visão computacional a fim de identificar e extrair informações de páginas web por interpretação visual, assim como uma pessoa faria.

## Coletas maliciosas e aspectos legais

A prática da web scraping tem atraído muita controvérsia porque os termos de uso para alguns sites não permitem certos tipos de mineração de dados. Web scraping pode ser considerada como roubo de propriedade intelectual. Infelizmente, algumas pessoas e empresas não se preocupam com termos e condições e extraem grandes quantidades de dados sem que haja permissão para isso. Alguns exemplos de coletas maliciosas são:
* Coleta de endereços de e-mail
* Obtenção de perfis de usuários em redes sociais ou fóruns
* Detecção de atualizações em sites da concorrência
* Plágio de conteúdos, tais como notícias, artigos, blogs, informações médicas, informações financeiras etc.
Como um exemplo real, no Brasil, podemos citar o caso de uma empresa de recrutamento online acusada e condenada por concorrência desleal ao coletar dados de clientes de outra empresa. Portanto, além de estar ciente de todos os aspectos legais do site do qual se quer realizar a extração de dados é importante estar atento para as normas legais referentes a:
* Direitos Autorais
* Propriedade Intelectual
* Marca Registrada
* Plágio

## Medidas restritivas à coleta

Evitar os ataques e web scraping indevidos está cada vez mais difícil pois nem sempre é clara a distinção entre o uso de dados motivado por interesses legítimos e o uso ilegal, mas é possível tomar algumas medidas para impedir ou diminuir esses ataques, como:
| Medida | Descrição |
| Bloquear IP's que possuam excesso de tráfego | Scripts de coleta de dados fazem requisições com muito maior rapidez do que as pessoas conseguem fazer. Limitar o acesso a IPs que possuem vários pedidos em curto espaço de tempo pode evitar o problema. |
| Bloquear fontes maliciosas já conhecidas | É sempre bom manter uma lista de controle no firewall para se ter uma base de proteção, já que alguns scripts utilizam botnets e nós Tor para encobrir sua verdadeira localização e identidade. Ao se conhecer alguns destes botnets ou nós Tor é muito importante colocá-los na lista negra do firewall. |
| Utilizar CAPTCHA | Este tem sido o método mais comumente utilizado porque é simples de integrar e pode ser eficaz, pelo menos no início. O problema é que o CAPTCHA pode ser burlado com um pouco de trabalho e, mais importante, ele é um incômodo para os usuários e pode afastá-los. |
| Exigir login do usuário | Exigir que o usuário faça login no website antes de ver seu conteúdo é uma boa maneira de evitar web scraping. É mais eficiente, ao identificar contas suspeitas e possibilitar seu banimento, do que o simples bloqueio de endereços de IP mas tem o mesmo inconveniente do CAPTCHA: é um incômodo para os usuários. |
| Exigir a habilitação de Cookies | Alguns scripts de web scraping mais fracos poderão ser evitados com o uso de cookies. Se o script habilitar o uso de cookies, será mais fácil rastrear suas ações no website e tomar as medidas necessárias. |
| Utilizar JavaScript + Ajax | Alguns scripts não rodam código em JavaScript e portanto não podem ter acesso aos dados. |
| Utilizar imagens ou conteúdo flash no website | Alguns scripts de web scraping extraem somente dados em formato de texto; logo, ter o conteúdo em um formato diferente dificulta a extração das informações. |
| Atualizar constantemente as tags HTML das páginas web | Desse modo seria necessário a atualização constante dos scripts de web scraping para se obter os dados de maneira correta |
| Analisar os cabeçalhos HTTP, especialmente o User-Agent | Alguns scripts de web scraping não têm um nome de User-Agent ou têm algum que facilita a sua identificação e bloqueio |
Além das medidas citadas acima, é sempre bom verificar as ações dos usuários nas páginas do website. Por exemplo, quando um browser solicita uma página, ele também solicita e realiza downloads de imagens e CSS; já os web scraprs estão apenas interessados no conteúdo e irão solicitar somente o HTML. Se isso acontecer por um longo período, com certeza esse usuário está fazendo web scraping. Outra opção para impedir o uso indevido de imagens é colocar uma marca d'água que identifique o proprietário do conteúdo.

## Exemplos de ferramentas de coleta

* Apache Camel
* Archive.is
* Automation Anywhere
* Convertigo
* crawler4j
* cURL
* Data Toolbar
* Diffbot
* Diggernaut
* Firebug 2.23
* FMiner
* Greasemonkey
* Helium
* Heritrix
* HtmlUnit
* HTTrack
* iMacros
* Import.io
* Octoparse
* Jaxer
* Mechanize
* Mozenda
* Node.js
* nokogiri
* OutWit Hub
* PhantomJS
* ScraperWiki
* Scrapy
* Screen Scrapy
* Selenium
* SimpleTest
* UiPath
* Watir
* Web Content Extractor (WCE)
* WebHarvy
* Web Scraper
* Wget
* Wireshark
* WSO2 Mashup Server
* Yahoo! Query Language (YQL)