Módulos Python para Web Scraping

Neste capítulo, vamos aprender vários módulos Python que podemos usar para web scraping.

Ambientes de desenvolvimento Python usando virtualenv

Virtualenv é uma ferramenta para criar ambientes Python isolados. Com a ajuda do virtualenv, podemos criar uma pasta que contém todos os executáveis ​​necessários para usar os pacotes que nosso projeto Python requer. Também nos permite adicionar e modificar módulos Python sem acesso à instalação global.

Você pode usar o seguinte comando para instalar virtualenv -

(base) D:\ProgramData>pip install virtualenv
Collecting virtualenv
   Downloading
https://files.pythonhosted.org/packages/b6/30/96a02b2287098b23b875bc8c2f58071c3
5d2efe84f747b64d523721dc2b5/virtualenv-16.0.0-py2.py3-none-any.whl
(1.9MB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 1.9MB 86kB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-16.0.0

Agora, precisamos criar um diretório que representará o projeto com a ajuda do seguinte comando -

(base) D:\ProgramData>mkdir webscrap

Agora, entre nesse diretório com a ajuda do seguinte comando -

(base) D:\ProgramData>cd webscrap

Agora, precisamos inicializar a pasta do ambiente virtual de nossa escolha da seguinte forma -

(base) D:\ProgramData\webscrap>virtualenv websc
Using base prefix 'd:\\programdata'
New python executable in D:\ProgramData\webscrap\websc\Scripts\python.exe
Installing setuptools, pip, wheel...done.

Agora, ative o ambiente virtual com o comando fornecido a seguir. Uma vez ativado com sucesso, você verá o nome dele no lado esquerdo entre colchetes.

(base) D:\ProgramData\webscrap>websc\scripts\activate

Podemos instalar qualquer módulo neste ambiente da seguinte maneira -

(websc) (base) D:\ProgramData\webscrap>pip install requests
Collecting requests
   Downloading
https://files.pythonhosted.org/packages/65/47/7e02164a2a3db50ed6d8a6ab1d6d60b69
c4c3fdf57a284257925dfc12bda/requests-2.19.1-py2.py3-none-any.whl (9
1kB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 92kB 148kB/s
Collecting chardet<3.1.0,>=3.0.2 (from requests)
   Downloading
https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca
55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133
kB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 143kB 369kB/s
Collecting certifi>=2017.4.17 (from requests)
   Downloading
https://files.pythonhosted.org/packages/df/f7/04fee6ac349e915b82171f8e23cee6364
4d83663b34c539f7a09aed18f9e/certifi-2018.8.24-py2.py3-none-any.whl
(147kB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 153kB 527kB/s
Collecting urllib3<1.24,>=1.21.1 (from requests)
   Downloading
https://files.pythonhosted.org/packages/bd/c9/6fdd990019071a4a32a5e7cb78a1d92c5
3851ef4f56f62a3486e6a7d8ffb/urllib3-1.23-py2.py3-none-any.whl (133k
B)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 143kB 517kB/s
Collecting idna<2.8,>=2.5 (from requests)
   Downloading
https://files.pythonhosted.org/packages/4b/2a/0276479a4b3caeb8a8c1af2f8e4355746
a97fab05a372e4a2c6a6b876165/idna-2.7-py2.py3-none-any.whl (58kB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 61kB 339kB/s
Installing collected packages: chardet, certifi, urllib3, idna, requests
Successfully installed certifi-2018.8.24 chardet-3.0.4 idna-2.7 requests-2.19.1
urllib3-1.23

Para desativar o ambiente virtual, podemos usar o seguinte comando -

(websc) (base) D:\ProgramData\webscrap>deactivate
(base) D:\ProgramData\webscrap>

Você pode ver que (websc) foi desativado.

Módulos Python para Web Scraping

Web scraping é o processo de construção de um agente que pode extrair, analisar, baixar e organizar informações úteis da web automaticamente. Em outras palavras, em vez de salvar manualmente os dados de sites, o software de web scraping carregará e extrairá automaticamente os dados de vários sites conforme nossa necessidade.

Nesta seção, vamos discutir sobre bibliotecas Python úteis para web scraping.

solicitações de

É uma biblioteca simples de web scraping em Python. É uma biblioteca HTTP eficiente usada para acessar páginas da web. Com a ajuda deRequests, podemos obter o HTML bruto das páginas da web, que podem então ser analisadas para recuperar os dados. Antes de usarrequests, vamos entender sua instalação.

Instalação de solicitações

Podemos instalá-lo em nosso ambiente virtual ou na instalação global. Com a ajuda depip comando, podemos instalá-lo facilmente da seguinte maneira -

(base) D:\ProgramData> pip install requests
Collecting requests
Using cached
https://files.pythonhosted.org/packages/65/47/7e02164a2a3db50ed6d8a6ab1d6d60b69
c4c3fdf57a284257925dfc12bda/requests-2.19.1-py2.py3-none-any.whl
Requirement already satisfied: idna<2.8,>=2.5 in d:\programdata\lib\sitepackages
(from requests) (2.6)
Requirement already satisfied: urllib3<1.24,>=1.21.1 in
d:\programdata\lib\site-packages (from requests) (1.22)
Requirement already satisfied: certifi>=2017.4.17 in d:\programdata\lib\sitepackages
(from requests) (2018.1.18)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in
d:\programdata\lib\site-packages (from requests) (3.0.4)
Installing collected packages: requests
Successfully installed requests-2.19.1

Exemplo

Neste exemplo, estamos fazendo uma solicitação GET HTTP para uma página da web. Para isso, precisamos primeiro importar a biblioteca de solicitações da seguinte forma -

In [1]: import requests

Nesta linha de código a seguir, usamos solicitações para fazer solicitações GET HTTP para o url: https://authoraditiagarwal.com/ fazendo uma solicitação GET.

In [2]: r = requests.get('https://authoraditiagarwal.com/')

Agora podemos recuperar o conteúdo usando .text propriedade da seguinte forma -

In [5]: r.text[:200]

Observe que na saída a seguir, obtivemos os primeiros 200 caracteres.

Out[5]: '<!DOCTYPE html>\n<html lang="en-US"\n\titemscope
\n\titemtype="http://schema.org/WebSite" \n\tprefix="og: http://ogp.me/ns#"
>\n<head>\n\t<meta charset
="UTF-8" />\n\t<meta http-equiv="X-UA-Compatible" content="IE'

Urllib3

É outra biblioteca Python que pode ser usada para recuperar dados de URLs semelhantes ao requestsbiblioteca. Você pode ler mais sobre isso em sua documentação técnica em https://urllib3.readthedocs.io/en/latest/.

Instalando Urllib3

Usando o pip comando, podemos instalar urllib3 seja em nosso ambiente virtual ou em instalação global.

(base) D:\ProgramData>pip install urllib3
Collecting urllib3
Using cached
https://files.pythonhosted.org/packages/bd/c9/6fdd990019071a4a32a5e7cb78a1d92c5
3851ef4f56f62a3486e6a7d8ffb/urllib3-1.23-py2.py3-none-any.whl
Installing collected packages: urllib3
Successfully installed urllib3-1.23

Exemplo: raspagem usando Urllib3 e BeautifulSoup

No exemplo a seguir, estamos copiando a página da web usando Urllib3 e BeautifulSoup. Nós estamos usandoUrllib3no local da biblioteca de solicitações para obter os dados brutos (HTML) da página da web. Então estamos usandoBeautifulSoup para analisar esses dados HTML.

import urllib3
from bs4 import BeautifulSoup
http = urllib3.PoolManager()
r = http.request('GET', 'https://authoraditiagarwal.com')
soup = BeautifulSoup(r.data, 'lxml')
print (soup.title)
print (soup.title.text)

Esta é a saída que você observará ao executar este código -

<title>Learn and Grow with Aditi Agarwal</title>
Learn and Grow with Aditi Agarwal

Selênio

É um conjunto de teste automatizado de código aberto para aplicativos da web em diferentes navegadores e plataformas. Não é uma ferramenta única, mas um conjunto de software. Temos ligações de selênio para Python, Java, C #, Ruby e JavaScript. Aqui, vamos realizar web scraping usando selênio e suas ligações Python. Você pode aprender mais sobre Selenium com Java no link Selenium .

Os vínculos do Selenium Python fornecem uma API conveniente para acessar o Selenium WebDrivers como Firefox, IE, Chrome, remoto, etc. As versões atuais do Python suportadas são 2.7, 3.5 e superiores.

Instalando Selenium

Usando o pip comando, podemos instalar urllib3 seja em nosso ambiente virtual ou em instalação global.

pip install selenium

Como o selênio requer um driver para fazer a interface com o navegador escolhido, precisamos baixá-lo. A tabela a seguir mostra diferentes navegadores e seus links para fazer o download dos mesmos.

Chrome

https://sites.google.com/a/chromium.org/

Edge

https://developer.microsoft.com/

Firefox

https://github.com/

Safari

https://webkit.org/

Exemplo

Este exemplo mostra web scraping usando selênio. Também pode ser usado para teste, que é chamado de teste de selênio.

Depois de baixar o driver específico para a versão especificada do navegador, precisamos fazer programação em Python.

Primeiro, precisa importar webdriver do selênio da seguinte forma -

from selenium import webdriver

Agora, forneça o caminho do driver da web que baixamos de acordo com nossos requisitos -

path = r'C:\\Users\\gaurav\\Desktop\\Chromedriver'
browser = webdriver.Chrome(executable_path = path)

Agora, forneça a url que queremos abrir naquele navegador da web agora controlado por nosso script Python.

browser.get('https://authoraditiagarwal.com/leadershipmanagement')

Também podemos copiar um elemento específico fornecendo o xpath conforme fornecido em lxml.

browser.find_element_by_xpath('/html/body').click()

Você pode verificar o navegador, controlado pelo script Python, para saída.

Scrapy

Scrapy é uma estrutura de rastreamento da web rápida e de código aberto escrita em Python, usada para extrair os dados da página da web com a ajuda de seletores baseados em XPath. O Scrapy foi lançado pela primeira vez em 26 de junho de 2008 sob licença BSD, com um marco 1.0 sendo lançado em junho de 2015. Ele nos fornece todas as ferramentas de que precisamos para extrair, processar e estruturar os dados de sites.

Instalando o Scrapy

Usando o pip comando, podemos instalar urllib3 seja em nosso ambiente virtual ou em instalação global.

pip install scrapy

Para mais detalhes sobre o estudo do Scrapy, você pode acessar o link Scrapy