Created
June 3, 2020 10:20
-
-
Save balouf/01b92a038516c4f52c4854000ed0a622 to your computer and use it in GitHub Desktop.
InputOutput-Part_II.ipynb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T08:45:51.595058Z", | |
"end_time": "2020-06-03T08:45:51.621179Z" | |
}, | |
"slideshow": { | |
"slide_type": "skip" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "from IPython.core.display import display, HTML\ndisplay(HTML(\"\"\"<style>\n.prompt_container { display: none !important; }\n.prompt { display: none !important; }\n.run_this_cell { display: none !important; }\n</style>\"\"\"))", | |
"execution_count": 1, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": "<IPython.core.display.HTML object>", | |
"text/html": "<style>\n.prompt_container { display: none !important; }\n.prompt { display: none !important; }\n.run_this_cell { display: none !important; }\n</style>" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Input, Output, and the Internet" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "## Introduction" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "### Objectives" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "- Show simple things that facilitates dealing with files\n- Some you may know (François / Marco workshops)\n- Brief overview, references, examples\n- This is how *I* do these things *today* (probably not perfect)" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "### Roadmap\n\n- Part I: Local files (done)\n- Part II: The Internet\n - http & html\n - requests\n - BeautifulSoup\n - Selenium\n- Examples\n - Google search\n - Scantrads scrapping\n - Lincs wiki\n - Bonuses" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "## Part I: Local files" | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "Available at\n\nhttps://www.lincs.fr/events/input-output-and-the-internet-part-i/" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Add-on on pathlib" | |
}, | |
{ | |
"metadata": { | |
"cell_style": "split" | |
}, | |
"cell_type": "markdown", | |
"source": "For those interested in `os`&co vs `pathlib` See https://www.youtube.com/watch?v=Vrh63V7OoY8.\n\nNote: most of the *issues* reported in the video (`open` compatibility, `with_suffix`) are now solved." | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T08:45:56.093842Z", | |
"end_time": "2020-06-03T08:45:56.104344Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "%%HTML\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Vrh63V7OoY8\" frameborder=\"0\" allowfullscreen></iframe>", | |
"execution_count": 2, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": "<IPython.core.display.HTML object>", | |
"text/html": "<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Vrh63V7OoY8\" frameborder=\"0\" allowfullscreen></iframe>\n" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "## Part II: The Internet" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-05-19T08:09:46.863276Z", | |
"start_time": "2020-05-19T08:09:46.850794Z" | |
}, | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "### HTTP(S) & HTML" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# HTTP(S)\n\n- One of the main protocol to retrieve files from the Internet\n- Initially designed for html files (Web), but now used for almost anything, replacing in practice `FTP`\n- Simple as a click for most users\n- *S*: secure variant\n- https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# POST, GET, headers, etc..." | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "What happends during a HTTP request? First, client (browser) sends data to server\n- Implicit data through *request headers*: \n - My browser is rich!\n - Would like some cookies? \n - I am French, by the way!\n- Explicit data required to get things done\n - Embedded in the URL, e.g. `login.php?login=thisismylogin&password=OhYouCanSeeMyPassword`: GET method\n - Hidden in a side *form data* (json): POST method" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# POST, GET, headers, etc..." | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "What happends during a HTTP request? Server sends back data\n- *response headers*: \n - I am Apache. \n - Please eat these fresh cookies!\n - I also have some meta-data for what you asked!\n- A status code (200, 302, 404)\n- Some content" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# HTML" | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "HTML is just a *text* file made of nested tags (a.k.a. elements), possibly with attributes (SGML/XML/XHTML: variants)" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:11:14.884914Z", | |
"end_time": "2020-06-03T09:11:14.896763Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "html_template = \"\"\"\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <title>%s</title>\n </head>\n <body>\n <div style=\"font-size: 30px\">\n %s\n</div>\n </body>\n</html>\n\"\"\"\nfrom IPython.display import HTML\nHTML(html_template % (\"Page Title\", \"Page Content\"))", | |
"execution_count": 3, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 3, | |
"data": { | |
"text/plain": "<IPython.core.display.HTML object>", | |
"text/html": "\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <title>Page Title</title>\n </head>\n <body>\n <div style=\"font-size: 30px\">\n Page Content\n</div>\n </body>\n</html>\n" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Inspect is your friend" | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "You can use inspect to:\n- Locate things in the HTML code\n- Understand the network exchanges that occur when you do things\n\nExamples:\n- http://lelscano.com\n- https://wiki.inria.fr/lincs/Start_Page" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "### The ``requests`` module" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Simple requests" | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "Usage: `requests.get(url, params=None, headers=None, cookies=None, auth=None, timeout=None)` (same for `post`)." | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:16:08.907113Z", | |
"end_time": "2020-06-03T09:16:09.486713Z" | |
}, | |
"cell_style": "split", | |
"slideshow": { | |
"slide_type": "-" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "import requests\nwiki = \"https://wiki.inria.fr/lincs/\"\nmanga = \"http://lelscano.com\"\nr = requests.get(manga)\nprint(f\"Request status is {r.status_code},\\n\"\n f\"Content length is {len(r.content)} bytes,\\n\"\n f\"Request encoding is {r.encoding},\\n\"\n f\"Text size is {len(r.text)} chars.\")", | |
"execution_count": 4, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": "Request status is 200,\nContent length is 50292 bytes,\nRequest encoding is UTF-8,\nText size is 50286 chars.\n", | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:17:06.098482Z", | |
"end_time": "2020-06-03T09:17:06.106739Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "print(f\"Response headers: {r.headers}\")", | |
"execution_count": 5, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": "Response headers: {'Date': 'Wed, 03 Jun 2020 09:16:09 GMT', 'Content-Type': 'text/html; charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Set-Cookie': 'mobile_lelscan=0; expires=Thu, 04-Jun-2020 09:16:09 GMT; Max-Age=86400; path=lelscano.com', 'Vary': 'Accept-Encoding', 'CF-Cache-Status': 'DYNAMIC', 'cf-request-id': '031b1083cc0000b7b103164200000001', 'Server': 'cloudflare', 'CF-RAY': '59d8504c7c69b7b1-CDG', 'Content-Encoding': 'gzip'}\n", | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Bonus: stream downloading" | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "By default, content is loaded in memory on request. For big files, you can use the `stream` flag." | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:18:09.720082Z", | |
"end_time": "2020-06-03T09:18:09.731808Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "from pathlib import Path\ndef stream_download(source_url, dest_file):\n r = requests.get(source_url, stream=True)\n dest_file = Path(dest_file)\n with open(dest_file, \"wb\") as f:\n for chunk in r.iter_content(chunk_size=8192):\n if chunk: # filter out keep-alive new chunks\n f.write(chunk)", | |
"execution_count": 6, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:18:16.387836Z", | |
"end_time": "2020-06-03T09:18:16.497209Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "img = \"https://wiki.inria.fr/wikis/lincs/images/8/88/LogoLincs.png\"\nstream_download(source_url=img,\n dest_file=\"pupusse.png\")", | |
"execution_count": 7, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Sanity check" | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "With `stream`, one can look the actual raw received content" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:19:06.829577Z", | |
"end_time": "2020-06-03T09:19:07.112813Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "# By combining stream & raw, one can replay the process\nimport zlib\nr = requests.get(manga, stream=True)\nraw = r.raw.read()\nprint(f\"Size of raw received data: {len(raw)} bytes.\")\ndecompressed_raw = zlib.decompress(raw, 32)\nprint(f\"Size of decompressed received data: {len(decompressed_raw)} bytes.\")\ntext = decompressed_raw.decode()\nprint(f\"Size of received text: {len(text)} characters.\")\ntext2 = requests.get(manga).text\nprint(text==text2)", | |
"execution_count": 8, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": "Size of raw received data: 8543 bytes.\nSize of decompressed received data: 50292 bytes.\nSize of received text: 50286 characters.\nTrue\n", | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Session" | |
}, | |
{ | |
"metadata": { | |
"cell_style": "split" | |
}, | |
"cell_type": "markdown", | |
"source": "- Session is just **requests with memory** of past requests\n- Keep track of cookies\n- Faster when performing multiple requests on the same server\n- Can be used with context manager\n" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:21:21.666908Z", | |
"end_time": "2020-06-03T09:21:21.999235Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "with requests.Session() as s:\n r = s.get(wiki)\n print(f\"Request status is {r.status_code}\")\n r = s.get(img)\n print(r.headers)", | |
"execution_count": 9, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": "Request status is 200\n{'Date': 'Wed, 03 Jun 2020 09:21:21 GMT', 'Server': 'Apache', 'Last-Modified': 'Fri, 04 Jan 2019 10:40:58 GMT', 'ETag': '\"36ea-57e9f83bad72f\"', 'Accept-Ranges': 'bytes', 'Content-Length': '14058', 'Connection': 'close', 'Content-Type': 'image/png'}\n", | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:21:47.049807Z", | |
"end_time": "2020-06-03T09:21:47.061362Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "s.headers # s exists outside the CM! I forgot to tell... Now you know!", | |
"execution_count": 10, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 10, | |
"data": { | |
"text/plain": "{'User-Agent': 'python-requests/2.23.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# requests vs urllib 1/2/3" | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "- `requests` is built on top of urllib3, so anything you can do with `requests` can be done with `urllib3`\n- Some advanced spoofing techniques **NOT DISCLOSED IN THIS TALK** require `urllib3`\n- But requests is **MUCH** straightforward to use\n- Think of $\\LaTeX$ vs $\\TeX$\n- Full name is **Requests: HTTP for Humans**\n- https://stackoverflow.com/questions/2018026/what-are-the-differences-between-the-urllib-urllib2-urllib3-and-requests-modul\n- https://requests.readthedocs.io/en/master/" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "### BeautifulSoup" | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "The Pandas of HTML?\n- Can find&extract pretty much anything you want in a pythonic way\n- Some find it slow & overkill and prefer `re`\n- My opinion: perfect for web pages, unfit for very large XML files" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Recipe" | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "- Make a soup (a navigable version of a string)\n- Browse a soup\n - `soup.find(\"tag\")` / `soup.tag` (returns soup)\n - `soup.find_all(\"tag\")` / `soup(\"tag\")` (returns list)\n - `soup.find(\"tag\", {'attr_name': 'attr_value'})`\n - `soup.contents` (list of children)\n- Extract text\n - `soup.decode_contents()`: return soup as string\n - `soup.encode_contents()`: return soup as bytes\n - `soup.text`: return soup as tagless string\n - `soup['attr_name']`: return attribute value" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Make a soup" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:26:04.505493Z", | |
"end_time": "2020-06-03T09:26:04.868101Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "from bs4 import BeautifulSoup as bs\nsoup = bs(text, features=\"lxml\")", | |
"execution_count": 11, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:26:31.302330Z", | |
"end_time": "2020-06-03T09:26:31.313171Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "type(soup)", | |
"execution_count": 12, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 12, | |
"data": { | |
"text/plain": "bs4.BeautifulSoup" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Browse a soup" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:26:39.265738Z", | |
"end_time": "2020-06-03T09:26:39.276838Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "soup.find('meta')", | |
"execution_count": 13, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 13, | |
"data": { | |
"text/plain": "<meta content=\"One Piece Lecture en ligne, tous les scan One Piece.\" name=\"description\"/>" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:26:49.306868Z", | |
"end_time": "2020-06-03T09:26:49.321799Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "soup.find_all('meta')", | |
"execution_count": 14, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 14, | |
"data": { | |
"text/plain": "[<meta content=\"One Piece Lecture en ligne, tous les scan One Piece.\" name=\"description\"/>,\n <meta content=\"One Piece\" name=\"lelscan\"/>,\n <meta content=\"text/html;charset=utf-8\" http-equiv=\"Content-Type\"/>,\n <meta content=\"fr\" http-equiv=\"Content-Language\"/>,\n <meta content=\"One Piece lecture en ligne, lecture en ligne One Piece, scan One Piece, One Piece scan, One Piece lel, lecture en ligne One Piece, Lecture, lecture, scan, chapitre, chapitre One Piece, lecture One Piece, lecture Chapitre One Piece, mangas, manga, One Piece, One Piece fr, One Piece france, scans, image One Piece \" name=\"keywords\"/>,\n <meta content=\"One Piece lecture en ligne scan\" name=\"subject\"/>,\n <meta content=\"http://lelscano.com\" name=\"identifier-url\"/>,\n <meta content=\"/mangas/one-piece/thumb_cover.jpg\" property=\"og:image\"/>,\n <meta content=\"Lecture en ligne One Piece scan\" property=\"og:title\"/>,\n <meta content=\"/lecture-ligne-one-piece.php\" property=\"og:url\"/>,\n <meta content=\"One Piece lecture en ligne - lelscan\" property=\"og:description\"/>,\n <meta name=\"137.194.164.55\"/>]" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Browse a soup" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:27:04.115899Z", | |
"end_time": "2020-06-03T09:27:04.127249Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "soup.find('meta', {'name': 'keywords'})", | |
"execution_count": 15, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 15, | |
"data": { | |
"text/plain": "<meta content=\"One Piece lecture en ligne, lecture en ligne One Piece, scan One Piece, One Piece scan, One Piece lel, lecture en ligne One Piece, Lecture, lecture, scan, chapitre, chapitre One Piece, lecture One Piece, lecture Chapitre One Piece, mangas, manga, One Piece, One Piece fr, One Piece france, scans, image One Piece \" name=\"keywords\"/>" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:27:27.186777Z", | |
"end_time": "2020-06-03T09:27:27.202868Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "soup.find('div', id='navigation').find('a')", | |
"execution_count": 16, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 16, | |
"data": { | |
"text/plain": "<a href=\"http://lelscano.com/scan-one-piece/980/1\">Prec</a>" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Implicit search" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:27:42.405533Z", | |
"end_time": "2020-06-03T09:27:42.415109Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "soup.meta", | |
"execution_count": 17, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 17, | |
"data": { | |
"text/plain": "<meta content=\"One Piece Lecture en ligne, tous les scan One Piece.\" name=\"description\"/>" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:28:04.646909Z", | |
"end_time": "2020-06-03T09:28:04.671558Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "soup(id='navigation')[0].a", | |
"execution_count": 18, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 18, | |
"data": { | |
"text/plain": "<a href=\"http://lelscano.com/scan-one-piece/980/1\">Prec</a>" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Extract text" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:28:25.057358Z", | |
"end_time": "2020-06-03T09:28:25.082829Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "# class is reserved in Python, use class_ for class attribute\nsmall_soup = soup(class_='outil_lecture')[0]('p')[-1]\nsmall_soup", | |
"execution_count": 19, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 19, | |
"data": { | |
"text/plain": "<p>\n<strong>Scan suivant:</strong> <a href=\"http://lelscano.com/scan-one-piece/981\">One Piece 981</a> arrive bientôt...</p>" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:28:44.338809Z", | |
"end_time": "2020-06-03T09:28:44.349114Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "small_soup.a['href']", | |
"execution_count": 20, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 20, | |
"data": { | |
"text/plain": "'http://lelscano.com/scan-one-piece/981'" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:28:48.498439Z", | |
"end_time": "2020-06-03T09:28:48.507888Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "small_soup.text", | |
"execution_count": 21, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 21, | |
"data": { | |
"text/plain": "'\\nScan suivant: One Piece 981 arrive bientôt...'" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:28:52.948458Z", | |
"end_time": "2020-06-03T09:28:52.958554Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "small_soup.decode_contents()", | |
"execution_count": 22, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 22, | |
"data": { | |
"text/plain": "'\\n<strong>Scan suivant:</strong> <a href=\"http://lelscano.com/scan-one-piece/981\">One Piece 981</a> arrive bientôt...'" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:29:00.516457Z", | |
"end_time": "2020-06-03T09:29:00.526056Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "small_soup.encode_contents()", | |
"execution_count": 23, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 23, | |
"data": { | |
"text/plain": "b'\\n<strong>Scan suivant:</strong> <a href=\"http://lelscano.com/scan-one-piece/981\">One Piece 981</a> arrive bient\\xc3\\xb4t...'" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"cell_style": "center", | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "### Selenium" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Selenium" | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "https://selenium-python.readthedocs.io/\n\nHuge amount of possibilities. We'll just show the ropes here." | |
}, | |
{ | |
"metadata": { | |
"cell_style": "center", | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# What?" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "-" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "- Selenium is framework to pilot a browser from a programming language\n- Exists in many flavors, including Python" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Why?" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "-" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "- Main goal: automate testing for web designers\n- Side goal: scrap the unscrappable" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# How?" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "-" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "- Unscrappable usually means hidden JS dialogs very hard to emulate with requests\n- Selenium does not emulate anything. It uses your real browser!" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Installation" | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "- You need a browser installed (I recommend Chrome for stability)\n- You need selenium for python\n- You need the `driver` of your browser (matching accurate version). https://www.selenium.dev/downloads/" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Usage: basic workflow" | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "- `driver = webdriver.Chrome()`: Launch a slave, blank, browser instance controlled by Python\n- Drive your browser\n - `drive.get(url)`: go to `url`\n - `elem = driver.find_element_by...`: specify an element of the page (inspect is your friend)\n - `elem.send_keys(txt)`, `elem.click()`, ... interact\n - `drive.page_source`: retrieve HTML code\n- `driver.close()` (you can use a context manager for safe automatic close)" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Launch a browser" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:34:26.821003Z", | |
"end_time": "2020-06-03T09:34:30.618356Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "from selenium import webdriver\ndriver = webdriver.Chrome()", | |
"execution_count": 24, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Drive" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:34:41.467936Z", | |
"end_time": "2020-06-03T09:34:42.343599Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "driver.get(\"https://www.google.com\")", | |
"execution_count": 25, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:35:03.122357Z", | |
"end_time": "2020-06-03T09:35:03.530752Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "elem = driver.find_element_by_name('q')\nelem.send_keys(\"platypus\")", | |
"execution_count": 26, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:35:08.641644Z", | |
"end_time": "2020-06-03T09:35:10.420077Z" | |
}, | |
"cell_style": "center", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "from selenium.webdriver.common.keys import Keys\nelem.send_keys(Keys.RETURN)", | |
"execution_count": 27, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Get & close" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:35:22.292619Z", | |
"end_time": "2020-06-03T09:35:26.840838Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "soup = bs(driver.page_source, features=\"lxml\")\ndriver.close()", | |
"execution_count": 28, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Use" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:35:49.001961Z", | |
"end_time": "2020-06-03T09:35:49.087164Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "[{'title': s.h3.text, \n 'snippet': s(class_='st')[0].text.replace('\\xa0', ''),\n 'url': s.a['href']} \n for s in soup(class_='rc') if s('h3')]", | |
"execution_count": 29, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 29, | |
"data": { | |
"text/plain": "[{'title': 'Platypus | National Geographic',\n 'snippet': \"The platypus is among nature's most unlikely animals. ... Platypuses hunt underwater, where they swim gracefully by paddling with their front webbed feet and...\",\n 'url': 'https://www.nationalgeographic.com/animals/mammals/p/platypus/'},\n {'title': 'Ornithorynque — Wikipédia',\n 'snippet': \"L'animal fut appelé Platypus par les Anglais, nom composite dérivé des mots grecs πλατύς / platús (« plat », « large ») et πούς / poús (« pied »), c'est-à-dire...\",\n 'url': 'https://fr.wikipedia.org/wiki/Ornithorynque'},\n {'title': 'Platypus — Wikipédia',\n 'snippet': \"Platypus peut se référer à : Platypus, un genre d'insectes xylophages ;; Platypus, un groupe de rock progressif ;; Platypus (en), jeu vidéo de shoot them up sur...\",\n 'url': 'https://fr.wikipedia.org/wiki/Platypus'},\n {'title': 'Platypus | Eggs, Habitat, & Facts | Britannica',\n 'snippet': 'Platypus, small amphibious Australian mammal noted for its duck-beak-like bill and odd combination of primitive features.',\n 'url': 'https://www.britannica.com/animal/platypus'},\n {'title': 'Platypus Facts | Live Science',\n 'snippet': '4 août 2014 - The platypus is one of the most unusual creatures in the animal kingdom. Platypuses (which is the correct plural form, not \"platypi\") have a...',\n 'url': 'https://www.livescience.com/27572-platypus.html'},\n {'title': 'platypus — Wiktionnaire',\n 'snippet': 'Le pluriel le plus courant est platypuses, mais on rencontre aussi platypus (forme invariable), platypi (forme latine, commune mais impropre puisque platypus...',\n 'url': 'https://fr.wiktionary.org/wiki/platypus'},\n {'title': 'Le déclin discret des ornithorynques',\n 'snippet': \"5 sept. 2019 - ... et chercheuse au sein de l'organisation Platypus Conservation Initiative (en français, Initiative pour la conservation des ornithorynques, ndlr).\",\n 'url': 'https://www.nationalgeographic.fr/animaux/2019/09/le-declin-discret-des-ornithorynques'},\n {'title': 'Platypus | San Diego Zoo Kids',\n 'snippet': \"A platypus is the only mammal with a bill. The dark gray skin on the bill is hairless and moist. Grooves along the sides of a platypus's bill help it filter food from the...\",\n 'url': 'https://kids.sandiegozoo.org/animals/platypus'}]" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "## Advanced Examples" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "### Google results class in less than 30 lines" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Google results" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:37:19.431223Z", | |
"end_time": "2020-06-03T09:37:19.450057Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "from selenium.webdriver.chrome.options import Options\nclass GoogleResults:\n def __init__(self):\n chrome_options = Options()\n chrome_options.add_argument(\"headless\") # Headless allows a silent execution\n self.driver = webdriver.Chrome(options=chrome_options)\n def __call__(self, query=\"platypus\", pages=3):\n self.driver.get(\"https://www.google.com\")\n elem = self.driver.find_element_by_name('q')\n elem.send_keys(query)\n elem.send_keys(Keys.RETURN)\n results = self.get_results()\n for page in range(2, pages+1): # With Inspect, one can copy path to navigation links\n elem = self.driver.find_element_by_xpath(f'//*[@id=\"xjs\"]/div/table/tbody/tr/td[{page+1}]/a')\n elem.click() \n results += self.get_results()\n return results \n def get_results(self):\n soup = bs(self.driver.page_source)\n return [{'title': s.h3.text, \n 'snippet': s(class_='st')[0].text.replace('\\xa0', ''),\n 'url': s.a['href']} \n for s in soup(class_='rc') if s('h3')]\n def close(self):\n self.driver.close()", | |
"execution_count": 30, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Google results" | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "Comments:\n- `headless` option: all is invisible, slightly less ressources, works outside graphic environment\n- Use of `find_element_by_xpath` to access next results (from `inspect`)" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Google results" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:39:09.478573Z", | |
"end_time": "2020-06-03T09:39:12.704382Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "google = GoogleResults()", | |
"execution_count": 31, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:39:16.299645Z", | |
"end_time": "2020-06-03T09:39:19.767496Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "google(\"python selenium\", pages=1)[:4]", | |
"execution_count": 32, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 32, | |
"data": { | |
"text/plain": "[{'title': 'Selenium with Python — Selenium Python Bindings 2 ...',\n 'snippet': 'Selenium with Python¶. Author: Baiju Muthukadan. License: This document is licensed under a Creative Commons Attribution-ShareAlike 4.0...',\n 'url': 'https://selenium-python.readthedocs.io/'},\n {'title': '2. Getting Started — Selenium Python Bindings 2 documentation',\n 'snippet': 'from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox() driver.get(\"http://www.python.org\") assert...',\n 'url': 'https://selenium-python.readthedocs.io/getting-started.html'},\n {'title': 'Testing automatisé avec Selenium et Python',\n 'snippet': \"Nous allons voir sur cette page comment automatiser l'exécution de tests fonctionnels grâce à Selenium et son API pour Python.\",\n 'url': 'http://www.test-recette.fr/recette/tests-fonctionnels-automatises/testing-automatise-selenium-python.html'},\n {'title': 'selenium · PyPI',\n 'snippet': 'Introduction. Python language bindings for Selenium WebDriver. The selenium package is used to automate web browser interaction from Python.',\n 'url': 'https://pypi.org/project/selenium/'}]" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:39:30.224661Z", | |
"end_time": "2020-06-03T09:39:30.341188Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "google.close()", | |
"execution_count": 33, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"cell_style": "center", | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Selenium-free variant" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:40:18.175289Z", | |
"end_time": "2020-06-03T09:40:18.202412Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "UA = r\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"\nclass GoogleResults:\n def __init__(self):\n self.session = requests.session()\n self.session.headers['User-Agent'] = UA\n def __call__(self, query=\"platypus\", pages=3):\n r = self.session.get(\"https://www.google.com\")\n soup = bs(r.text).form\n params = {i['name']: i.get('value', \"\") for i in soup('input') if i.get(\"type\", \"\") == \"hidden\"}\n params['q'] = query\n soup = bs(self.session.get(\"https://www.google.com/search\", params=params).text)\n results = self.get_results(soup)\n other_pages = [\"https://www.google.com\"+a['href'] for a in soup('a') if r\"&start=\" in a.get('href', \"\")]\n for page in other_pages[:(pages-1)]:\n soup = bs(self.session.get(page).text)\n results += self.get_results(soup)\n return results \n def get_results(self, soup):\n return [{'title': s.h3.text, \n 'snippet': s(class_='st')[0].text.replace('\\xa0', ''),\n 'url': s.a['href']} \n for s in soup(class_='rc') if s('h3')]\n def close(self):\n self.session.close()", | |
"execution_count": 34, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"cell_style": "center", | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Selenium-free variant" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:40:21.525743Z", | |
"end_time": "2020-06-03T09:40:21.531635Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "google = GoogleResults()", | |
"execution_count": 35, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:40:22.673848Z", | |
"end_time": "2020-06-03T09:40:23.334825Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "google(\"Python Selenium\", pages=1)[:4]", | |
"execution_count": 36, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 36, | |
"data": { | |
"text/plain": "[{'title': 'Selenium with Python — Selenium Python Bindings 2 ...',\n 'snippet': 'Selenium with Python¶. Author: Baiju Muthukadan. License: This document is licensed under a Creative Commons Attribution-ShareAlike 4.0...',\n 'url': 'https://selenium-python.readthedocs.io/'},\n {'title': '2. Getting Started — Selenium Python Bindings 2 documentation',\n 'snippet': 'from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox() driver.get(\"http://www.python.org\") assert...',\n 'url': 'https://selenium-python.readthedocs.io/getting-started.html'},\n {'title': 'Testing automatisé avec Selenium et Python',\n 'snippet': \"Nous allons voir sur cette page comment automatiser l'exécution de tests fonctionnels grâce à Selenium et son API pour Python.\",\n 'url': 'http://www.test-recette.fr/recette/tests-fonctionnels-automatises/testing-automatise-selenium-python.html'},\n {'title': 'selenium · PyPI',\n 'snippet': 'Introduction. Python language bindings for Selenium WebDriver. The selenium package is used to automate web browser interaction from Python.',\n 'url': 'https://pypi.org/project/selenium/'}]" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:40:25.203537Z", | |
"end_time": "2020-06-03T09:40:25.214335Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "google.close()", | |
"execution_count": 37, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"cell_style": "center", | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# `selenium` vs `requests`" | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "- `requests` is always faster and more efficient than `selenium`\n- `selenium` is easier to use\n - You just input what you would do as a human user\n - `requests` needs you to understand the underlying logic\n- For Google, these were the main `requests` challenges:\n - Spoof user agent to pose as Chrome (otherwise, Google ofbuscates the results).\n - Gather parameters of the `get` requests\n - Scrap hyperlinks to next pages (`bs4` has only partial selector support)\n- Be aware that sometimes `requests` will be too hard\n" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "### Scantrads scrapping" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Scrapping scantrads" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-05-31T16:57:24.963202Z", | |
"end_time": "2020-05-31T16:57:24.971771Z" | |
}, | |
"cell_style": "split" | |
}, | |
"cell_type": "markdown", | |
"source": "Input: http://lelscano.com\n- Proposes a list of mangas\n- for each manga, a list of issues\n- For each issue, a list of pages\n- In each page, an image" | |
}, | |
{ | |
"metadata": { | |
"cell_style": "split" | |
}, | |
"cell_type": "markdown", | |
"source": "Output: CBZ files\n- Standard format for BDs/mangas\n- Just a Zip file of images\n- CBR: RAR variant" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Scrapping scantrads" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:45:28.945047Z", | |
"end_time": "2020-06-03T09:45:28.954116Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "import zipfile\ns = requests.session()", | |
"execution_count": 38, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Get list of mangas" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:46:25.004486Z", | |
"end_time": "2020-06-03T09:46:25.012883Z" | |
}, | |
"trusted": true, | |
"cell_style": "split" | |
}, | |
"cell_type": "code", | |
"source": "def get_comics(site_url=manga, session=s):\n soup = bs(session.get(site_url).text)\n comics = soup('select')[1]('option')\n return [(c.text, c['value']) for c in comics]", | |
"execution_count": 39, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:46:35.364479Z", | |
"end_time": "2020-06-03T09:46:37.547717Z" | |
}, | |
"trusted": true, | |
"cell_style": "split" | |
}, | |
"cell_type": "code", | |
"source": "comics = get_comics()\ncomic = comics[0]\ncomics[:5]", | |
"execution_count": 40, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 40, | |
"data": { | |
"text/plain": "[('Assassination Classroom',\n 'http://lelscano.com/lecture-en-ligne-assassination-classroom.php'),\n ('Beelzebub', 'http://lelscano.com/lecture-en-ligne-beelzebub.php'),\n ('Black Clover', 'http://lelscano.com/lecture-en-ligne-black-clover.php'),\n ('Bleach', 'http://lelscano.com/lecture-en-ligne-bleach.php'),\n ('Boruto', 'http://lelscano.com/lecture-en-ligne-boruto.php')]" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Get list of issues" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:46:47.994867Z", | |
"end_time": "2020-06-03T09:46:48.005128Z" | |
}, | |
"trusted": true, | |
"cell_style": "split" | |
}, | |
"cell_type": "code", | |
"source": "def get_issues(comic=comic, session=s):\n soup = bs(session.get(comic[1]).text)\n issues = soup('select')[0]('option') \n return [(f\"{comic[0]} - {c.text}\", \n c['value']) for c in issues]", | |
"execution_count": 41, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:47:06.275595Z", | |
"end_time": "2020-06-03T09:47:06.347576Z" | |
}, | |
"trusted": true, | |
"cell_style": "split" | |
}, | |
"cell_type": "code", | |
"source": "issues = get_issues(comic)\nissue = issues[0]\nissues[:5]", | |
"execution_count": 42, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 42, | |
"data": { | |
"text/plain": "[('Assassination Classroom - 180',\n 'http://lelscano.com/scan-assassination-classroom/180'),\n ('Assassination Classroom - 179',\n 'http://lelscano.com/scan-assassination-classroom/179'),\n ('Assassination Classroom - 178',\n 'http://lelscano.com/scan-assassination-classroom/178'),\n ('Assassination Classroom - 177',\n 'http://lelscano.com/scan-assassination-classroom/177'),\n ('Assassination Classroom - 176',\n 'http://lelscano.com/scan-assassination-classroom/176')]" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Get list of pages" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:47:35.462287Z", | |
"end_time": "2020-06-03T09:47:35.472442Z" | |
}, | |
"trusted": true, | |
"cell_style": "split" | |
}, | |
"cell_type": "code", | |
"source": "def get_pages(issue=issue, session=s):\n soup = bs(session.get(issue[1]).text)\n pages = soup(id='navigation')[0]('a')\n return [a['href'] for a in pages][1:-1]", | |
"execution_count": 43, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:47:36.921872Z", | |
"end_time": "2020-06-03T09:47:37.034680Z" | |
}, | |
"trusted": true, | |
"cell_style": "split" | |
}, | |
"cell_type": "code", | |
"source": "pages = get_pages(issue)\npage = pages[0]\npages[:5]", | |
"execution_count": 44, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 44, | |
"data": { | |
"text/plain": "['http://lelscano.com/scan-assassination-classroom/180/1',\n 'http://lelscano.com/scan-assassination-classroom/180/2',\n 'http://lelscano.com/scan-assassination-classroom/180/3',\n 'http://lelscano.com/scan-assassination-classroom/180/4',\n 'http://lelscano.com/scan-assassination-classroom/180/5']" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Get image" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:48:11.444762Z", | |
"end_time": "2020-06-03T09:48:11.461352Z" | |
}, | |
"trusted": true, | |
"cell_style": "split" | |
}, | |
"cell_type": "code", | |
"source": "def page2image(page=page, session=s):\n soup = bs(session.get(page).text)\n img = soup(id='image')[0].img['src']\n return session.get(manga+img).content", | |
"execution_count": 45, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:48:16.634386Z", | |
"end_time": "2020-06-03T09:48:19.379979Z" | |
}, | |
"trusted": true, | |
"cell_style": "split" | |
}, | |
"cell_type": "code", | |
"source": "import matplotlib.pyplot as plt\nimport matplotlib.image as mpimg\nimport io\nimage = mpimg.imread(io.BytesIO(page2image()), 0)\nplt.imshow(image)\nplt.show()", | |
"execution_count": 46, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": "<Figure size 432x288 with 1 Axes>", | |
"image/png": "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\n" | |
}, | |
"metadata": { | |
"needs_background": "light" | |
} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Make CBZ" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:49:15.830230Z", | |
"end_time": "2020-06-03T09:49:15.846594Z" | |
}, | |
"trusted": true, | |
"cell_style": "split" | |
}, | |
"cell_type": "code", | |
"source": "dest = Path(\"../../../../../Datasets/mangas\")\ndef make_cbz(issue=issue, dest=dest, session=s):\n pages = get_pages(issue, s)\n with zipfile.ZipFile(dest / f'{issue[0]}.cbz', 'w') as z:\n for i, u in enumerate(pages): \n with z.open(f\"{i:04}.jpg\", \"w\") as img:\n img.write(page2image(u))", | |
"execution_count": 47, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:49:18.447812Z", | |
"end_time": "2020-06-03T09:49:27.910317Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "make_cbz()", | |
"execution_count": 48, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-05-17T06:38:40.571096Z", | |
"start_time": "2020-05-17T06:38:40.308530Z" | |
}, | |
"trusted": true, | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Putting all together" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-01T07:58:04.951849Z", | |
"end_time": "2020-06-01T08:04:13.861982Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "dest = Path(\"../../../../../Datasets/mangas\")\nsession = requests.session()\ncomics = get_comics(manga, session)\nfor comic in comics:\n comic_dir = dest / comic[0]\n comic_dir.mkdir(exist_ok=True, parents=True)\n issues = get_issues(comic, session)\n for issue in issues:\n make_cbz(issue, comic_dir, session)", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "### Scrapping LINCS wiki" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# LINCS wiki backup" | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "Goal: make a zip of Lincs wiki pages" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:51:02.995934Z", | |
"end_time": "2020-06-03T09:51:03.010503Z" | |
}, | |
"trusted": true, | |
"cell_style": "split" | |
}, | |
"cell_type": "code", | |
"source": "from nopeeking import LOGIN, PASSWORD\n\nbase_url = \"https://wiki.inria.fr\"\nlogin_url = \"/lincs/Special:UserLogin\"\nlist_url = \"/lincs/Special:AllPages\"", | |
"execution_count": 49, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:51:42.887503Z", | |
"end_time": "2020-06-03T09:51:42.895012Z" | |
}, | |
"trusted": true, | |
"cell_style": "split" | |
}, | |
"cell_type": "code", | |
"source": "html_template = \"\"\"\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <title>%s</title>\n </head>\n <body>\n %s\n </body>\n</html>\n\"\"\"", | |
"execution_count": 50, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Login" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:52:15.562398Z", | |
"end_time": "2020-06-03T09:52:15.571672Z" | |
}, | |
"trusted": true, | |
"cell_style": "split" | |
}, | |
"cell_type": "code", | |
"source": "def get_lincs_page(relative_url, session):\n r = session.get(base_url+relative_url)\n # Return soup of main div\n return bs(r.text)(id='mw-content-text')[0]", | |
"execution_count": 51, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:53:41.340690Z", | |
"end_time": "2020-06-03T09:53:41.356969Z" | |
}, | |
"trusted": true, | |
"cell_style": "split" | |
}, | |
"cell_type": "code", | |
"source": "def login_to_lincs(login=LOGIN, password=PASSWORD):\n s = requests.Session() \n soup = get_lincs_page(login_url, s)\n # Select form\n soup = soup.form\n # Retrieve input fields\n params = {i['name']: i.get('value', \"\") \n for i in soup('input')}\n # Retrieve select field\n params[soup.find('select')['name']] = \\\n soup.option['value']\n # Apply login & pwd:\n params.update({'wpName': LOGIN, \n 'wpPassword': PASSWORD})\n # log-in\n r = s.post(base_url+login_url, params)\n return s", | |
"execution_count": 52, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Scrapping" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-01T14:47:40.696095Z", | |
"end_time": "2020-06-01T14:47:55.137538Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "s = login_to_lincs()\nsoup = get_lincs_page(list_url, s)\n# Find all pages\npages = [ {'url': a['href'], 'name': a['title']} for a in soup('a')]\nwith zipfile.ZipFile(\"lincs_pages.zip\", \"w\") as z:\n for page in pages:\n print(f\"Retrieve {page['name']}\")\n with z.open(f\"{page['name']}.html\", \"w\") as f:\n html = html_template % (page['name'], get_lincs_page(page['url'], s).decode_contents())\n f.write(html.encode('utf8'))", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Using Selenium+requests" | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "- Sometimes:\n - `requests` works fine with the correct cookies\n - but `requests` cannot handle the login page that sets cookies.\n- Solution:\n - log in with `Selenium`\n - transfer cookies from `Selenium` to a `requests` session" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Using Selenium+requests" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-01T14:47:36.348460Z", | |
"end_time": "2020-06-01T14:47:36.358665Z" | |
}, | |
"trusted": true, | |
"cell_style": "split" | |
}, | |
"cell_type": "code", | |
"source": "def login_to_lincs(login=LOGIN, password=PASSWORD):\n s = requests.Session() \n soup = get_lincs_page(login_url, s)\n # Select form\n soup = soup.form\n # Retrieve input fields\n params = {i['name']: i.get('value', \"\") \n for i in soup('input')}\n # Retrieve select field\n params[soup.find('select')['name']] = \\\n soup.option['value']\n # Apply login & pwd:\n params.update({'wpName': LOGIN, \n 'wpPassword': PASSWORD})\n # log-in\n r = s.post(base_url+login_url, params)\n return s", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:57:33.499573Z", | |
"end_time": "2020-06-03T09:57:33.519555Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "def login_to_lincs_2(login=LOGIN, password=PASSWORD):\n options = Options()\n options.add_argument(\"headless\")\n with webdriver.Chrome(options=options) as driver:\n driver.get(base_url+login_url)\n e = driver.find_element_by_name('wpName')\n e.send_keys(LOGIN)\n e = driver.find_element_by_name('wpPassword')\n e.send_keys(PASSWORD)\n e.send_keys(Keys.RETURN)\n session = requests.Session()\n cookies = driver.get_cookies()\n for cookie in cookies:\n session.cookies.set(cookie['name'], \n cookie['value'])\n return session", | |
"execution_count": 53, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Using Selenium+requests" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-01T14:50:35.601279Z", | |
"end_time": "2020-06-01T14:50:51.063447Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "s = login_to_lincs_2()\nsoup = get_lincs_page(list_url, s)\n# Find all pages\npages = [ {'url': a['href'], 'name': a['title']} for a in soup('a')]\nwith zipfile.ZipFile(\"lincs_pages.zip\", \"w\") as z:\n for page in pages:\n print(f\"Retrieve {page['name']}\")\n with z.open(f\"{page['name']}.html\", \"w\") as f:\n html = html_template % (page['name'], get_lincs_page(page['url'], s).decode_contents())\n f.write(html.encode('utf8'))", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "### Bonuses modules" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Don't reinvent the wheel!" | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "- With `requests`, `bs4`, and `Selenium`, you should be able to build your own API for virtually any website.\n- Good practice: always check is what you seek isn't already available." | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Wikipedia" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:59:12.523546Z", | |
"end_time": "2020-06-03T09:59:13.209617Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "# See https://github.com/goldsmith/Wikipedia\n\nimport wikipedia\nr = wikipedia.page(\"Sloth\")", | |
"execution_count": 54, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:59:16.031039Z", | |
"end_time": "2020-06-03T09:59:16.372814Z" | |
}, | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "r.summary", | |
"execution_count": 55, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 55, | |
"data": { | |
"text/plain": "'Sloths are a group of arboreal neotropical xenathran mammals, constituting the suborder Folivora. Noted for slowness of movement, they spend most of their lives hanging upside down in the trees of the tropical rain forests of South America and Central America. They are considered to be most closely related to anteaters, together making up the xenarthran order Pilosa. There are six extant sloth species in two genera – Bradypus (three–toed sloths) and Choloepus (two–toed sloths). Despite this traditional naming, all sloths actually have three toes on each rear limb, although two-toed sloths have only two digits on each forelimb. The two groups of sloths are from different, distantly related families, and are thought to have evolved their morphology via parallel evolution from terrestrial ancestors. Besides the extant species, many species of ground sloth ranging up to the size of elephants like Megatherium inhabited both North and South America during the Pleistocene epoch. However, they became extinct during the Quaternary extinction event around 12,000 years ago, together with most large bodied animals in the New World. The extinction correlates in time with the arrival of humans, but climate change has also been suggested to have contributed. Members of an endemic radiation of Caribbean sloths formerly lived in the Greater Antilles. They included both ground and arboreal forms which became extinct after humans settled the archipelago in the mid-Holocene, around 6,000 years ago.\\nSloths are so named because of its very low metabolism and deliberate movements, sloth being related to the word slow. This supports their low-energy diet of leaves and avoids detection by predatory hawks and cats that hunt by sight. Sloths are almost helpless on the ground but are able to swim. The shaggy coat has grooved hair that is host to symbiotic green algae which camouflages the animal in the trees and provides it nutrients. The algae also nourishes sloth moths, some species of which exist solely on sloths.'" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Scholarly" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T09:59:36.409559Z", | |
"end_time": "2020-06-03T09:59:44.914817Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "# https://github.com/scholarly-python-package/scholarly\n\nimport scholarly\ns = next(scholarly.search_author(\"Fabien Mathieu\"))\ns.interests", | |
"execution_count": 56, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 56, | |
"data": { | |
"text/plain": "['Graphs', 'P2P networks', 'queuing systems', 'ranking algorithms']" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Paramiko (not Web, but definitely Internet)" | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "- Paramiko is package to use `ssh` inside Python\n- Allows to transfer files and execute code on a remote machine through SSH.\n- https://github.com/paramiko/paramiko" | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Remind: compress your files" | |
}, | |
{ | |
"metadata": { | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "from pathlib import Path\nimport subprocess\nimport json\n\ndef recompress(filepath):\n print(f\"Recompressing {filepath.name}.\")\n target = filepath.with_suffix(\".mkv\")\n cmd = (f\"ffmpeg -y -i \\\"{filepath}\\\" \"\n f\"-c:v libx265 -c:a copy \\\"{target}\\\"\")\n c = subprocess.run(cmd)\n if c.returncode != 0:\n print(f\"Error for {filepath.name}!!!\")\n if target.exists():\n target.unlink()\n else:\n old_s = filepath.stat().st_size\n new_s = Path(target).stat().st_size\n print(f\"Relative size of new file: \"\n f\"{100*new_s/old_s:.2f}%\")\n filepath.unlink()", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"cell_style": "split", | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "# This is where I stored videos for the talk\n# You can try this with your own\n# !!! original videos will be removed if ffmpeg succeeds !!!\nd = Path(\"../../../../../Datasets/Videos\")\nfor file in d.rglob('*.avi'):\n recompress(file)", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-01T14:13:21.243288Z", | |
"end_time": "2020-06-01T14:13:21.249401Z" | |
}, | |
"cell_style": "center", | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Remote video compression with paramiko" | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2020-06-03T10:03:54.933101Z", | |
"end_time": "2020-06-03T10:04:57.600318Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "import paramiko\nfrom nopeeking import SSH_HOST, KEY_PATH\nremote_source = \"source.avi\"\nremote_target = \"target.mkv\"\nd = Path(\"../../../../../Datasets/Videos\")\nwith paramiko.SSHClient() as ssh:\n ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # no known_hosts error\n ssh.connect(SSH_HOST, username=LOGIN, key_filename=KEY_PATH) # no passwd needed\n for source in d.rglob('*.avi'):\n target = source.with_suffix(\".mkv\")\n cmd = (f\"ffmpeg -y -i \\\"{remote_source}\\\" -c:v libx265\"\n f\" -c:a copy \\\"{remote_target}\\\" \")\n with ssh.open_sftp() as ftp:\n ftp.put(str(source), remote_source)\n stdin, stdout, stderr = ssh.exec_command(cmd)\n exit_status = stdout.channel.recv_exit_status()\n if exit_status == 0:\n ftp.get(remote_target, str(target))\n source.unlink()\n else:\n print(f\"Error for {source.name}!!!\")\n ssh.exec_command(f\"rm -f {remote_source}\")\n ssh.exec_command(f\"rm -f {remote_target}\")", | |
"execution_count": 57, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": "Error for not_a_video.avi!!!\n", | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"cell_type": "markdown", | |
"source": "# Thank you!" | |
} | |
], | |
"metadata": { | |
"celltoolbar": "Slideshow", | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3", | |
"language": "python" | |
}, | |
"language_info": { | |
"name": "python", | |
"version": "3.7.7", | |
"mimetype": "text/x-python", | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"pygments_lexer": "ipython3", | |
"nbconvert_exporter": "python", | |
"file_extension": ".py" | |
}, | |
"rise": { | |
"enable_chalkboard": true | |
}, | |
"toc": { | |
"nav_menu": {}, | |
"number_sections": true, | |
"sideBar": true, | |
"skip_h1_title": true, | |
"base_numbering": 1, | |
"title_cell": "Table of Contents", | |
"title_sidebar": "Contents", | |
"toc_cell": false, | |
"toc_position": {}, | |
"toc_section_display": true, | |
"toc_window_display": false | |
}, | |
"gist": { | |
"id": "", | |
"data": { | |
"description": "InputOutput-Part_II.ipynb", | |
"public": true | |
} | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment