Crawleando a web feito gente grande com o scrapy

4,320 views
4,101 views

Published on

Published in: Technology

Crawleando a web feito gente grande com o scrapy

  1. 1. Construindo Crawler Na Web Feito Gente Grande Apresentando o Scrapy Bernardo Fontes @bbfontes
  2. 2. @bbfontes – bernardofontes.net – falecomigo@bernardofontes.net
  3. 3. O que é um web crawler?
  4. 4. O que é um web crawler? “Web crawler é um programa de computador que navega pela World Wide Web de uma forma metódica e automatizada”http://pt.wikipedia.org/wiki/Web_crawler
  5. 5. Estrutura básica de um web crawler
  6. 6. Estrutura básica de um web crawler● Construção de requisições HTTP
  7. 7. Estrutura básica de um web crawler● Construção de requisições HTTP● Tratamento da resposta ● Composição de objetos ● Composição de novas requisições
  8. 8. Estrutura básica de um web crawler● Construção de requisições HTTP● Tratamento da resposta ● Composição de objetos ● Composição de novas requisições● “Persistência” de dados
  9. 9. Web crawling em Python● Tecnologias comuns: ● urllib, httplib2, requests
  10. 10. Web crawling em Python● Tecnologias comuns: ● urllib, httplib2, requests ● beautifulsoup ou lxml
  11. 11. Web crawling em Python● Tecnologias comuns: ● urllib, httplib2, requests ● beautifulsoup ou lxml ● json, pickle, yaml, sqlite3
  12. 12. Mas qual o problema?
  13. 13. Mas qual o problema?● Ter que resolver tudo na mão: ● Se tiver autenticação? ● Lidar com sessão, cookie... ● HTML mal formatado ● Crawlear outros recursos ● Aumento de pontos de falha ● Complexidade de testes ● Encoding ● Mais alguns outros
  14. 14. Ok... Então, #comofaz?
  15. 15. Quadrado mágico do Scrapy
  16. 16. Item
  17. 17. Item● Objeto Python que herda da classe scrapy.item.Item que é dict-like
  18. 18. Item● Objeto Python que herda da classe scrapy.item.Item que é dict-like● ORM-like ● Atributos são instâncias da classe scrapy.item.Field
  19. 19. Item● Objeto Python que herda da classe scrapy.item.Item que é dict-like● ORM-like ● Atributos são instâncias da classe scrapy.item.Field● Consegue separar a “modelagem” e tratamento dos dados do processamento do crawler: ● Field(serializer=str)
  20. 20. scrapy.http.Request
  21. 21. scrapy.http.Request● Classe que abstrai a requisição:
  22. 22. scrapy.http.Request● Classe que abstrai a requisição:● Request(url, callback=func)
  23. 23. scrapy.http.Request● Classe que abstrai a requisição:● Request(url, callback=func)● Outros argumentos: ● method ● body ● headers ● ...
  24. 24. Spider
  25. 25. Spider● Classe executora do crawler que herda de scrapy.spider.BaseSpider
  26. 26. Spider● Classe executora do crawler que herda de scrapy.spider.BaseSpider● Atributos chaves: ● name ● allowed_domains ● start_urls
  27. 27. Spider● Classe executora do crawler que herda de scrapy.spider.BaseSpider● Atributos chaves: ● name ● allowed_domains ● start_urls● Métodos chaves: ● start_requests(self) ● parse(self, response)
  28. 28. scrapy.select.HtmlXPathSelector
  29. 29. scrapy.select.HtmlXPathSelector● BeautifulSoup: objeto Python baseado na estrutura do documento
  30. 30. scrapy.select.HtmlXPathSelector● BeautifulSoup: objeto Python baseado na estrutura do documento● Lxml: API baseada no ElementTree
  31. 31. scrapy.select.HtmlXPathSelector● BeautifulSoup: objeto Python baseado na estrutura do documento● Lxml: API baseada no ElementTree● HtmlXPathSelector: Xpath!
  32. 32. scrapy.select.HtmlXPathSelector● BeautifulSoup: objeto Python baseado na estrutura do documento● Lxml: API baseada no ElementTree● HtmlXPathSelector: Xpath!● Métodos: ● select(self, xpath) ● extract(self) ● re(self, regex)
  33. 33. $ scrapy startproject pybr8talks
  34. 34. github.com/berinhard/scrapy-pybr8
  35. 35. Item Pipeline
  36. 36. Scrapy Shell
  37. 37. Feed Exports
  38. 38. Logging
  39. 39. DjangoItem
  40. 40. Scrapyd
  41. 41. Perguntas?
  42. 42. Obrigado!Bernardo Fontesfalecomigo@bernardofontes.nethttp://bernardofontes.nethttp://twitter.com/bbfonteshttp://github.com/berinhard

×