Ryan Mitchell Novatec Authorized Portuguese translation of the English edition of titled Web Scraping with Python, ISBN 9781491910290 © 2015 Ryan Mitchell. This translation is published and sold by permission of O'Reilly Media, Inc., the owner of all rights to publish and sell the same. Tradução em português autorizada da edição em inglês da obra Web Scraping with Python, ISBN 9781491910290 © 2015 Ryan Mitchell. Esta tradução é publicada e vendida com a permissão da O'Reilly Media, Inc., detentora de todos os direitos para publicação e venda desta obra. © Novatec Editora Ltda. 2015. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates Tradução: Aldir José Coelho Corrêa da Silva Revisão gramatical: Marta Almeida de Sá Assistente editorial: Priscila A. Yoshimatsu Editoração eletrônica: Carolina Kuwabata ISBN: 978-85-7522-447-2 IG20150806 Histórico de impressões: Agosto/2015 Primeira edição Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 – São Paulo, SP – Brasil Tel.: +55 11 2959-6529 Email: [email protected] Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec Sumário Prefácio............................................................................................................................. 9 Parte I ■ Construindo scrapers................................................................................17 Capítulo 1 ■ Seu primeiro web scraper...............................................................................18 Conectando-se.................................................................................................18 Introdução ao BeautifulSoup............................................................................21 Instalando o BeautifulSoup......................................................................... 22 Executando o BeautifulSoup........................................................................24 Conectando-se de maneira confiável............................................................ 26 Capítulo 2 ■ Análise de HTML avançada..............................................................................30 Nem sempre é preciso um martelo................................................................... 30 Outras utilidades do BeautifulSoup..................................................................31 find() e findAll() com o BeautifulSoup......................................................... 33 Outros objetos de BeautifulSoup................................................................. 36 Navegando em árvores................................................................................ 37 Expressões regulares........................................................................................41 Expressões regulares e o BeautifulSoup............................................................ 46 Acessando atributos........................................................................................ 48 Expressões lambda.......................................................................................... 48 Além do BeautifulSoup.................................................................................... 49 Capítulo 3 ■ Começando a rastrear....................................................................................50 Percorrendo um único domínio........................................................................ 50 Rastreando um site inteiro............................................................................... 55 Coletando dados em um site inteiro..............................................................59 Rastreando na Internet.....................................................................................61 Rastreando com o Scrapy................................................................................. 67 Capítulo 4 ■ Usando APIs...................................................................................................73 Como as APIs funcionam.................................................................................74 Convenções comuns.........................................................................................75 Métodos......................................................................................................75 Autenticação................................................................................................76 5 6 Web Scraping com Python Respostas........................................................................................................ 77 Chamadas de API........................................................................................ 78 Echo Nest........................................................................................................ 79 Alguns exemplos......................................................................................... 79 Twitter.............................................................................................................81 Procedimento inicial................................................................................... 82 Alguns exemplos......................................................................................... 83 APIs do Google............................................................................................... 86 Procedimento inicial................................................................................... 87 Alguns exemplos......................................................................................... 88 Analisando JSON............................................................................................ 90 Criando uma miscelânea................................................................................. 92 Mais sobre APIs............................................................................................... 97 Capítulo 5 ■ Armazenando dados......................................................................................98 Arquivos de mídia........................................................................................... 98 Armazenando dados em CSV.........................................................................102 MySQL..........................................................................................................105 Instalando o MySQL..................................................................................106 Alguns comandos básicos...........................................................................108 Integrando a Python...................................................................................112 Técnicas e boas práticas usadas em um banco de dados..............................115 “Six Degrees” no MySQL...........................................................................118 Email.............................................................................................................121 Capítulo 6 ■ Lendo documentos.......................................................................................124 Codificação de documentos............................................................................124 Texto............................................................................................................ 125 Codificação de texto e a Internet global......................................................126 CSV...............................................................................................................131 Lendo arquivos CSV..................................................................................131 PDF................................................................................................................134 Microsoft Word e o .docx...............................................................................136 Parte II ■ Scraping avançado................................................................................. 141 Capítulo 7 ■ Limpando seus dados sujos..........................................................................142 Limpando o código.........................................................................................142 Normalização de dados..............................................................................146 Limpeza após o fato........................................................................................148 OpenRefine...............................................................................................148 Sumário Capítulo 8 ■ Lendo e gravando idiomas naturais..............................................................154 Resumindo dados...........................................................................................155 Modelos de Markov........................................................................................159 Six Degrees of Wikipedia: Conclusão.........................................................164 Natural Language Toolkit...............................................................................167 Instalação e configuração...........................................................................168 Análise estatística com o NLTK..................................................................169 Análise lexicográfica com o NLTK..............................................................171 Recursos adicionais........................................................................................176 Capítulo 9 ■ Rastreando formulários e logins...................................................................177 Biblioteca Python Requests.............................................................................177 Enviando um formulário básico......................................................................178 Botões de rádio, caixas de seleção e outras entradas........................................181 Enviando arquivos e imagens..........................................................................182 Manipulando logins e cookies.........................................................................183 Autenticação de acesso básica do HTTP.....................................................185 Outros problemas dos formulários..................................................................186 Capítulo 10 ■ Scraping de JavaScript................................................................................188 Breve introdução ao JavaScript........................................................................189 Bibliotecas JavaScript comuns................................................................... 190 Ajax e Dynamic HTML..................................................................................193 Executando JavaScript em Python com o Selenium.....................................194 Manipulando redirecionamentos....................................................................201 Capítulo 11 ■ Processamento de imagens e reconhecimento de texto...............................203 Visão geral das bibliotecas............................................................................. 204 Pillow....................................................................................................... 204 Tesseract....................................................................................................205 NumPy..................................................................................................... 206 Processando texto bem formatado..................................................................207 Fazendo o scraping de texto em imagens de sites.........................................210 Lendo CAPTCHAs e treinando o Tesseract.....................................................213 Treinando o Tesseract................................................................................215 Recuperando CAPTCHAs e enviando soluções.............................................. 220 Capítulo 12 ■ Evitando as armadilhas do scraping............................................................223 Nota sobre ética.............................................................................................224 Parecendo um ser humano............................................................................. 225 Ajuste seus cabeçalhos.............................................................................. 225 7 8 Web Scraping com Python Manipulando cookies.................................................................................227 Ritmo é tudo............................................................................................. 230 Recursos de segurança comuns dos formulários............................................. 230 Valores de campos de entrada ocultos.........................................................231 Evitando honey pots...................................................................................232 Lista de verificação para humanos............................................................. 235 Capítulo 13 ■ Testando seu site com scrapers...................................................................237 Introdução à execução de testes..................................................................... 238 O que são testes de unidade?..................................................................... 238 Módulo Python unittest..................................................................................239 Examinando a Wikipédia...........................................................................240 Testando com o Selenium...............................................................................243 Interagindo com o site................................................................................244 Unittest ou Selenium?.....................................................................................248 Capítulo 14 ■ Executando scraping remotamente............................................................250 Por que usar servidores remotos?.................................................................... 250 Evitando o bloqueio do endereço IP............................................................251 Portabilidade e extensibilidade.................................................................. 252 Tor253 PySocks.................................................................................................... 254 Hospedagem remota...................................................................................... 255 Execução a partir de uma conta de hospedagem de sites............................. 256 Execução a partir da nuvem...................................................................... 257 Recursos adicionais........................................................................................259 Seguindo em frente.........................................................................................259 Apêndice A ■ Visão geral de Python.................................................................................261 Instalação e “Hello, World!”...........................................................................261 Apêndice B ■ Visão geral da Internet...............................................................................264 Apêndice C ■ Aspectos legais e éticos do web scraping.....................................................268 Sobre a autora................................................................................................................287 Colofão...........................................................................................................................288