Tutorial de Web Scraping com Python: Dicas e Truques

Python, Raspagem, Dez-05-20215 minutos de leitura

É possível extrair automaticamente grandes quantidades de dados de sítios Web utilizando a raspagem da Web e guardá-los numa base de dados ou num ficheiro. Os dados extraídos podem ser armazenados principalmente numa folha de cálculo ou num formato tabular. A raspagem da Web é também designada por extração de dados da Web e colheita da Web. É necessária porque a raspagem manual é uma tarefa fastidiosa

Índice

É possível extrair automaticamente grandes quantidades de dados de sítios Web utilizando a raspagem da Web e guardá-los numa base de dados ou num ficheiro. Os dados extraídos podem ser armazenados principalmente numa folha de cálculo ou num formato tabular. A raspagem da Web é também designada por extração de dados da Web e colheita da Web. É necessária porque a recolha manual de dados é uma tarefa fastidiosa que pode levar horas ou mesmo dias a concluir. Por isso, é necessário automatizar o processo e extrair os dados dos sítios Web numa fração de tempo.

Pode utilizar software de raspagem da Web para carregar, rastrear e extrair automaticamente dados das várias páginas de um sítio Web com base nas suas necessidades e requisitos. Em suma, pode obter os dados pretendidos de sítios Web com o clique de um botão. No mundo moderno, as empresas precisam de analisar os dados e realizar acções inteligentes. Mas, por vezes, a obtenção de dados de sítios Web é difícil quando os proprietários dos sítios Web utilizam técnicas como proibições de IP e CAPTCHAs. Pode utilizar servidores proxy ou VPNs para ultrapassar este problema, uma vez que estes o ajudam a extrair dados da Web de forma anónima. 

Porque é que é necessário utilizar o Web Scraping?

As empresas de todo o mundo recolhem dados da Web para obter informações úteis, armazenando-os num formato utilizável. Apresentam-se em seguida algumas das vantagens da recolha de dados da Web em vários sectores.

  • O Web scraping recolhe conjuntos de dados de treino e teste para projectos de aprendizagem automática.
  • No comércio eletrónico, a recolha de dados da Web é utilizada para monitorizar os preços dos concorrentes.
  • A recolha de dados da Web é utilizada no sector imobiliário para obter informações sobre a propriedade e o proprietário/agente.
  • Em Marketing, a recolha de dados da Web é utilizada para criar listas telefónicas e de correio eletrónico para contactos não solicitados.

Seguem-se as principais razões para extrair dados da Web.

Conseguir a automatização - Pode extrair dados de sítios Web utilizando raspadores Web robustos. Desta forma, pode poupar tempo às tarefas mundanas de recolha de dados. Pode recolher dados em maior volume do que um único ser humano alguma vez poderá conseguir com a raspagem da Web. Além disso, pode também criar bots Web sofisticados para automatizar actividades em linha, quer utilizando uma linguagem de programação como Python ou Javascript, quer utilizando uma ferramenta de recolha de dados da Web.

Conjuntos de dados ricos e únicos - Pode obter uma grande quantidade de imagens, vídeos, texto e dados numéricos a partir da Internet. Também pode encontrar sítios Web relevantes e criar o seu conjunto de dados personalizado para análise, dependendo do seu objetivo. Por exemplo, está interessado em compreender em profundidade o mercado desportivo do Reino Unido. Pode configurar web scrapers para recolher conteúdo de vídeo ou informações sobre estatísticas de futebol para si.

Gestão eficaz de dados - Não precisa de copiar e colar dados da Internet, uma vez que pode recolher com precisão dados de vários sítios Web com o web scraping. Desta forma, a sua empresa e os seus funcionários podem dedicar mais tempo ao trabalho criativo, armazenando eficazmente os dados com software e programas automáticos.

Business Intelligence e Insights - O Web scraping da Internet permite-lhe fazer o seguinte:

  • Acompanhamento da atividade de marketing dos concorrentes
  • Pesquisa de preços dos concorrentes
  • Construir um quadro mais alargado do seu mercado

Além disso, as empresas podem tomar melhores decisões descarregando, limpando e analisando dados num volume significativo.

Velocidade - A recolha de dados da Web extrai dados de sítios Web a grande velocidade. Permite-lhe extrair dados em horas em vez de dias. Mas alguns projectos podem demorar algum tempo, dependendo da sua complexidade e dos recursos e ferramentas que utilizamos para os realizar.

Exatidão dos dados - A extração manual de dados de sítios Web envolve erro humano, o que conduz a problemas graves. Por conseguinte, a extração precisa de dados é crucial para qualquer informação, o que pode ser conseguido com a raspagem da Web.

Raspagem da Web em Python

Suponhamos que tem de extrair dados deste sítio Web. Terá de instalar os dois módulos Python, nomeadamente o requests e o BeautifulSoup. 

Importar bibliotecas

Pode instalar estes módulos utilizando o seguinte comando.

!pip install requests
!pip install BeautifulSoup

Pode importar estes módulos como:

from bs4 import BeautifulSoup
importar pedidos

Pode clicar no botão Inspecionar no canto superior esquerdo do sítio Web para realçar os elementos que pretende extrair. No nosso caso, queremos extrair os dados da tabela deste sítio, como se mostra abaixo.

Adicionar cabeçalho e URL

Tem de adicionar o cabeçalho e o URL aos seus pedidos. O cabeçalho pode retirar o pedido para que pareça que vem de um navegador legítimo. 

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'}

url = "https://en.wikipedia.org/wiki/List_of_national_capitals"

Pode utilizar a função requests.get() para enviar um pedido GET para o URL especificado.

r = requests.get(url, headers=headers)

Objeto BeautifulSoup

