├── .gitattributes ├── README.md ├── python-oreilly ├── README.md └── scrapetest.py └── python-videos-online └── script_20180320.py /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # web-scraping 2 | Neste repositório, irei compartilhar códigos referentes a Web Scraping, que tem como objetivo a extração de dados de páginas Web. 3 | 4 | Existem diversas possibilidades para esse tipo de programação, podendo automatizar diversas tarefas em uma empresa. 5 | 6 | Já utilizei softwares para criar rotinas de automação na web, além de utilizar extensões de navegadores para tarefas mais simples, mas pretendo aprender cada vez mais nesta área. 7 | 8 | Links interessantes: 9 | * [PHP Web Scraping @lorien](https://github.com/lorien/awesome-web-scraping/blob/master/php.md#php-web-scraping) 10 | * [Web Scraping Console Tools @lorien](https://github.com/lorien/awesome-web-scraping/blob/master/console_tools.md#console-tools) 11 | * [Web Scraping Books @lorien](https://github.com/lorien/awesome-web-scraping/blob/master/books.md) 12 | * [Web Scraping Web Services @lorien](https://github.com/lorien/awesome-web-scraping/blob/master/web_services.md) 13 | * [Guia para iniciantes de Web Scraping em Python (usando BeautifulSoup)](https://www.vooo.pro/insights/guia-para-iniciantes-de-web-scraping-em-python-usando-beautifulsoup/) 14 | * [Youtube - Mini Curso Web Scraping com Python + BeautifulSoup + Requests](https://www.youtube.com/watch?v=7C6uV_kCMJU) 15 | * [Aprendendo sobre web scraping em Python utilizando BeautifulSoup](https://imasters.com.br/desenvolvimento/aprendendo-sobre-web-scraping-em-python-utilizando-beautifulsoup/?trace=1519021197&source=single) 16 | * [Curso Pago - Web Scraping com Python e Beautiful Soup](https://marcoscastro.teachable.com/p/web-scraping-com-python-e-beautiful-soup) 17 | * [Livro Físico - Web Scraping Com Python: Coletando Dados na Web Moderna](https://www.saraiva.com.br/web-scraping-com-python-coletando-dados-na-web-moderna-9094183.html) 18 | * [Apostila - Apostila Web Scraping com Python ](https://caveiratech.com/forum/cursos-e-books-tutoriais-apostilas-e-livros/apostila-web-scraping-com-python/) 19 | * [Web Scraping e Web Crawler – Introdução e Passos Iniciais](http://netcoders.com.br/web-crawler-introducao-e-passos-iniciais/) 20 | * [Ebook Pago - Web Scraping for PHP developers](https://leanpub.com/web-scraping) 21 | * [Top 10 Best Web Scraping Books](https://nocodewebscraping.com/top-10-web-scraping-books/) 22 | * [DataQuest - Cursos](https://www.dataquest.io/) 23 | * [WebScraper IO](http://webscraper.io/tutorials) 24 | * [Scrapy Python Primeiros Passos](https://pythonhelp.wordpress.com/2014/08/05/web-scraping-com-scrapy-primeiros-passos/) 25 | * [Scrapy](https://scrapy.org/) 26 | * [Scrapy Tutorial](http://scrapy.readthedocs.io/en/latest/intro/tutorial.html) 27 | * [Python - Preenchimento de Formulários](https://pythonhelp.wordpress.com/tag/web-crawling/) 28 | * [PythonClub - Web Scraping na Nuvem](http://pythonclub.com.br/material-do-tutorial-web-scraping-na-nuvem.html) 29 | * [Outro tutorial (em inglês) de scrapy](https://www.analyticsvidhya.com/blog/2017/07/web-scraping-in-python-using-scrapy/) 30 | * [Mais um tutorial de scrapy @speakerdeck](https://speakerdeck.com/eliasdorneles/explorando-scrapy-alem-do-tutorial) 31 | * [scrapinghub scrapy cloud](https://scrapinghub.com/scrapy-cloud) 32 | * [scrapy test @allanw](https://github.com/allanw/scrapy_test) 33 | * [scrapyd](http://scrapyd.readthedocs.io/en/stable/) 34 | * [@sangaline - advanced web scraping tutorial](https://github.com/sangaline/advanced-web-scraping-tutorial) 35 | * [Selenium](https://github.com/SeleniumHQ/selenium) 36 | * [Youtube - Python Web Scraping Tutorial 1 (Intro To Web Scraping)](https://www.youtube.com/watch?v=E7wB__M9fdw) 37 | * [analystcave - web scraping tutorial](http://analystcave.com/web-scraping-tutorial/#Introduction) 38 | * [stanford - Beautiful Soup](http://web.stanford.edu/~zlotnick/TextAsData/Web_Scraping_with_Beautiful_Soup.html) 39 | * [Curso Udemy - Scrape Websites using PhantomJS and CasperJS](https://www.udemy.com/scrape-websites-phantomjs-casperjs/) 40 | * [Livro Online - Automate The Boring Stuff](https://automatetheboringstuff.com/chapter11/) 41 | * [PhantomJs - Scriptable Headless WebKit](https://github.com/ariya/phantomjs/) 42 | * [puppeteer - Headless Chrome Node API](https://github.com/GoogleChrome/puppeteer) 43 | * [CasperJS](http://casperjs.org/) 44 | * [BeautifulSoup](https://www.crummy.com/software/BeautifulSoup/) 45 | * [Python XML processing with lxml](http://infohost.nmt.edu/~shipman/soft/pylxml/web/index.html) -------------------------------------------------------------------------------- /python-oreilly/README.md: -------------------------------------------------------------------------------- 1 | # Web Scraping with Python: Collecting Data from the Modern Web - Ryan Mitchell 2 | 3 | Anotações e códigos do livro 4 | 5 | Fernanda Aparecida @ 2017 6 | 7 | ## Capítulo 1 8 | - BeautifulSoup4 9 | - E se tiver mais uma tag h1, por exemplo? 10 | - PREVEJA AS EXCEÇÕES! -------------------------------------------------------------------------------- /python-oreilly/scrapetest.py: -------------------------------------------------------------------------------- 1 | from urllib.request import urlopen 2 | from urllib.error import HTTPError 3 | from bs4 import BeautifulSoup 4 | 5 | def getTitle(url): 6 | try: 7 | html = urlopen(url) 8 | except HTTPError as e: 9 | return None 10 | try: 11 | bsObj = BeautifulSoup(html.read(), "html.parser") 12 | title = bsObj.body.h1 13 | except AttributeError as e: 14 | return None 15 | return title 16 | 17 | title = getTitle("http://www.pythonscraping.com/pages/page1.html") 18 | if title == None: 19 | print("Titulo não foi encontrada") 20 | else: 21 | print(title) -------------------------------------------------------------------------------- /python-videos-online/script_20180320.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 3 | Python - Web crawler 4 | 5 | 2018-03-20 6 | 7 | vídeo no youtube https://www.youtube.com/watch?v=tuI_Z6VolbE 8 | 9 | crawler utilizando BS4 (Beautiful Soup) 10 | 11 | define a função extract_title, que recebeo conteudo de uma página html. 12 | instancia a classe BeautifulSoup com o conteudo, utilizando o parser lxml 13 | 14 | procura a tag title com texto dentro dela 15 | 16 | verifica se a tag não é nula, e então retorna a string dessa tag 17 | 18 | o programa final procura, de forma recursiva, todos os links de uma página, e faz um print do titulo da pagina e da sua url 19 | 20 | ''' 21 | 22 | 23 | from bs4 import BeautifulSoup 24 | import requests 25 | 26 | def extract_title(content): 27 | soup = BeautifulSoup(content, "lxml") 28 | tag = soup.find("title", text=True) 29 | 30 | if not tag: 31 | return None 32 | 33 | # strip é um trim da string 34 | return tag.string.strip() 35 | 36 | def extract_links(content): 37 | soup = BeautifulSoup(content, "lxml") 38 | # set é um conjunto/array, sem elementos duplicados 39 | links = set() 40 | 41 | for tag in soup.find_all("a", href=True): 42 | # não considera links relativos, só links diretos 43 | if tag['href'].startswith("http"): 44 | links.add(tag['href']) 45 | 46 | return links 47 | 48 | def crawl(start_url): 49 | seen_urls = set([start_url]) 50 | available_urls = set([start_url]) 51 | 52 | while available_urls: 53 | url = available_urls.pop() 54 | 55 | try: 56 | content = requests.get(url, timeout=3).text 57 | except Exception: 58 | continue 59 | 60 | title = extract_title(content) 61 | 62 | if title: 63 | print(title) 64 | print(url) 65 | print() 66 | 67 | for link in extract_links(content): 68 | if link not in seen_urls: 69 | seen_urls.add(link) 70 | available_urls.add(link) 71 | 72 | try: 73 | crawl("https://www.python.org/") 74 | except KeyboardInterrupt: 75 | print() 76 | print("Bye!") 77 | 78 | --------------------------------------------------------------------------------