Successfully reported this slideshow.

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

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 Fontes falecomigo@bernardofontes.net http://bernardofontes.net http://twitter.com/bbfontes http://github.com/berinhard

×