É necessário inicializar um objeto BeautifulSoup e mencionar os seus parâmetros. Depois, tem de extrair todas as linhas da tabela. Pode obter todos os elementos da tabela utilizando o método find_all(), como mostra o código abaixo.

soup = BeautifulSoup(r.content, "html.parser")
table = soup.find_all('table')[1]
linhas = table.find_all('tr')
lista_de_linhas = lista()

Iteração por linhas

Pode utilizar um ciclo for para percorrer todas as linhas da tabela, como mostra o código abaixo.

for tr in rows:
   td = tr.find_all('td')
    linha = [i.text for i in td]
    lista_de_linhas.append(linha)

Criar um Dataframe

Pode visualizar claramente os dados extraídos se criar um quadro de dados do Pandas e exportar os seus dados para um ficheiro .csv. Para criar um quadro de dados, tem de importar o Pandas, como se mostra abaixo.

importar pandas como pd

Agora, pode converter o seu objeto sopa num quadro de dados que conterá as seguintes linhas da tabela.

  • Cidade
  • País
  • Notas

Pode converter o seu quadro de dados num formato csv e imprimir o seu quadro de dados como se mostra abaixo.

df_bs = pd.DataFrame(row_list,columns=['City','Country','Notes'])
df_bs.set_index('Country',inplace=True)
df_bs.to_csv('beautifulsoup.csv')
imprimir(df_bs)

Obterá o seguinte resultado.

Proxies para Web Scraping usando Python

Um proxy actua como um intermediário ou um intermediário entre um cliente e um servidor. Esconde o seu verdadeiro endereço IP e contorna os filtros e a censura. Pode obter uma lista gratuita de proxies utilizando apenas uma função em Python, como se mostra nos passos abaixo.

Importar bibliotecas

É necessário importar os módulos abaixo em Python.

from bs4 import BeautifulSoup
importar pedidos
importar aleatório

Definir uma função

Pode definir uma função get_free_proxies() na qual tem de mencionar o URL da lista de proxies gratuitos. Depois, tem de criar um objeto BeautifulSoup e obter a resposta HTTP utilizando a função requests.get(). 

def get_free_proxies():
    url = "https://free-proxy-list.net/"
    soup = bs(requests.get(url).content, "html.parser")
    proxies = []

Utilizar um For Loop

Pode utilizar o método find_all() no ciclo for para percorrer todas as linhas da tabela, como se mostra abaixo.

for row in soup.find("table", attrs={"id": "proxylisttable"}).find_all("tr")[1:]:
        tds = row.find_all("td")
        try:
            ip = tds[0].text.strip()
            port = tds[1].text.strip()
            host = f"{ip}:{port}"
            proxies.append(host)
        except IndexError:
            continue
    return proxies

Lista de representantes activos

Pode mencionar a lista de alguns proxies que funcionam, como o que mencionámos abaixo.

proxies = [
    '167.172.248.53:3128',
   '194.226.34.132:5555',
   '203.202.245.62:80',
    '141.0.70.211:8080',
    '118.69.50.155:80',
    '201.55.164.177:3128',
   '51.15.166.107:3128',
   '91.205.218.64:80',
    '128.199.237.57:8080',
]

Solicitar sessão

É preciso criar uma função get_session() que aceitará uma lista de proxies. Também cria uma sessão de pedidos que selecciona aleatoriamente qualquer um dos proxies passados, como se mostra no código abaixo.

def get_session(proxies):
  session = requests.Session()
  proxy = random.choice(proxies)
  session.proxies = {"http": proxy, "https": proxy}
  return session

Fazer um pedido

Pode utilizar um ciclo for para fazer um pedido a um sítio Web e obter um endereço IP em troca.

para i em range(5):
    s = get_session(proxies)
    try:
       print("Request page with IP:", s.get("http://icanhazip.com", timeout=1.5).text.strip())
    except Exception as e:
        continue

Pode obter o seguinte resultado.

Porque é que os proxies são importantes para o Web Scraping?

As empresas podem extrair dados valiosos para tomar decisões baseadas em dados e oferecer serviços baseados em dados com a recolha de dados da Web. Os proxies são importantes para a recolha de dados da Web pelas seguintes razões

  • Com os proxies, é possível fazer pedidos a partir de uma determinada região geográfica e ver o conteúdo específico que o sítio Web apresenta para essa localização. Esta caraterística dos proxies é benéfica quando se está a extrair dados de produtos de retalhistas em linha.
  • Os proxies permitem-lhe fazer um maior volume de pedidos a um sítio Web alvo sem ser bloqueado ou banido.
  • Os proxies permitem-lhe rastrear dados de sítios Web de forma mais fiável e eficiente.
  • Com os proxies, pode fazer sessões simultâneas ilimitadas no mesmo sítio Web ou em sítios Web diferentes sem receio de ser banido.
  • Um proxy oculta o endereço IP do seu computador do sítio Web de destino, proporcionando assim uma segurança adicional ao seu dispositivo.
  • As empresas utilizam proxies para monitorizar os preços dos concorrentes e as características dos produtos para melhorar os seus serviços e produtos.

Conclusão sobre este tutorial de Python para Web Scraping

Até agora, discutimos que a recolha de dados da Web ajuda-nos a extrair dados de sítios Web de forma automatizada. É possível converter os dados num formato utilizável, como um ficheiro .csv. As empresas utilizam a recolha de dados da Web para verificar os preços e as características dos produtos da concorrência. O Web scraping é muito útil se utilizar proxies, uma vez que estes mantêm a sua identidade anónima, ocultando o seu endereço IP original do sítio Web alvo. Com os proxies, é possível enviar vários pedidos ao sítio Web sem receio de ser bloqueado ou proibido.