Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Raspagem de dados com Scrapy

Raspagem de dados com Scrapy

Pretendo neste LT abordar um pouco do funcionamento do Framework Scrapy (http://scrapy.org/) e como começar a usá-lo. Esta LT é voltada a iniciantes. LT de 25 min a 30 min.

More Decks by Rafael Henrique da Silva Correia

Other Decks in Technology

Transcript

  1. “Web scraping (web harvesting or web data extraction) is a

    computer software technique of extracting information from websites.” From Wikipedia, the free encyclopedia Web scraping Web scraping
  2. “An open source and collaborative framework for extracting the data

    you need from websites. In a fast, simple, yet extensible way.” From http://scrapy.org/ Scrapy Scrapy
  3. Cuidados sobre a web raspagem Cuidados sobre a web raspagem

    - Existem muitas bibliotecas em Python que podemos buscar - Existem muitas bibliotecas em Python que podemos buscar informações de páginas web informações de páginas web - Cuidado! Nem todas são perfeitas para o que você precisa - Cuidado! Nem todas são perfeitas para o que você precisa fazer! fazer! - Evitar ao máximo usar REGEX para buscar informações em - Evitar ao máximo usar REGEX para buscar informações em páginas web páginas web - Ter a consciência que as páginas web mudam constantemente - Ter a consciência que as páginas web mudam constantemente
  4. O que eu instalei de O que eu instalei de

    dependência!? dependência!? Scrapy==1.0.3 Twisted==15.4.0 argparse==1.2.1 cffi==1.3.0 characteristic==14.3.0 cryptography==1.0.2 cssselect==0.9.1 enum34==1.0.4 Idna==2.0 ipaddress==1.0.14 lxml==3.4.4 pyOpenSSL==0.15.1 pyasn1==0.1.9 pyasn1-modules==0.0.8 pycparser==2.14 queuelib==1.4.2 service-identity==14.0.0 six==1.10.0 w3lib==1.12.0 wsgiref==0.1.2 zope.interface==4.1.3
  5. O shell do Scrapy O shell do Scrapy $ scrapy

    shell http://www.meetup.com/pt/Grupy-SP/events/225100888/ … informações omitidas … [s] Available Scrapy objects: [s] crawler <scrapy.crawler.Crawler object at 0x7fcdd168eb90> [s] item {} [s] request <GET http://www.meetup.com/pt/Grupy-SP/events/225100888/> [s] response <200 http://www.meetup.com/pt/Grupy-SP/events/225100888/> [s] settings <scrapy.settings.Settings object at 0x7fcdd168eb10> [s] spider <DefaultSpider 'default' at 0x7fcdd0d84dd0> [s] Useful shortcuts: [s] shelp() Shell help (print this help) [s] fetch(req_or_url) Fetch request (or URL) and update local objects [s] view(response) View response in a browser >>> * funciona perfeitamente junto ao ipython/ipdb
  6. Coisas legais do objeto Coisas legais do objeto response... response...

    >>> response.xpath('//*[@id="rsvp_184883209"]/div[1]/div[2]/h5').extract() [u'<h5 class="padding-none member-name">\n\t\t\t\t\t\t\t<a href="http://www.meetup.com/pt/Grupy-SP/members/184883209">Rafael Henrique da Silva C.</a>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</h5>'] >>> response.css('#rsvp_184883209 > div.line > div.unit.size5of7.rsvp- introBlurb > h5 > a').extract() [u'<a href="http://www.meetup.com/pt/Grupy- SP/members/184883209">Rafael Henrique da Silva C.</a>']
  7. “XPath, a XML Path Language, é uma linguagem de consulta

    (Query Language) para selecionar nós de um documento XML. Ademais, XPath pode ser usada para computar valores (por exemplo, strings, números ou valores booleanos) do conteúdo de um documento XML. XPath foi definido pelo World Wide Web Consortium (W3C).” Fonte Wikipédia, a enciclopédia livre. XPath XPath
  8. CSS Selectors CSS Selectors “Selectors are patterns that match against

    elements in a tree, and as such form one of several technologies that can be used to select nodes in an XML document. Selectors have been optimized for use with HTML and XML, and are designed to be usable in performance-critical code.” From W3C
  9. Depois de alguma “garimpagem” você Depois de alguma “garimpagem” você

    consegue isso: consegue isso: >>> rsvp_list = response.xpath('//*[@id="rsvp-list"]') >>> rsvp_members = rsvp_list.xpath('*[@id]/div/div[2]/h5/a/text()') >>> print(rsvp_members.extract()) [u'Eric H.', u'Luis M.', u'Ivan A.', u'Dhiana D.', u'Rafael Henrique da Silva C.', ….elementos omitidos….. u'Ariadyne O.', u'Fernando Freitas A.', u'Luiz Fernando da S.', u'Cleiton F.']
  10. O projeto! O projeto! Para aprender algo eu sempre crio

    um projeto…. Então vamos lá! Vou criar um projeto para descobrir qual é o cara que mais marcou presença no GruPy-SP (que marcou como RSVP) utilizando TODOS os eventos que foram criados no Meetup.
  11. $ scrapy startproject members_grupy_sp $ cd members_grupy_sp/ $ scrapy genspider

    meetup meetup.com $ scrapy crawl meetup Criando o projeto: Criando o projeto:
  12. De que adianta um parser? Sem De que adianta um

    parser? Sem nada mais!? nada mais!?
  13. O arquivo pipelines.py (imports) O arquivo pipelines.py (imports) Sim esse

    aquivo não ia caber em um slide :/…. foi mal ai!
  14. Isso ai vai funcionar!? Isso ai vai funcionar!? Não ainda!

    Não ainda! O arquivo settings.py O arquivo settings.py
  15. E o rank!? (imports + __init__ + E o rank!?

    (imports + __init__ + spider_closed) spider_closed)
  16. OBRIGADO! OBRIGADO! Referências: Referências: Doc oficial: Doc oficial: http://scrapy.readthedocs.org/en/latest/ http://scrapy.readthedocs.org/en/latest/

    Real Python: Real Python: https://realpython.com/blog/python/web-scraping-with-scrapy-and-mon https://realpython.com/blog/python/web-scraping-with-scrapy-and-mon godb/ godb/ Python Club – Capi Etheriel: Python Club – Capi Etheriel: http://pythonclub.com.br/raspando-a-web-com-python-parte-1.html http://pythonclub.com.br/raspando-a-web-com-python-parte-1.html Repositório github: Repositório github: https://github.com/rafaelhenrique/members_grupy_sp https://github.com/rafaelhenrique/members_grupy_sp https://github.com/rafaelhenrique/curse_spider https://github.com/rafaelhenrique/curse_spider Contato: Contato: http://blog.abraseucodigo.com.br http://blog.abraseucodigo.com.br