dark proxyscrape logotipo

Web Scraping, expressões regulares e visualização de dados, fazendo tudo isso em Python

Python, Scraping, 02/11/20225 minutos de leitura

Web scraping can be defined as the method of collecting and restructuring data from websites. It can also be defined as the programmatic approach of obtaining website data in an automated manner. For instance, you want to extract the email IDs of all people who commented on a Facebook post. You can do this by

Índice

A Web scraping pode ser definida como o método de coleta e reestruturação de dados de sites. Também pode ser definido como a abordagem programática de obtenção de dados de sites de forma automatizada. Por exemplo, você deseja extrair os IDs de e-mail de todas as pessoas que comentaram em uma publicação no Facebook. Você pode fazer isso por dois métodos. Primeiro, você pode apontar o cursor para a cadeia de endereços de e-mail de qualquer pessoa. Em seguida, pode copiá-la e colá-la em um arquivo. Esse método é conhecido como manual scraping. Mas e se você quiser reunir 2.000 IDs de e-mail? Com a ajuda de uma ferramenta da Web scraping , você pode extrair todos os IDs de e-mail em 30 segundos, em vez de 3 horas, se usar o método manual scraping.

Você pode usar as ferramentas da Web scraping para extrair informações de sites. Você só precisa saber como clicar e não é necessário ter conhecimento de programação. Essas ferramentas são eficientes em termos de recursos e economizam tempo e custos. Você pode scrape milhões de páginas com base em suas necessidades sem se preocupar com a largura de banda da rede. Alguns sites implementam anti-bots que desestimulam a coleta de dados por scrapers. Mas as boas ferramentas da Web scraping têm recursos incorporados para contornar essas ferramentas e proporcionar uma experiência scraping perfeita.

Web Scraping em Python

O Python tem excelentes ferramentas para scrape os dados da Web. Por exemplo, você pode importar a biblioteca de solicitações para recuperar o conteúdo de uma página da Web e o bs4(BeautifulSoup) para extrair as informações relevantes. Você pode seguir as etapas abaixo para acessar a Web scrape em Python. Estaremos extraindo informações desse site. 

Solicitações de importação:

Você precisa importar a biblioteca de solicitações para obter o HTML do site. 

solicitações de importação

Solicitação GET:

Você precisa fazer uma solicitação GET para o site. Você pode fazer isso colando o URL na função requests.get().

r = requests.get('http://www.cleveland.com/metro/index.ssf/2017/12/case_western_reserve_university_president_barbara_snyders_base_salary_and_bonus_pay_tops_among_private_colleges_in_ohio.html')

Extrair o conteúdo:

Extraia o conteúdo do site usando r.content. Ele fornece o conteúdo do site em bytes. 

c = r.content

Importar BeautifulSoup:

Você precisa importar a biblioteca BeautifulSoup, pois ela facilita a scrape de informações de páginas da Web.

from bs4 import BeautifulSoup

Crie um objeto de sopa:

Você precisa criar um objeto BeautifulSoup a partir do conteúdo e analisá-lo usando vários métodos.

soup = BeautifulSoup(c)
print(soup.get_text())

Você obterá o resultado (é apenas uma parte) mais ou menos assim.

Extrair dados úteis:

Temos que encontrar os seletores CSS corretos, pois precisamos extrair os dados desejados. Podemos localizar o conteúdo principal da página da Web usando o método .find() do objeto soup.

main_content = soup.find('div', attrs = {'class': 'entry-content'})

Use o atributo .text:

Podemos recuperar as informações como texto da tabela usando o atributo.text do soup.

content = main_content.find('ul').text
print(content)

Recuperamos o texto da tabela como uma string. Mas as informações serão de grande utilidade se extrairmos as partes específicas da cadeia de texto. Para realizar essa tarefa, precisamos passar para as expressões regulares.

Expressões regulares em Python

As expressões regulares(RegEx) são uma sequência de padrões que definem um padrão de pesquisa. A ideia básica é que:

  • Defina um padrão que você deseja corresponder em uma cadeia de texto. 
  • Pesquisar na cadeia de caracteres para retornar correspondências.

Suponha que queiramos extrair as seguintes informações da tabela de texto.

  • Salários
  • Nomes das faculdades
  • Nomes dos presidentes

Você pode extrair as três informações seguindo as etapas mencionadas abaixo.

Etapa 01:

Importe o re e, para extrair os salários, você precisa criar um padrão de salário. Use o método re.compile() para compilar um padrão de expressão regular fornecido como uma string em um objeto de padrão RegEx. Além disso, você pode usar pattern.findall() para encontrar todas as correspondências e retorná-las como uma lista de strings. Cada cadeia de caracteres representará uma correspondência.

import re
salary_pattern = re.compile(r'\$.+')
salaries = salary_pattern.findall(content)

Etapa 02:

Repita o mesmo procedimento para extrair os nomes das faculdades. Faça um padrão e extraia os nomes. 

school_pattern = re.compile(r'(?:,|,\s)([A-Z]{1}.*?)(?:\s\(|:|,)')
schools = school_pattern.findall(content)
print(schools)
print(salaries)

Etapa 03:

