-
-
Save VizForVets/f4bc0beca8560272d22fea7a7103e428 to your computer and use it in GitHub Desktop.
datajobs.ipynb
This file contains 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": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/VizForVets/f4bc0beca8560272d22fea7a7103e428/tableaujobs.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"## **Data Jobs Google Search Results** 🪖\n", | |
"\n", | |
"\n", | |
"* This Gist uses simple Python to get the first page of results for data jobs on Google\n", | |
"* This was taken from a tutorial online and updated to search for these jobs\n", | |
"* Feel free to break it apart, improve and run it yourself for free on Google Colab\n", | |
"\n", | |
"---\n", | |
"\n" | |
], | |
"metadata": { | |
"id": "IpfrgBmO4r9y" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"cellView": "form", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 1000, | |
"referenced_widgets": [ | |
"1fae2acf7196447bbf507f6ca25c6531", | |
"4a07e647e8704121bb8dc4d7a3a7580b", | |
"f7b6a2627d47407c813ba99c8c4b7487", | |
"b0c915c4eb394aae9d22abf311004f70", | |
"5bcf0eb98ee04fb5a3f18de5608851bd", | |
"4761b69320c84a1399a07aa595688f3d" | |
] | |
}, | |
"id": "qTyrXgYJEIHx", | |
"outputId": "04950352-6d9b-4497-8fb8-6e0efefdf121" | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stderr", | |
"text": [ | |
"/usr/local/lib/python3.10/dist-packages/_distutils_hack/__init__.py:33: UserWarning: Setuptools is replacing distutils.\n", | |
" warnings.warn(\"Setuptools is replacing distutils.\")\n", | |
"WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.\n", | |
"Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue.\n", | |
"To avoid this problem you can invoke Python with '-m pip' instead of running pip directly.\n" | |
] | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Collecting requests_html\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Collecting requests_html\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Downloading requests_html-0.10.0-py3-none-any.whl (13 kB)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Downloading requests_html-0.10.0-py3-none-any.whl (13 kB)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from requests_html) (2.31.0)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from requests_html) (2.31.0)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Collecting pyquery (from requests_html)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Collecting pyquery (from requests_html)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Downloading pyquery-2.0.0-py3-none-any.whl (22 kB)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Downloading pyquery-2.0.0-py3-none-any.whl (22 kB)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Collecting fake-useragent (from requests_html)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Collecting fake-useragent (from requests_html)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Downloading fake_useragent-1.3.0-py3-none-any.whl (15 kB)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Downloading fake_useragent-1.3.0-py3-none-any.whl (15 kB)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Collecting parse (from requests_html)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Collecting parse (from requests_html)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Downloading parse-1.19.1-py2.py3-none-any.whl (18 kB)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Downloading parse-1.19.1-py2.py3-none-any.whl (18 kB)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Collecting bs4 (from requests_html)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Collecting bs4 (from requests_html)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Downloading bs4-0.0.1.tar.gz (1.1 kB)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Downloading bs4-0.0.1.tar.gz (1.1 kB)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Preparing metadata (setup.py): started\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Preparing metadata (setup.py): started\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Preparing metadata (setup.py): finished with status 'done'\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Preparing metadata (setup.py): finished with status 'done'\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Collecting w3lib (from requests_html)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Collecting w3lib (from requests_html)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Downloading w3lib-2.1.2-py3-none-any.whl (21 kB)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Downloading w3lib-2.1.2-py3-none-any.whl (21 kB)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Collecting pyppeteer>=0.0.14 (from requests_html)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Collecting pyppeteer>=0.0.14 (from requests_html)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Downloading pyppeteer-1.0.2-py3-none-any.whl (83 kB)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Downloading pyppeteer-1.0.2-py3-none-any.whl (83 kB)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Output()" | |
], | |
"application/vnd.jupyter.widget-view+json": { | |
"version_major": 2, | |
"version_minor": 0, | |
"model_id": "1fae2acf7196447bbf507f6ca25c6531" | |
} | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Requirement already satisfied: appdirs<2.0.0,>=1.4.3 in /usr/local/lib/python3.10/dist-packages (from pyppeteer>=0.0.14->requests_html) (1.4.4)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Requirement already satisfied: appdirs<2.0.0,>=1.4.3 in /usr/local/lib/python3.10/dist-packages (from pyppeteer>=0.0.14->requests_html) (1.4.4)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Requirement already satisfied: certifi>=2021 in /usr/local/lib/python3.10/dist-packages (from pyppeteer>=0.0.14->requests_html) (2023.7.22)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Requirement already satisfied: certifi>=2021 in /usr/local/lib/python3.10/dist-packages (from pyppeteer>=0.0.14->requests_html) (2023.7.22)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Requirement already satisfied: importlib-metadata>=1.4 in /usr/local/lib/python3.10/dist-packages (from pyppeteer>=0.0.14->requests_html) (6.8.0)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Requirement already satisfied: importlib-metadata>=1.4 in /usr/local/lib/python3.10/dist-packages (from pyppeteer>=0.0.14->requests_html) (6.8.0)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Collecting pyee<9.0.0,>=8.1.0 (from pyppeteer>=0.0.14->requests_html)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Collecting pyee<9.0.0,>=8.1.0 (from pyppeteer>=0.0.14->requests_html)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Downloading pyee-8.2.2-py2.py3-none-any.whl (12 kB)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Downloading pyee-8.2.2-py2.py3-none-any.whl (12 kB)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Requirement already satisfied: tqdm<5.0.0,>=4.42.1 in /usr/local/lib/python3.10/dist-packages (from pyppeteer>=0.0.14->requests_html) (4.66.1)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Requirement already satisfied: tqdm<5.0.0,>=4.42.1 in /usr/local/lib/python3.10/dist-packages (from pyppeteer>=0.0.14->requests_html) (4.66.1)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Collecting urllib3<2.0.0,>=1.25.8 (from pyppeteer>=0.0.14->requests_html)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Collecting urllib3<2.0.0,>=1.25.8 (from pyppeteer>=0.0.14->requests_html)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Downloading urllib3-1.26.18-py2.py3-none-any.whl (143 kB)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Downloading urllib3-1.26.18-py2.py3-none-any.whl (143 kB)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Output()" | |
], | |
"application/vnd.jupyter.widget-view+json": { | |
"version_major": 2, | |
"version_minor": 0, | |
"model_id": "f7b6a2627d47407c813ba99c8c4b7487" | |
} | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Collecting websockets<11.0,>=10.0 (from pyppeteer>=0.0.14->requests_html)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Collecting websockets<11.0,>=10.0 (from pyppeteer>=0.0.14->requests_html)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Downloading websockets-10.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (106 kB)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Downloading websockets-10.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (106 kB)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Output()" | |
], | |
"application/vnd.jupyter.widget-view+json": { | |
"version_major": 2, | |
"version_minor": 0, | |
"model_id": "5bcf0eb98ee04fb5a3f18de5608851bd" | |
} | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.10/dist-packages (from bs4->requests_html) (4.11.2)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.10/dist-packages (from bs4->requests_html) (4.11.2)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Requirement already satisfied: lxml>=2.1 in /usr/local/lib/python3.10/dist-packages (from pyquery->requests_html) (4.9.3)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Requirement already satisfied: lxml>=2.1 in /usr/local/lib/python3.10/dist-packages (from pyquery->requests_html) (4.9.3)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Collecting cssselect>=1.2.0 (from pyquery->requests_html)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Collecting cssselect>=1.2.0 (from pyquery->requests_html)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Downloading cssselect-1.2.0-py2.py3-none-any.whl (18 kB)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Downloading cssselect-1.2.0-py2.py3-none-any.whl (18 kB)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->requests_html) (3.3.2)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->requests_html) (3.3.2)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->requests_html) (3.4)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->requests_html) (3.4)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.10/dist-packages (from importlib-metadata>=1.4->pyppeteer>=0.0.14->requests_html) (3.17.0)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.10/dist-packages (from importlib-metadata>=1.4->pyppeteer>=0.0.14->requests_html) (3.17.0)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.10/dist-packages (from beautifulsoup4->bs4->requests_html) (2.5)\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.10/dist-packages (from beautifulsoup4->bs4->requests_html) (2.5)\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Building wheels for collected packages: bs4\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Building wheels for collected packages: bs4\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Building wheel for bs4 (setup.py): started\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Building wheel for bs4 (setup.py): started\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Building wheel for bs4 (setup.py): finished with status 'done'\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Building wheel for bs4 (setup.py): finished with status 'done'\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Created wheel for bs4: filename=bs4-0.0.1-py3-none-any.whl size=1257 sha256=02e593e6fdbeeb42bc04fb4c8f0fe0973838c9d77374c0ddbd8d4dce0899e983\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Created wheel for bs4: filename=bs4-0.0.1-py3-none-any.whl size=1257 sha256=02e593e6fdbeeb42bc04fb4c8f0fe0973838c9d77374c0ddbd8d4dce0899e983\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Stored in directory: /root/.cache/pip/wheels/25/42/45/b773edc52acb16cd2db4cf1a0b47117e2f69bb4eb300ed0e70\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Stored in directory: /root/.cache/pip/wheels/25/42/45/b773edc52acb16cd2db4cf1a0b47117e2f69bb4eb300ed0e70\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Successfully built bs4\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Successfully built bs4\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Installing collected packages: pyee, parse, fake-useragent, websockets, w3lib, urllib3, cssselect, pyquery, pyppeteer, bs4, requests_html\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Installing collected packages: pyee, parse, fake-useragent, websockets, w3lib, urllib3, cssselect, pyquery, pyppeteer, bs4, requests_html\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Attempting uninstall: urllib3\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Attempting uninstall: urllib3\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Found existing installation: urllib3 2.0.7\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Found existing installation: urllib3 2.0.7\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Uninstalling urllib3-2.0.7:\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Uninstalling urllib3-2.0.7:\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" Successfully uninstalled urllib3-2.0.7\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> Successfully uninstalled urllib3-2.0.7\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"Successfully installed bs4-0.0.1 cssselect-1.2.0 fake-useragent-1.3.0 parse-1.19.1 pyee-8.2.2 pyppeteer-1.0.2 pyquery-2.0.0 requests_html-0.10.0 urllib3-1.26.18 w3lib-2.1.2 websockets-10.4\n" | |
], | |
"text/html": [ | |
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Successfully installed bs4-0.0.1 cssselect-1.2.0 fake-useragent-1.3.0 parse-1.19.1 pyee-8.2.2 pyppeteer-1.0.2 pyquery-2.0.0 requests_html-0.10.0 urllib3-1.26.18 w3lib-2.1.2 websockets-10.4\n", | |
"</pre>\n" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"\u001b[1mTableau Job: Senior Data Analyst - Fully Remote - 12 Month Contract\u001b[0;0m\n", | |
"https://boards.greenhouse.io/omnipresent/jobs/4245301101\n", | |
"8 hours ago — More than 8 years experience in a data analyst or related role. Hands-on experience in Tableau or other market-leading BI tools. Passionate about creating ...\n", | |
"\n", | |
"\u001b[1mTableau Job: Tableau Administrator and Data Visualization Specialist\u001b[0;0m\n", | |
"https://jobs.lever.co/brillio-2/823b1b26-7c80-4ad2-adb1-8d47755ab4cf/apply\n", | |
"1 day ago — Tableau Administrator and Data Visualization Specialist - R01531326. Jersey City, New Jersey, United States. Data and AI – Data and AI : Insights & Analytics ...\n", | |
"\n", | |
"\u001b[1mTableau Job: Senior Data Analyst, Product (Remote) - at Splice\u001b[0;0m\n", | |
"https://boards.greenhouse.io/splice/jobs/7003336002?gh_src=a212fa455us\n", | |
"1 day ago — Demonstrated experience with BI platforms (e.g. Looker, Tableau, PowerBI, Qlik); Strong knowledge of statistical concepts including trend analysis ...\n", | |
"\n", | |
"\u001b[1mTableau Job: Job Application for Data Analytics & Visualization Instructor\u001b[0;0m\n", | |
"https://boards.greenhouse.io/bootcampinstructionalengagement/jobs/7011966002\n", | |
"3 days ago — This is a fully remote, part-time position. Why teach with us? Instructors, with the ... Business Intelligence Software - Tableau. Advanced Topics - Big Data ...\n", | |
"\n", | |
"\u001b[1mTableau Job: Senior Data Scientist, Member Experience\u001b[0;0m\n", | |
"https://boards.greenhouse.io/springhealth66/jobs/4336742005?utm_source=RRE+job+board&utm_medium=getro.com&gh_src=RRE+job+board\n", | |
"18 hours ago — Experience working with data visualization and BI tools (e.g. Looker, Tableau) ... Access to Gympass, an on-demand virtual benefit that provides wellbeing ...\n", | |
"\n", | |
"\u001b[1mTableau Job: Job Application for Staff Data Scientist - at Afresh\u001b[0;0m\n", | |
"https://boards.greenhouse.io/afresh/jobs/5017634004\n", | |
"3 days ago — Excellent data visualization and dashboarding skills, including familiarity with at least one major dashboarding platform (e.g. Tableau, Looker, Mode).\n", | |
"\n", | |
"\u001b[1mTableau Job: Technology & Security Performance Analyst\u001b[0;0m\n", | |
"https://boards.greenhouse.io/discoverdynamojobs/jobs/4337374005?t=186d0b7b5us\n", | |
"8 hours ago — Experience with Tableau reporting, scorecard and dashboard development or similar tools. ... Remote (This role can be remote but candidate must live within about ...\n", | |
"\n", | |
"\u001b[1mTableau Job: Programmatic Media Manager - at Goodway Group\u001b[0;0m\n", | |
"https://boards.greenhouse.io/goodwaygroup/jobs/5017917004\n", | |
"23 hours ago — ... Tableau (SQL knowledge is a plus). Have a familiarity with direct response goals, including CPL, CAC, CLV, lead-to-sale ratio, etc. Media Solutions team ...\n", | |
"\n", | |
"\u001b[1mTableau Job: Job Application for Technical Content Strategist at Twilio\u001b[0;0m\n", | |
"https://boards.greenhouse.io/twilio/jobs/5497182\n", | |
"23 hours ago — Experience working specifically with Tableau, Airtable, Google Analytics, GSuite, Allocadia, Agiloft, Salesforce. Location. This role will be remote but is ...\n", | |
"\n", | |
"\u001b[1mTableau Job: Job Application for Senior Product Analyst at ecobee EB\u001b[0;0m\n", | |
"https://boards.greenhouse.io/ecobeeeb/jobs/5490743?utm_source=Work+In+Tech+job+board&utm_medium=getro.com&gh_src=Work+In+Tech+job+board\n", | |
"2 days ago — Experience with data visualization tools (Looker, Tableau, SiSense), user experience tools (Google Analytics, Amplitude, Segment, MixPanel) and with data ...\n", | |
"\n", | |
"\u001b[1mPython Job: Python Developer (Remote)\u001b[0;0m\n", | |
"https://boards.greenhouse.io/crystal/jobs/7013515002\n", | |
"2 days ago — Python Developer (Remote) · DevOps skills for working in development environment; · Practical experience in big data; Experience with NoSQL, key-value and other ...\n", | |
"\n", | |
"\u001b[1mPython Job: (419) Senior Fullstack Python Engineer - at Nearsure\u001b[0;0m\n", | |
"https://boards.greenhouse.io/nearsure/jobs/4135471007\n", | |
"1 day ago — We are looking for a Full-Stack Python Developer to produce scalable software solutions. You'll be part of a cross-functional team responsible for the complete ...\n", | |
"\n", | |
"\u001b[1mPython Job: (422) Senior Backend Python Engineer - at Nearsure\u001b[0;0m\n", | |
"https://boards.greenhouse.io/nearsure/jobs/4141085007\n", | |
"5 hours ago — You will mentor junior engineers, and assist others with guidance. As a Python Engineer, you work on decomposing requirements, and specs, and assist in planning ...\n", | |
"\n", | |
"\u001b[1mPython Job: Python at Datapeople - Lead Software Engineer\u001b[0;0m\n", | |
"https://boards.greenhouse.io/embed/job_app?for=datapeople&token=5798982003\n", | |
"1 day ago — 7+ years of experience building large-scale software applications with Python; Previous experience with MVC architecture; Experience with SQL and common ...\n", | |
"\n", | |
"\u001b[1mPython Job: Lead Python Engineer - Klarna\u001b[0;0m\n", | |
"https://jobs.lever.co/klarna/1d891120-4c29-4073-baae-5940f4cd65a6\n", | |
"1 day ago — An experienced engineer with strong software development experience in Python as well as some of the below technologies we use. ... remotely. This means that ...\n", | |
"\n", | |
"\u001b[1mPython Job: Cohere - AI Data Trainer - Data Science/Python (Contractor)\u001b[0;0m\n", | |
"https://jobs.lever.co/cohere/60fbbb5a-6164-439e-be4a-d1d35453020d/apply\n", | |
"2 days ago — AI Data Trainer - Data Science/Python (Contractor). London. Data Quality ... Fully remote; Hybrid; Fully on-site. Additional information. Cohere has my consent to ...\n", | |
"\n", | |
"\u001b[1mPython Job: Jobs at Remotasks\u001b[0;0m\n", | |
"https://boards.greenhouse.io/remotasks?t=da9bef7d5us\n", | |
"13 hours ago — Remote. Python Developer - AI Training (Remote Work) Remote - US, Canada, Australia, New Zealand. React Developer - AI Training (Remote Work) Remote - US ...\n", | |
"\n", | |
"\u001b[1mPython Job: Willow - Data Scientist - Python/SQL\u001b[0;0m\n", | |
"https://jobs.lever.co/willowinc/8d373334-bddc-4362-828b-5d6a9e149dd2\n", | |
"3 days ago — Knowledge of Python and SQL and Python Data Science stack. A proven history ... • Remote/hybrid working where applicable. • Competitive salary banding based ...\n", | |
"\n", | |
"\u001b[1mPython Job: Cohere - AI Data Trainer - Data Science/Python (Contractor)\u001b[0;0m\n", | |
"https://jobs.lever.co/cohere/60fbbb5a-6164-439e-be4a-d1d35453020d\n", | |
"3 days ago — We're looking for someone with superb python and data science skills to join ... Ability to follow complex instructions, navigate ambiguity and work independently ...\n", | |
"\n", | |
"\u001b[1mPython Job: Senior Data Analyst, Product (Remote) - at Splice\u001b[0;0m\n", | |
"https://boards.greenhouse.io/splice/jobs/7003336002?gh_src=a212fa455us\n", | |
"1 day ago — Basic proficiency in scripting languages such as Python or R to automate tasks and perform advanced analyses. Previous experience working within a product ...\n", | |
"\n", | |
"\u001b[1mSQL Job: SQL Server Database Administrator IV - Rackspace\u001b[0;0m\n", | |
"https://jobs.lever.co/rackspace/4f5e086e-eecb-42d0-8601-3300417ab3b4\n", | |
"2 days ago — SQL Server Database Administrator IV. Mexico - Remote /. Private Cloud - Product – Product /. Full - Time. / Remote. Apply for this job. The Senior SQL DBA is a ...\n", | |
"\n", | |
"\u001b[1mSQL Job: Senior Data Analyst, Product (Remote) - at Splice\u001b[0;0m\n", | |
"https://boards.greenhouse.io/splice/jobs/7003336002?gh_src=a212fa455us\n", | |
"1 day ago — Translate complex product questions into actionable analytics-driven metrics. Design, develop, and maintain dashboards and reports utilizing SQL, Looker, or ...\n", | |
"\n", | |
"\u001b[1mSQL Job: SQL Server Database Administrator IV - Rackspace\u001b[0;0m\n", | |
"https://jobs.lever.co/rackspace/4f5e086e-eecb-42d0-8601-3300417ab3b4/apply?utm_source=himalayas.app&utm_medium=himalayas.app&utm_campaign=himalayas.app&ref=himalayas.app&source=himalayas.app&lever-origin=applied&lever-source%5B%5D=himalayas.app&lever-requisition-name=himalayas.app&lever-posting-owner-name=himalayas.app&lever-source=himalayas.app&lever-referer=himalayas.app\n", | |
"22 hours ago — SQL Server Database Administrator IV. Mexico - Remote. Private Cloud - Product – Product /. Full - Time. / Remote. Submit your application. Resume/CV ✱. ATTACH ...\n", | |
"\n", | |
"\u001b[1mSQL Job: at INFUSEmedia - Data Scientist (Remote, Contract)\u001b[0;0m\n", | |
"https://boards.greenhouse.io/infusemedia/jobs/4336686005\n", | |
"3 days ago — A knack for keeping databases in tip-top shape, whether they're SQL or NoSQL. Experience with AI or machine learning, especially with categorizing and ...\n", | |
"\n", | |
"\u001b[1mSQL Job: Willow - Data Scientist - Python/SQL\u001b[0;0m\n", | |
"https://jobs.lever.co/willowinc/8d373334-bddc-4362-828b-5d6a9e149dd2\n", | |
"3 days ago — Data Scientist - Python/SQL. Remote within Australia / Adelaide / Brisbane / Melbourne / Perth / Sydney. Product and Engineering Australia – Data Science ...\n", | |
"\n", | |
"\u001b[1mSQL Job: Job Application for Data Engineer II - Azure at ShipBob, Inc.\u001b[0;0m\n", | |
"https://boards.greenhouse.io/shipbobinc/jobs/4329857005?utm_source=himalayas.app&utm_medium=himalayas.app&utm_campaign=himalayas.app&ref=himalayas.app&source=himalayas.app\n", | |
"2 days ago — Location: Remote - India. Role Description: As a Data Engineer II at ... Perform SQL programming and performance tuning and optimization in Azure environment.\n", | |
"\n", | |
"\u001b[1mSQL Job: Business Operations Analyst II – IN (R-18075) (Night Shift)\u001b[0;0m\n", | |
"https://jobs.lever.co/rackspace/5d0547f8-2a0e-4f16-bb5c-c881e9d21541\n", | |
"3 days ago — Business Operations Analyst II – IN (R-18075) (Night Shift). India - Remote ... - Experience using SQL to pull data from a database or data warehouse and ...\n", | |
"\n", | |
"\u001b[1mSQL Job: Job Application for Data Analyst at Parade\u001b[0;0m\n", | |
"https://boards.greenhouse.io/paradeai/jobs/4337370005\n", | |
"1 day ago — Support customer inquiries by writing complex SQL queries which allow for actionable insight to support better adoption of Parade's platform. ... 100% Remote ...\n", | |
"\n", | |
"\u001b[1mSQL Job: Data Associate - at The Movement Cooperative\u001b[0;0m\n", | |
"https://boards.greenhouse.io/tmc/jobs/7012182002\n", | |
"3 days ago — Ensure member staff have needed access and permissions to tools and resources; Use SQL ... remote virtual office, paid parental and adoption family leaves, and ...\n", | |
"\n", | |
"\u001b[1mSQL Job: Manager, Business Operations – IN (R-18074) (Night Shift)\u001b[0;0m\n", | |
"https://jobs.lever.co/rackspace/a8e634dd-3449-464a-963f-3e03d01cc69f\n", | |
"3 days ago — Manager, Business Operations – IN (R-18074) (Night Shift). India - Remote /. Public ... Proficient with SQL scripting, Power BI or other data visualization tools.\n", | |
"\n", | |
"\u001b[1mAlteryx Job: Financial Data Analyst @ Near\u001b[0;0m\n", | |
"https://jobs.ashbyhq.com/Near/94d732ce-3015-4119-a066-20992e80e249\n", | |
"3 days ago — Proficiency in Dashboard Visualization Tools (e.g., Tableau, Power BI, Looker) and Data Analytics Tools (e.g., Alteryx, Python, SQL, Excel, Google BigQuery, ...\n", | |
"\n", | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"from pandas._config import reset_option\n", | |
"#@title Google Job Search - Last 3 Days { vertical-output: true }\n", | |
"\n", | |
"import pip\n", | |
"\n", | |
"def import_or_install(package):\n", | |
" try:\n", | |
" __import__(package)\n", | |
" except ImportError:\n", | |
" pip.main(['install', package])\n", | |
"\n", | |
"#!pip install requests_html\n", | |
"\n", | |
"import_or_install('requests_html')\n", | |
"\n", | |
"import requests\n", | |
"import urllib\n", | |
"import pandas as pd\n", | |
"\n", | |
"from requests_html import HTML\n", | |
"from requests_html import HTMLSession\n", | |
"\n", | |
"from datetime import datetime, timedelta\n", | |
"\n", | |
"#calculate 3 days ago\n", | |
"N_DAYS_AGO = 3\n", | |
"\n", | |
"today = datetime.now()\n", | |
"n_days_ago = today - timedelta(days=N_DAYS_AGO)\n", | |
"n_days_ago = n_days_ago.strftime(\"%Y-%m-%d\")\n", | |
"\n", | |
"\n", | |
"\n", | |
"def get_source(url):\n", | |
"\n", | |
" try:\n", | |
" session = HTMLSession()\n", | |
" response = session.get(url)\n", | |
" return response\n", | |
"\n", | |
" except requests.exceptions.RequestException as e:\n", | |
" print(e)\n", | |
"\n", | |
"def get_results(query):\n", | |
"\n", | |
" query = urllib.parse.quote_plus(query)\n", | |
" response = get_source(\"https://www.google.com/search?q=\" + query)\n", | |
"\n", | |
" return response\n", | |
"\n", | |
"def parse_results(response):\n", | |
"\n", | |
" css_identifier_result = \".tF2Cxc\"\n", | |
" css_identifier_title = \"h3\"\n", | |
" css_identifier_link = \".yuRUbf a\"\n", | |
" css_identifier_text = \".VwiC3b\"\n", | |
"\n", | |
" results = response.html.find(css_identifier_result)\n", | |
"\n", | |
" output = []\n", | |
"\n", | |
" for result in results:\n", | |
"\n", | |
" item = {\n", | |
"\n", | |
" 'title': result.find(css_identifier_title, first=True).text,\n", | |
" 'link': result.find(css_identifier_link, first=True).attrs['href'],\n", | |
" 'text': result.find(css_identifier_text, first=True).text\n", | |
" }\n", | |
"\n", | |
" output.append(item)\n", | |
"\n", | |
" return output\n", | |
"\n", | |
"def google_search(app):\n", | |
" q_begin='site:greenhouse.io | site:lever.co | site:jobs.ashbyhq.com | site:app.dover.io \"'\n", | |
" q_end = '\" (virtual|remote|telecommute|telework) after:' + n_days_ago\n", | |
" query = q_begin + app + q_end\n", | |
" response = get_results(query)\n", | |
" return parse_results(response)\n", | |
"\n", | |
"\n", | |
"def create_output(res, app):\n", | |
" data=pd.DataFrame.from_dict(res)\n", | |
" output= ''\n", | |
" for index, row in data.iterrows():\n", | |
" output += '\\033[1m' + app + ' Job: ' + row['title'] + '\\033[0;0m' +'\\n' + row['link'] + '\\n' + row['text'] + '\\n' + '\\n'\n", | |
" return output\n", | |
"\n", | |
"#Get Results\n", | |
"tableau_results = google_search('tableau')\n", | |
"tableau_output = create_output(tableau_results, 'Tableau')\n", | |
"pbi_results = google_search('power+bi')\n", | |
"pbi_output = create_output(pbi_results, 'Power BI')\n", | |
"python_results = google_search('python')\n", | |
"python_output = create_output(python_results, 'Python')\n", | |
"sql_results = google_search('sql')\n", | |
"sql_output = create_output(sql_results, 'SQL')\n", | |
"atx_results = google_search('alteryx')\n", | |
"atx_output = create_output(atx_results, 'Alteryx')\n", | |
"\n", | |
"combined_output = tableau_output + pbi_output + python_output + sql_output + atx_output\n", | |
"\n", | |
"print(combined_output)" | |
] | |
} | |
], | |
"metadata": { | |
"colab": { | |
"provenance": [], | |
"name": "datajobs.ipynb", | |
"mount_file_id": "10gPeC1hhFaWroLujK14l6roGZMPlIFcL", | |
"authorship_tag": "ABX9TyMwQNNvbAscxb3fOkUwiKss", | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.11.1" | |
}, | |
"vscode": { | |
"interpreter": { | |
"hash": "0592f68fb2c82d079b557c2d4c2f2518d939489ad4a09b6414130bcd85cc09a4" | |
} | |
}, | |
"widgets": { | |
"application/vnd.jupyter.widget-state+json": { | |
"1fae2acf7196447bbf507f6ca25c6531": { | |
"model_module": "@jupyter-widgets/output", | |
"model_name": "OutputModel", | |
"model_module_version": "1.0.0", | |
"state": { | |
"_dom_classes": [], | |
"_model_module": "@jupyter-widgets/output", | |
"_model_module_version": "1.0.0", | |
"_model_name": "OutputModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/output", | |
"_view_module_version": "1.0.0", | |
"_view_name": "OutputView", | |
"layout": "IPY_MODEL_4a07e647e8704121bb8dc4d7a3a7580b", | |
"msg_id": "", | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": " \u001b[38;5;237m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/83.4 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\n", | |
"text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> <span style=\"color: #3a3a3a; text-decoration-color: #3a3a3a\">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</span> <span style=\"color: #008000; text-decoration-color: #008000\">0.0/83.4 kB</span> <span style=\"color: #800000; text-decoration-color: #800000\">?</span> eta <span style=\"color: #008080; text-decoration-color: #008080\">-:--:--</span>\n</pre>\n" | |
}, | |
"metadata": {} | |
} | |
] | |
} | |
}, | |
"4a07e647e8704121bb8dc4d7a3a7580b": { | |
"model_module": "@jupyter-widgets/base", | |
"model_name": "LayoutModel", | |
"model_module_version": "1.2.0", | |
"state": { | |
"_model_module": "@jupyter-widgets/base", | |
"_model_module_version": "1.2.0", | |
"_model_name": "LayoutModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/base", | |
"_view_module_version": "1.2.0", | |
"_view_name": "LayoutView", | |
"align_content": null, | |
"align_items": null, | |
"align_self": null, | |
"border": null, | |
"bottom": null, | |
"display": null, | |
"flex": null, | |
"flex_flow": null, | |
"grid_area": null, | |
"grid_auto_columns": null, | |
"grid_auto_flow": null, | |
"grid_auto_rows": null, | |
"grid_column": null, | |
"grid_gap": null, | |
"grid_row": null, | |
"grid_template_areas": null, | |
"grid_template_columns": null, | |
"grid_template_rows": null, | |
"height": null, | |
"justify_content": null, | |
"justify_items": null, | |
"left": null, | |
"margin": null, | |
"max_height": null, | |
"max_width": null, | |
"min_height": null, | |
"min_width": null, | |
"object_fit": null, | |
"object_position": null, | |
"order": null, | |
"overflow": null, | |
"overflow_x": null, | |
"overflow_y": null, | |
"padding": null, | |
"right": null, | |
"top": null, | |
"visibility": null, | |
"width": null | |
} | |
}, | |
"f7b6a2627d47407c813ba99c8c4b7487": { | |
"model_module": "@jupyter-widgets/output", | |
"model_name": "OutputModel", | |
"model_module_version": "1.0.0", | |
"state": { | |
"_dom_classes": [], | |
"_model_module": "@jupyter-widgets/output", | |
"_model_module_version": "1.0.0", | |
"_model_name": "OutputModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/output", | |
"_view_module_version": "1.0.0", | |
"_view_name": "OutputView", | |
"layout": "IPY_MODEL_b0c915c4eb394aae9d22abf311004f70", | |
"msg_id": "", | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": " \u001b[38;5;237m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/143.8 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\n", | |
"text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> <span style=\"color: #3a3a3a; text-decoration-color: #3a3a3a\">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</span> <span style=\"color: #008000; text-decoration-color: #008000\">0.0/143.8 kB</span> <span style=\"color: #800000; text-decoration-color: #800000\">?</span> eta <span style=\"color: #008080; text-decoration-color: #008080\">-:--:--</span>\n</pre>\n" | |
}, | |
"metadata": {} | |
} | |
] | |
} | |
}, | |
"b0c915c4eb394aae9d22abf311004f70": { | |
"model_module": "@jupyter-widgets/base", | |
"model_name": "LayoutModel", | |
"model_module_version": "1.2.0", | |
"state": { | |
"_model_module": "@jupyter-widgets/base", | |
"_model_module_version": "1.2.0", | |
"_model_name": "LayoutModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/base", | |
"_view_module_version": "1.2.0", | |
"_view_name": "LayoutView", | |
"align_content": null, | |
"align_items": null, | |
"align_self": null, | |
"border": null, | |
"bottom": null, | |
"display": null, | |
"flex": null, | |
"flex_flow": null, | |
"grid_area": null, | |
"grid_auto_columns": null, | |
"grid_auto_flow": null, | |
"grid_auto_rows": null, | |
"grid_column": null, | |
"grid_gap": null, | |
"grid_row": null, | |
"grid_template_areas": null, | |
"grid_template_columns": null, | |
"grid_template_rows": null, | |
"height": null, | |
"justify_content": null, | |
"justify_items": null, | |
"left": null, | |
"margin": null, | |
"max_height": null, | |
"max_width": null, | |
"min_height": null, | |
"min_width": null, | |
"object_fit": null, | |
"object_position": null, | |
"order": null, | |
"overflow": null, | |
"overflow_x": null, | |
"overflow_y": null, | |
"padding": null, | |
"right": null, | |
"top": null, | |
"visibility": null, | |
"width": null | |
} | |
}, | |
"5bcf0eb98ee04fb5a3f18de5608851bd": { | |
"model_module": "@jupyter-widgets/output", | |
"model_name": "OutputModel", | |
"model_module_version": "1.0.0", | |
"state": { | |
"_dom_classes": [], | |
"_model_module": "@jupyter-widgets/output", | |
"_model_module_version": "1.0.0", | |
"_model_name": "OutputModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/output", | |
"_view_module_version": "1.0.0", | |
"_view_name": "OutputView", | |
"layout": "IPY_MODEL_4761b69320c84a1399a07aa595688f3d", | |
"msg_id": "", | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": " \u001b[38;5;237m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/106.8 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\n", | |
"text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"> <span style=\"color: #3a3a3a; text-decoration-color: #3a3a3a\">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</span> <span style=\"color: #008000; text-decoration-color: #008000\">0.0/106.8 kB</span> <span style=\"color: #800000; text-decoration-color: #800000\">?</span> eta <span style=\"color: #008080; text-decoration-color: #008080\">-:--:--</span>\n</pre>\n" | |
}, | |
"metadata": {} | |
} | |
] | |
} | |
}, | |
"4761b69320c84a1399a07aa595688f3d": { | |
"model_module": "@jupyter-widgets/base", | |
"model_name": "LayoutModel", | |
"model_module_version": "1.2.0", | |
"state": { | |
"_model_module": "@jupyter-widgets/base", | |
"_model_module_version": "1.2.0", | |
"_model_name": "LayoutModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/base", | |
"_view_module_version": "1.2.0", | |
"_view_name": "LayoutView", | |
"align_content": null, | |
"align_items": null, | |
"align_self": null, | |
"border": null, | |
"bottom": null, | |
"display": null, | |
"flex": null, | |
"flex_flow": null, | |
"grid_area": null, | |
"grid_auto_columns": null, | |
"grid_auto_flow": null, | |
"grid_auto_rows": null, | |
"grid_column": null, | |
"grid_gap": null, | |
"grid_row": null, | |
"grid_template_areas": null, | |
"grid_template_columns": null, | |
"grid_template_rows": null, | |
"height": null, | |
"justify_content": null, | |
"justify_items": null, | |
"left": null, | |
"margin": null, | |
"max_height": null, | |
"max_width": null, | |
"min_height": null, | |
"min_width": null, | |
"object_fit": null, | |
"object_position": null, | |
"order": null, | |
"overflow": null, | |
"overflow_x": null, | |
"overflow_y": null, | |
"padding": null, | |
"right": null, | |
"top": null, | |
"visibility": null, | |
"width": null | |
} | |
} | |
} | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 0 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment