• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Crawleando a web feito gente grande com o scrapy
 

Crawleando a web feito gente grande com o scrapy

on

  • 2,390 views

 

Statistics

Views

Total Views
2,390
Views on SlideShare
2,390
Embed Views
0

Actions

Likes
2
Downloads
19
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Crawleando a web feito gente grande com o scrapy Crawleando a web feito gente grande com o scrapy Presentation Transcript

    • Construindo Crawler Na Web Feito Gente Grande Apresentando o Scrapy Bernardo Fontes @bbfontes
    • @bbfontes – bernardofontes.net – falecomigo@bernardofontes.net
    • O que é um web crawler?
    • 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
    • Estrutura básica de um web crawler
    • Estrutura básica de um web crawler● Construção de requisições HTTP
    • 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
    • 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
    • Web crawling em Python● Tecnologias comuns: ● urllib, httplib2, requests
    • Web crawling em Python● Tecnologias comuns: ● urllib, httplib2, requests ● beautifulsoup ou lxml
    • Web crawling em Python● Tecnologias comuns: ● urllib, httplib2, requests ● beautifulsoup ou lxml ● json, pickle, yaml, sqlite3
    • Mas qual o problema?
    • 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
    • Ok... Então, #comofaz?
    • Quadrado mágico do Scrapy
    • Item
    • Item● Objeto Python que herda da classe scrapy.item.Item que é dict-like
    • 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
    • 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)
    • scrapy.http.Request
    • scrapy.http.Request● Classe que abstrai a requisição:
    • scrapy.http.Request● Classe que abstrai a requisição:● Request(url, callback=func)
    • scrapy.http.Request● Classe que abstrai a requisição:● Request(url, callback=func)● Outros argumentos: ● method ● body ● headers ● ...
    • Spider
    • Spider● Classe executora do crawler que herda de scrapy.spider.BaseSpider
    • Spider● Classe executora do crawler que herda de scrapy.spider.BaseSpider● Atributos chaves: ● name ● allowed_domains ● start_urls
    • 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)
    • scrapy.select.HtmlXPathSelector
    • scrapy.select.HtmlXPathSelector● BeautifulSoup: objeto Python baseado na estrutura do documento
    • scrapy.select.HtmlXPathSelector● BeautifulSoup: objeto Python baseado na estrutura do documento● Lxml: API baseada no ElementTree
    • scrapy.select.HtmlXPathSelector● BeautifulSoup: objeto Python baseado na estrutura do documento● Lxml: API baseada no ElementTree● HtmlXPathSelector: Xpath!
    • 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)
    • $ scrapy startproject pybr8talks
    • github.com/berinhard/scrapy-pybr8
    • Item Pipeline
    • Scrapy Shell
    • Feed Exports
    • Logging
    • DjangoItem
    • Scrapyd
    • Perguntas?
    • Obrigado!Bernardo Fontesfalecomigo@bernardofontes.nethttp://bernardofontes.nethttp://twitter.com/bbfonteshttp://github.com/berinhard