Repita o mesmo procedimento para extrair os nomes dos presidentes. Faça um padrão e extraia os nomes necessários. 

name_pattern = re.compile(r'^([A-Z]{1}.+?)(?:,)', flags = re.M)
names = name_pattern.findall(content)
print(names)

Etapa 04:

Os salários parecem confusos e não são compreensíveis. Por isso, usamos a compreensão de lista do Python para converter os salários da string em números. Usaremos o fatiamento, a divisão e a junção de strings e a compreensão de lista para obter os resultados desejados.

salaries = ['$876,001', '$543,903', '$2453,896']
[int(''.join(s[1:].split(',')) for s in salaries]

A saída é a seguinte:

Visualização de dados em Python

A visualização de dados ajuda você a entender os dados visualmente para que as tendências, os padrões e as correlações possam ser expostos. Você pode traduzir uma grande quantidade de dados em gráficos, diagramas e outros recursos visuais para identificar os valores discrepantes e obter insights valiosos.

Podemos usar o matplotlib para visualizar os dados, conforme mostrado abaixo.

Importe as bibliotecas necessárias, conforme mostrado abaixo.

import pandas as pd
import matplotlib.pyplot as plt

Crie um dataframe do pandas com escolas, nomes e salários. Por exemplo, você pode converter as escolas em um dataframe como:

df_school = pd.DataFrame(schools)
imprimir(df_escola)

O resultado é:

Da mesma forma, você pode fazer o mesmo com salários e nomes.

Para a visualização dos dados, podemos traçar um gráfico de barras, conforme mostrado abaixo.

df.plot(kind='barh', x = 'President', y = 'salary')

A saída é a seguinte:

Por que o Proxies é necessário para a Web Scraping?

scrape O site scraping ajuda as empresas a extrair informações úteis sobre insights de mercado e setores para oferecer serviços baseados em dados e tomar decisões orientadas por dados. O site Proxies é essencial para extrair dados de vários sites pelos seguintes motivos

  • Evitar proibições de IP - Para impedir que os scrapers façam muitas solicitações, os sites comerciais limitam a quantidade de dados rastreáveis, denominados Crawl Rate (taxa de rastreamento). A taxa de rastreamento diminui a velocidade do site e fica difícil para o usuário acessar o conteúdo desejado com eficiência. No entanto, se você usar um pool suficiente de proxies para scrape os dados, você ultrapassará os limites de taxa no site de destino. Isso ocorre porque o proxies envia solicitações de diferentes endereços IP, permitindo que você extraia dados de sites de acordo com sua necessidade.
  • Permitir o acesso a conteúdo específico da região - As empresas precisam monitorar seus concorrentes (sites) para fornecer recursos e preços de produtos adequados aos clientes em uma região geográfica específica. Elas podem acessar todo o conteúdo disponível naquela região usando o site residencial proxies com endereços IP.
  • Segurança aprimorada - Um servidor proxy acrescenta uma camada adicional de segurança ao ocultar o endereço IP do dispositivo do usuário.

Você sabe quantos proxies são necessários para obter os benefícios acima? Você pode calcular o número necessário de proxies usando esta fórmula:

Número de proxies = Número de solicitações de acesso / Taxa de rastreamento

O número de solicitações de acesso depende dos seguintes parâmetros.

  • A frequência com que o scraper extrai informações de um site
  • Número de páginas que o usuário deseja scrape

Por outro lado, a taxa de rastreamento é limitada pelo número de solicitações que o usuário faz em um determinado período de tempo. Alguns sites permitem um número limitado de solicitações por usuário para diferenciar solicitações de usuários automatizados e humanos. 

Usando Proxies em Python

Você pode usar o proxies em Python seguindo as etapas abaixo.

  • Você precisa importar o módulo de solicitações do Python.
solicitações de importação
  • Você pode criar um pool de proxies para rotacioná-los.
proxy = 'http://114.121.248.251:8080'
url = 'https://ipecho.net/plain'
  • Você pode usar requests.get() para enviar uma solicitação GET passando um proxy como parâmetro para o URL.
page = requests.get(url,
                    proxies={"http": proxy, "https": proxy})
  • Você pode obter o conteúdo do URL solicitado se não houver erro de conexão.
imprimir(page.text)

A saída é a seguinte:

Conclusão

Discutimos que podemos usar o site scraping para extrair dados de sites em vez de usar o manual scraping. A Web scraping é um processo econômico e que economiza tempo. As empresas a utilizam para coletar e reestruturar informações da Web para tomar decisões baseadas em dados e obter insights valiosos. O uso de proxies é essencial para a Web segura scraping , pois oculta o endereço IP original do usuário do site de destino. Você pode usar o datacenter ou o proxies residencial para a Web scraping. Mas prefira usar o proxies residencial, pois ele é rápido e não pode ser facilmente detectado. Além disso, podemos usar expressões regulares em Python para corresponder ou encontrar conjuntos de strings. Isso significa que podemos extrair qualquer padrão de cadeia de caracteres do texto com a ajuda de expressões regulares. Também vimos que a visualização de dados converte grandes quantidades de dados em tabelas, gráficos e outros recursos visuais que nos ajudam a detectar anomalias e identificar tendências úteis nos dados.