{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "kl_py_web_scrawler.ipynb", "provenance": [], "collapsed_sections": [], "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.7.6" } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "metadata": { "id": "N74ro5r6i6eg", "colab_type": "text" }, "source": [ "

\n", " \n", " \n", "

\n", "\n", "\n", "

\n", "\n", "\n", "\n", "# Python alapok WEB lapról adatgyüjtés\n", "\n", "\n", "\n", "\n", "---" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "collapsed": true, "id": "ZozVVN7mlTuG" }, "source": [ "---\n", "\n", "# WEB lapról adatgyüjtés\n", "\n", "## tartalom mentés\n", "\n", "## kép mentés\n", "\n", "## linkek kigyüjtése (külső és belső is)\n", "\n", "`` és `href` figyelése és kigyűjtése\n", "\n", "---" ] }, { "cell_type": "code", "metadata": { "id": "VZlHgWj_i6ei", "colab_type": "code", "colab": {}, "outputId": "600b5538-2aae-4e19-8490-19cc83d0bee4" }, "source": [ "from urllib.request import urlopen\n", "import re\n", "html = urlopen(\"https://klajosw.blogspot.com/2020/03/labirintus-generalas-as-megoldas-python.html\").read().decode('utf-8')\n", "\n", "print(html[1:200]) ## tartalom első 200 karaketrének kiolvasása\n", "print('--------------')\n", "\n", "res = re.findall(r\"(.+?)\", html)\n", "if res :\n", " print(\"\\nAz oldal title tartalma: \", res[0])\n", "\n", "res = re.findall(r\"

(.*?)

\", html, flags=re.DOTALL) # re.DOTALL if multi line\n", "if res :\n", " print(\"\\nAz oldal paragrafusai: \")\n", " for i in res :\n", " print(i)\n", "\n", "res = re.findall(r'href=\"(.*?)\"', html)\n", "if res :\n", " print(\"\\nAz oldal Linkjei: \")\n", " for i in res :\n", " print(i)" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "!DOCTYPE html>\n", "\n", "\n", "\n", " 10: ## 10 után leállás\n", " break" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "0 /site/klajosw/home\n", "1 https://www.google.com/url?q=https%3A%2F%2Fmierdekel.hu%2Fblog%2F&sa=D&sntz=1&usg=AFQjCNFFQCtw9yuxT5rEZLBzwOTLfdbWhw\n", "2 http://klajosw.blogspot.hu/\n", "3 https://www.google.com/url?q=https%3A%2F%2Fsites.google.com%2Fsite%2Fklajosw&sa=D&sntz=1&usg=AFQjCNFFPG6KucVpHGmdzNkgKddsBQyi-A\n", "4 https://www.google.com/url?q=https%3A%2F%2Fnbviewer.jupyter.org%2Fgithub%2Fklajosw%2Fpython&sa=D&sntz=1&usg=AFQjCNGsNXOV3KuW3xm1S1z_1kTGEQoYPQ\n", "5 https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2Fklajosw&sa=D&sntz=1&usg=AFQjCNFUOAPFijSP8VCDVH8DJ4fkzqZXig\n", "6 https://www.google.com/url?q=https%3A%2F%2Fklajosw.github.io%2Fpython%2F&sa=D&sntz=1&usg=AFQjCNFWzoBPkEumj-ByqaDWKVO2htzfbw\n", "7 https://www.google.com/url?q=https%3A%2F%2Fwww.linkedin.com%2Fin%2Fklajosw%2F&sa=D&sntz=1&usg=AFQjCNGzwLQIyvWQNVHAiFibbgdaOAIupQ\n", "8 https://www.google.com/url?q=https%3A%2F%2Fnotebooks.azure.com%2Fklajosw&sa=D&sntz=1&usg=AFQjCNHpvjrOp2FXFDovcmNEYRC7BGfX2w\n", "9 https://goo.gl/photos/o4p8R18ndmKzJmSu7\n", "10 https://www.google.com/url?q=https%3A%2F%2Fmierdekel.hu%2Fterkep%2Fbubi%2F&sa=D&sntz=1&usg=AFQjCNFattZZlJb7jSUVJIOthZsqTJf_BQ\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "ZBqgYDOPi6eo", "colab_type": "text" }, "source": [ "---\n", "### BeautifulSoup használata\n", "\n", "---" ] }, { "cell_type": "code", "metadata": { "id": "tei6lmSyi6ep", "colab_type": "code", "colab": {}, "outputId": "7bed0e4c-3a21-457f-df75-d911c1428110" }, "source": [ "from bs4 import BeautifulSoup\n", "from urllib.request import urlopen\n", "\n", "html = urlopen(\"https://klajosw.blogspot.com/2020/03/labirintus-generalas-as-megoldas-python.html\").read().decode('utf-8')\n", "print(html[1:200]) ## tartalom első 200 karaketrének kiolvasása\n", "print('----------------')\n", "soup = BeautifulSoup(html, features='lxml') ## értelmező\n", "print(soup.h3) ## Harmadik szintű fejlécek kiírása\n", "print('----------------')\n", "print('\\nA paragrafusok kiírása', soup.p)## paragrafusok kiírása\n", "print('----------------')\n", "\n", "all_href = soup.find_all('a')\n", "print('\\nLinkek kiírása 10 db')\n", "for l in all_href[1:9]:\n", " print(l)" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "!DOCTYPE html>\n", "\n", "\n", "\n", "
\n", "\n", "\n", "Kruskal féle\n", "Prim féle\n", "rekurzív Backtracker\n", "Aldous-Broder\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "GopTo-doi6er", "colab_type": "code", "colab": {}, "outputId": "65b6dedd-200f-4590-8550-620fcf3d1fa8" }, "source": [ "from bs4 import BeautifulSoup\n", "from urllib.request import urlopen\n", "from urllib.request import urlretrieve\n", "import re\n", "import os\n", "\n", "\n", "html = urlopen(\"https://klajosw.blogspot.com/2020/03/labirintus-generalas-as-megoldas-python.html\").read().decode('utf-8')\n", "print(html[1:200])\n", "\n", "soup = BeautifulSoup(html, features='lxml')\n", "month = soup.find_all('li')\n", "print('----------------')\n", "print('\\nA fejezetek\\n')\n", "for d in month[1:10]:\n", " print(d.get_text())\n", " \n", " \n", "print('----------------')\n", "print('\\nA képek keresése\\n') \n", "img_links = soup.find_all(\"img\", {\"src\": re.compile('.*?\\.jpg')})\n", "for link in img_links:\n", " print(link['src']) \n", " \n", "print('----------------')\n", "print('\\nA kép letőltése IMG könyvtárba\\n') \n", "os.makedirs('./img/', exist_ok=True) ## img könyvtár létrehozása\n", "IMAGE_URL = 'https://1.bp.blogspot.com/-MkX7e5_jAU8/XqMnuEMm_ZI/AAAAAAAAclc/LRyVXVmwBPYy1qmQ8XnERnYUCswRv5bxQCLcBGAsYHQ/s400/kl_ms_00.jpg'\n", "urlretrieve(IMAGE_URL, './img/image1.png') \n", "\n", "\n", "print('----------------')\n", "print('\\nBelső linkek\\n') \n", "inter_links = soup.find_all('a', {'href': re.compile('https://klajosw.blogspot.com/.*')})\n", "for link in inter_links[0:5]: ## csak 6 darab\n", " print(link['href'])\n", " \n", "print('----------------')\n", "print('\\nKülső linkek\\n') \n", "outer_links = soup.find_all('a', {'href': re.compile('http://weblog.jamisbuck.org/.*')})\n", "for link in outer_links[1:5]: ## csak 6 darab\n", " print(link['href'])" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "!DOCTYPE html>\n", "\n", "\n", "\n", " 10: ## 10 után leállás\n", " break" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "0 /wiki/Enciklop%C3%A9dia\n", "1 /wiki/Magyar_Wikip%C3%A9dia\n", "2 /wiki/2017-es_Formula%E2%80%931_vil%C3%A1gbajnoks%C3%A1g\n", "3 /wiki/Formula%E2%80%931\n", "4 /wiki/Nemzetk%C3%B6zi_Automobil_Sz%C3%B6vets%C3%A9g\n", "5 /wiki/Formula%E2%80%931_ausztr%C3%A1l_nagyd%C3%ADj\n", "6 /wiki/Melbourne\n", "7 /wiki/Melbourne_Grand_Prix_Circuit\n", "8 /wiki/Formula%E2%80%931_abu-dzabi_nagyd%C3%ADj\n", "9 /wiki/Yas_Marina_Circuit\n", "10 /wiki/Formula%E2%80%931-es_egy%C3%A9ni_vil%C3%A1gbajnokok_list%C3%A1ja\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "2nR4V2nylTuP" }, "source": [ "## Tartalom linkek véletlen szerű bejárása" ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "iQXEwh4rlTuQ", "outputId": "9d6a2ef4-f478-4ac1-a894-6749339b2597", "colab": {} }, "source": [ "from urllib.request import urlopen\n", "from bs4 import BeautifulSoup\n", "import datetime\n", "import random\n", "import re\n", "\n", "random.seed(datetime.datetime.now())\n", "szamol=0\n", "def getLinks(articleUrl):\n", " html = urlopen('http://hu.wikipedia.org{}'.format(articleUrl))\n", " bs = BeautifulSoup(html, 'html.parser')\n", " return bs.find('div', {'id':'bodyContent'}).find_all('a', href=re.compile('^(/wiki/)((?!:).)*$'))\n", "\n", "links = getLinks('/wiki/Kevin_Bacon')\n", "while len(links) > 0:\n", " newArticle = links[random.randint(0, len(links)-1)].attrs['href']\n", " print(szamol, newArticle)\n", " links = getLinks(newArticle)\n", " szamol += 1\n", " if szamol > 9: ## 10 után leállás\n", " break" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "0 /wiki/Kevin_Costner\n", "1 /wiki/1992\n", "2 /wiki/%C3%89szak-atlanti_Szerz%C5%91d%C3%A9s_Szervezete\n", "3 /wiki/Belgium\n", "4 /wiki/Hollandia\n", "5 /wiki/N%C3%A9met-r%C3%B3mai_Birodalom\n", "6 /wiki/I._Ott%C3%B3_n%C3%A9met-r%C3%B3mai_cs%C3%A1sz%C3%A1r\n", "7 /wiki/949\n", "8 /wiki/950-es_%C3%A9vek\n", "9 /wiki/990-es_%C3%A9vek\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "AsawmO6klTuR" }, "source": [ "## Rekurzív módon bejárja az egész webhelyet" ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "6BpeJHYZlTuS", "outputId": "83febf92-5e85-4f57-95b6-56c79e86b5e1", "colab": {} }, "source": [ "from urllib.request import urlopen\n", "from bs4 import BeautifulSoup\n", "import re\n", "\n", "pages = set()\n", "szamol=0\n", "def getLinks(pageUrl):\n", " global pages, szamol\n", " html = urlopen('http://hu.wikipedia.org{}'.format(pageUrl))\n", " bs = BeautifulSoup(html, 'html.parser')\n", " for link in bs.find_all('a', href=re.compile('^(/wiki/)')):\n", " if 'href' in link.attrs:\n", " if link.attrs['href'] not in pages:\n", " #Wúj oldalak számlálása\n", " newPage = link.attrs['href']\n", " print(szamol, newPage)\n", " pages.add(newPage)\n", " szamol += 1\n", " if szamol > 9: ## 10 után leállás\n", " break \n", " getLinks(newPage)\n", "\n", " \n", "getLinks('')" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "0 /wiki/Wikip%C3%A9dia:Jel%C3%B6lt_lapv%C3%A1ltozatok\n", "1 /wiki/Wikip%C3%A9dia:WP\n", "2 /wiki/WP:WP\n", "3 /wiki/WP:R%C3%96V\n", "4 /wiki/Wikip%C3%A9dia:N%C3%A9vt%C3%A9r#Wikipédia-névtér\n", "5 /wiki/F%C3%A1jl:Walnut.png\n", "6 /wiki/F%C3%A1jl:Commons-logo.svg\n", "7 /wiki/Szerkeszt%C5%91:Be..anyone\n", "8 /wiki/Speci%C3%A1lis:Mi_hivatkozik_erre/F%C3%A1jl:Walnut.png\n", "9 /wiki/WP:N%C3%89VT%C3%89R\n", "10 /wiki/WP:1\n", "11 /wiki/Wikip%C3%A9dia:Az_els%C5%91_l%C3%A9p%C3%A9sek\n", "12 /wiki/WP:100K\n", "13 /wiki/WP:JEL\n", "14 /wiki/Wikip%C3%A9dia:%C3%9Cdv%C3%B6zl%C3%BCnk,_l%C3%A1togat%C3%B3!\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "M7rsnPrplTuU" }, "source": [ "## Adatgyűjtés az egész webhelyen" ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "_xOizYlBlTuU", "outputId": "b77ab78b-f7a5-4f04-f18a-7c144fe7c393", "colab": {} }, "source": [ "from urllib.request import urlopen\n", "from bs4 import BeautifulSoup\n", "import re\n", "\n", "pages = set()\n", "szamol=0\n", "def getLinks(pageUrl):\n", " global pages, szamol\n", " html = urlopen('http://hu.wikipedia.org{}'.format(pageUrl))\n", " bs = BeautifulSoup(html, 'html.parser')\n", " try:\n", " print(bs.h1.get_text())\n", " print(bs.find(id ='mw-content-text').find_all('p')[0])\n", " print(bs.find(id='ca-edit').find('span').find('a').attrs['href'])\n", " except AttributeError:\n", " print('Valami hiba van!!! Folytassuk azért.')\n", " \n", " for link in bs.find_all('a', href=re.compile('^(/wiki/)')):\n", " if 'href' in link.attrs:\n", " if link.attrs['href'] not in pages:\n", " ## új lap link felismerése\n", " newPage = link.attrs['href']\n", " print('-'*20)\n", " print(newPage)\n", " pages.add(newPage)\n", " szamol += 1\n", " if szamol > 7: ## 10 után leállás\n", " break \n", " getLinks(newPage)\n", " \n", "getLinks('') " ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Kezdőlap\n", "

Ezt az enciklopédiát az olvasói szerkesztik.
A magyar változatnak 471 224 szócikke van, ebből 1021 kiemelt.\n", "

\n", "Valami hiba van!!! Folytassuk azért.\n", "--------------------\n", "/wiki/Wikip%C3%A9dia:Jel%C3%B6lt_lapv%C3%A1ltozatok\n", "Wikipédia:Jelölt lapváltozatok\n", "

A MediaWiki FlaggedRevs (jelölt lapváltozatok) kiterjesztése segítségével a Wikipédia előtt új dimenzió nyílik: ezután meg lehet jelölni egy-egy szócikknek a közösség által ellenőrzött változatait, és az olvasónak jelezni, hogy vannak ilyen változatok, esetleg eleve azokat mutatni meg neki. Az egyes Wikipédiák (és Wikikönyvek, Wikiszótárak stb.) közösségei a közeljövőben eldönthetik, akarják-e használni ezt a kiterjesztést, és ha igen, pontosan milyen beállításokkal. A magyar Wikipédián a szavazást követően a fejlesztők 2008. november 17-én aktiválták az itt látható beállításokkal.\n", "

\n", "Valami hiba van!!! Folytassuk azért.\n", "--------------------\n", "/wiki/Wikip%C3%A9dia:WP\n", "Wikipédia:WP\n", "

Ez a lap tartalmazza a Wikipédia-névtérben szereplő lapok rövidített neveit, melyekkel egyszerűbben lehet rájuk hivatkozni.\n", "

\n", "Valami hiba van!!! Folytassuk azért.\n", "--------------------\n", "/wiki/WP:WP\n", "Wikipédia:WP\n", "

Ez a lap tartalmazza a Wikipédia-névtérben szereplő lapok rövidített neveit, melyekkel egyszerűbben lehet rájuk hivatkozni.\n", "

\n", "Valami hiba van!!! Folytassuk azért.\n", "--------------------\n", "/wiki/WP:R%C3%96V\n", "Wikipédia:WP\n", "

Ez a lap tartalmazza a Wikipédia-névtérben szereplő lapok rövidített neveit, melyekkel egyszerűbben lehet rájuk hivatkozni.\n", "

\n", "Valami hiba van!!! Folytassuk azért.\n", "--------------------\n", "/wiki/Wikip%C3%A9dia:N%C3%A9vt%C3%A9r#Wikipédia-névtér\n", "Wikipédia:Névtér\n", "

A Wikipédia minden egyes lapját, feltöltött kép- és hangállományát és minden regisztrált szerkesztőjét (programozási szakkifejezéssel: minden objektumát) a nevével azonosíthatjuk. Ha azonban egy nevet csak egyszer használhatnánk, az konfliktusokhoz vezetne. Tegyük fel például, hogy valaki egy keresztnévvel szeretne regisztrálni. Ezt nem tehetné meg, mert a keresztnevekről vannak szócikkeink. Mi történne azonban, ha valaki azelőtt regisztrálna Ferenc vagy Júlia néven, hogy a megfelelő szócikk elkészült? Akkor vagy nem lehetne már megírni a szócikket, vagy előbb át kellene nevezni a szerkesztőt, aminek ő nem biztos, hogy örülne. Sőt: semmilyen néven nem lehetne regisztrálni, amiről egyáltalán elképzelhető, hogy valaha is szócikk lesz. Például Szerkesztő:GumiBot sem lehetne, mert valaki talán majd a gumibotról akar cikket írni. Nem is beszélve arról a káoszról, amit az összes különböző nyelvű Wikipédiában használható szerkesztőnevek okoznának. Az olvasók meg lépten-nyomon furcsa, nem nekik szánt tartalmakba botlanának a kereső használatával.\n", "

\n", "Valami hiba van!!! Folytassuk azért.\n", "--------------------\n", "/wiki/F%C3%A1jl:Walnut.png\n", "Fájl:Walnut.png\n", "

Walnut.png(192 × 192 képpont, fájlméret: 46 KB, MIME-típus: image/png)\n", "

\n", "Valami hiba van!!! Folytassuk azért.\n", "--------------------\n", "/wiki/F%C3%A1jl:Commons-logo.svg\n", "Fájl:Commons-logo.svg\n", "

Eredeti fájl(SVG fájl, névlegesen 1 024 × 1 376 képpont, fájlméret: 932 bytes)\n", "

\n", "Valami hiba van!!! Folytassuk azért.\n", "--------------------\n", "/wiki/Szerkeszt%C5%91:Be..anyone\n", "--------------------\n", "/wiki/Speci%C3%A1lis:Mi_hivatkozik_erre/F%C3%A1jl:Walnut.png\n", "--------------------\n", "/wiki/WP:N%C3%89VT%C3%89R\n", "--------------------\n", "/wiki/WP:1\n", "--------------------\n", "/wiki/Wikip%C3%A9dia:Az_els%C5%91_l%C3%A9p%C3%A9sek\n", "--------------------\n", "/wiki/WP:100K\n", "--------------------\n", "/wiki/WP:JEL\n", "--------------------\n", "/wiki/Wikip%C3%A9dia:%C3%9Cdv%C3%B6zl%C3%BCnk,_l%C3%A1togat%C3%B3!\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "yOYpKe7UlTuW" }, "source": [ "## WEB lap feltérképezés az interneten keresztül véletren szerü sorrendben" ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "H_EBGjAflTuX", "outputId": "fe5a080c-b95e-4c5c-f319-997c323dfee4", "colab": {} }, "source": [ "from urllib.request import urlopen\n", "from urllib.parse import urlparse\n", "from bs4 import BeautifulSoup\n", "import re\n", "import datetime\n", "import random\n", "\n", "pages = set()\n", "szamol=0\n", "random.seed(datetime.datetime.now())\n", "\n", "## Beolvassa az oldalon található összes belső link listáját\n", "def getInternalLinks(bs, includeUrl):\n", " includeUrl = '{}://{}'.format(urlparse(includeUrl).scheme, urlparse(includeUrl).netloc)\n", " internalLinks = []\n", " #Finds all links that begin with a \"/\"\n", " for link in bs.find_all('a', href=re.compile('^(/|.*'+includeUrl+')')):\n", " if link.attrs['href'] is not None:\n", " if link.attrs['href'] not in internalLinks: ## új belső link\n", " print('belső link : {}'.format(internalLinks))\n", " if(link.attrs['href'].startswith('/')):\n", " internalLinks.append(includeUrl+link.attrs['href'])\n", " else:\n", " internalLinks.append(link.attrs['href'])\n", " print('belső link : {}'.format(internalLinks))\n", " return internalLinks\n", " \n", "## Beolvassa az oldalon található összes külső link listáját\n", "def getExternalLinks(bs, excludeUrl):\n", " externalLinks = []\n", " ##összes link keresése\n", " ##nem tartalmaz külső URL-t\n", " for link in bs.find_all('a', href=re.compile('^(http|www)((?!'+excludeUrl+').)*$')):\n", " if link.attrs['href'] is not None:\n", " if link.attrs['href'] not in externalLinks: ## új külső link\n", " externalLinks.append(link.attrs['href']) \n", " return externalLinks\n", "\n", "def getRandomExternalLink(startingPage):\n", " html = urlopen(startingPage)\n", " bs = BeautifulSoup(html, 'html.parser')\n", " externalLinks = getExternalLinks(bs, urlparse(startingPage).netloc)\n", " if len(externalLinks) == 0:\n", " print('Nincs külső link, nézze meg a webhelyen is')\n", " domain = '{}://{}'.format(urlparse(startingPage).scheme, urlparse(startingPage).netloc)\n", " internalLinks = getInternalLinks(bs, domain)\n", " return getRandomExternalLink(internalLinks[random.randint(0,\n", " len(internalLinks)-1)])\n", " else:\n", " return externalLinks[random.randint(0, len(externalLinks)-1)]\n", " \n", "def followExternalOnly(startingSite):\n", " global szamol\n", " externalLink = getRandomExternalLink(startingSite)\n", " print('Véletlen külső link : {}'.format(externalLink))\n", " print('Véletlen belső link : {}'.format(externalLink))\n", " szamol += 1\n", " if szamol < 2: ## 10 után leállás\n", " followExternalOnly(externalLink)\n", " \n", " \n", "followExternalOnly('https://sites.google.com/site/klajosw')\n", "#followExternalOnly('https://mierdekel.hu/blog/2015/12/')\n", "#followExternalOnly('https://klajosw.blogspot.com/')" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Véletlen külső link : https://www.google.com/url?q=https%3A%2F%2Fmierdekel.hu%2Fblog%2F&sa=D&sntz=1&usg=AFQjCNFFQCtw9yuxT5rEZLBzwOTLfdbWhw\n", "Véletlen belső link : https://www.google.com/url?q=https%3A%2F%2Fmierdekel.hu%2Fblog%2F&sa=D&sntz=1&usg=AFQjCNFFQCtw9yuxT5rEZLBzwOTLfdbWhw\n", "Nincs külső link, nézze meg a webhelyen is\n" ], "name": "stdout" }, { "output_type": "error", "ename": "ValueError", "evalue": "empty range for randrange() (0,0, 0)", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 60\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 61\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 62\u001b[1;33m \u001b[0mfollowExternalOnly\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'https://sites.google.com/site/klajosw'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 63\u001b[0m \u001b[1;31m#followExternalOnly('https://mierdekel.hu/blog/2015/12/')\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 64\u001b[0m \u001b[1;31m#followExternalOnly('https://klajosw.blogspot.com/')\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m\u001b[0m in \u001b[0;36mfollowExternalOnly\u001b[1;34m(startingSite)\u001b[0m\n\u001b[0;32m 57\u001b[0m \u001b[0mszamol\u001b[0m \u001b[1;33m+=\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 58\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mszamol\u001b[0m \u001b[1;33m<\u001b[0m \u001b[1;36m2\u001b[0m\u001b[1;33m:\u001b[0m \u001b[1;31m## 10 után leállás\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 59\u001b[1;33m \u001b[0mfollowExternalOnly\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mexternalLink\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 60\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 61\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m\u001b[0m in \u001b[0;36mfollowExternalOnly\u001b[1;34m(startingSite)\u001b[0m\n\u001b[0;32m 52\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mfollowExternalOnly\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstartingSite\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 53\u001b[0m \u001b[1;32mglobal\u001b[0m \u001b[0mszamol\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 54\u001b[1;33m \u001b[0mexternalLink\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgetRandomExternalLink\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstartingSite\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 55\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'Véletlen külső link : {}'\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mexternalLink\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 56\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'Véletlen belső link : {}'\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mexternalLink\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m\u001b[0m in \u001b[0;36mgetRandomExternalLink\u001b[1;34m(startingPage)\u001b[0m\n\u001b[0;32m 46\u001b[0m \u001b[0minternalLinks\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgetInternalLinks\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdomain\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 47\u001b[0m return getRandomExternalLink(internalLinks[random.randint(0,\n\u001b[1;32m---> 48\u001b[1;33m len(internalLinks)-1)])\n\u001b[0m\u001b[0;32m 49\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 50\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mexternalLinks\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mrandom\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrandint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mexternalLinks\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\Anaconda3\\lib\\random.py\u001b[0m in \u001b[0;36mrandint\u001b[1;34m(self, a, b)\u001b[0m\n\u001b[0;32m 220\u001b[0m \"\"\"\n\u001b[0;32m 221\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 222\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrandrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mb\u001b[0m\u001b[1;33m+\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 223\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 224\u001b[0m def _randbelow(self, n, int=int, maxsize=1< 200\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"empty range for randrange() (%d,%d, %d)\"\u001b[0m \u001b[1;33m%\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mistart\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mistop\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mwidth\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 201\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 202\u001b[0m \u001b[1;31m# Non-unit step argument supplied.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mValueError\u001b[0m: empty range for randrange() (0,0, 0)" ] } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "SkDtpwdelTuZ" }, "source": [ "## Összes külső link összegyüjtése egy web helyről" ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "cXgHWK4OlTuZ", "outputId": "9cc382af-9a0e-4152-f206-0180e209c1d6", "colab": {} }, "source": [ "from urllib.request import urlopen\n", "from urllib.parse import urlparse\n", "from bs4 import BeautifulSoup\n", "import re\n", "import datetime\n", "import random\n", "\n", "# Collects a list of all external URLs found on the site\n", "allExtLinks = set()\n", "allIntLinks = set()\n", "szamol=0\n", "\n", "pages = set()\n", "random.seed(datetime.datetime.now())\n", "\n", "#Retrieves a list of all Internal links found on a page\n", "def getInternalLinks(bs, includeUrl):\n", " global szamol\n", " includeUrl = '{}://{}'.format(urlparse(includeUrl).scheme, urlparse(includeUrl).netloc)\n", " internalLinks = []\n", " #Finds all links that begin with a \"/\"\n", " for link in bs.find_all('a', href=re.compile('^(/|.*'+includeUrl+')')):\n", " if link.attrs['href'] is not None:\n", " if link.attrs['href'] not in internalLinks:\n", " if(link.attrs['href'].startswith('/')):\n", " internalLinks.append(includeUrl+link.attrs['href'])\n", " else:\n", " internalLinks.append(link.attrs['href'])\n", "# print('Belső ', szamol, link.attrs['href'])\n", " szamol += 1\n", " if szamol > 200: ## 10 után leállás\n", " break \n", " \n", " return internalLinks\n", " \n", "#Retrieves a list of all external links found on a page\n", "def getExternalLinks(bs, excludeUrl):\n", " global szamol\n", " externalLinks = []\n", " #Finds all links that start with \"http\" that do\n", " #not contain the current URL\n", " for link in bs.find_all('a', href=re.compile('^(http|www)((?!'+excludeUrl+').)*$')):\n", " if link.attrs['href'] is not None:\n", " if link.attrs['href'] not in externalLinks:\n", " externalLinks.append(link.attrs['href'])\n", "# print('Külső ', szamol, link.attrs['href'])\n", " szamol += 1\n", " if szamol > 200: ## 10 után leállás\n", " break\n", " return externalLinks\n", "\n", "\n", "def getAllExternalLinks(siteUrl):\n", " html = urlopen(siteUrl)\n", " domain = '{}://{}'.format(urlparse(siteUrl).scheme,\n", " urlparse(siteUrl).netloc)\n", " bs = BeautifulSoup(html, 'html.parser')\n", " internalLinks = getInternalLinks(bs, domain)\n", " externalLinks = getExternalLinks(bs, domain)\n", "\n", " for link in externalLinks:\n", " if link not in allExtLinks:\n", " allExtLinks.add(link)\n", " print('Külső link -> ', link)\n", " for link in internalLinks:\n", " if link not in allIntLinks:\n", " allIntLinks.add(link)\n", " print('Belső link -> ', link)\n", " getAllExternalLinks(link)\n", "\n", "\n", "allIntLinks.add('https://mierdekel.hu/blog')\n", "getAllExternalLinks('''https://mierdekel.hu/blog''')" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Külső link -> https://mierdekel.hu/blog/\n", "Külső link -> https://mierdekel.hu/blog/android/\n", "Külső link -> https://mierdekel.hu/blog/blogok/\n", "Külső link -> https://mierdekel.hu/blog/gdpr/\n", "Külső link -> https://klajosw.blogspot.com\n", "Külső link -> https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2Fklajosw&sa=D&sntz=1&usg=AFQjCNFUOAPFijSP8VCDVH8DJ4fkzqZXig\n", "Külső link -> https://www.google.com/url?q=https%3A%2F%2Fwww.linkedin.com%2Fin%2Fklajosw%2F&sa=D&sntz=1&usg=AFQjCNGzwLQIyvWQNVHAiFibbgdaOAIupQ\n", "Külső link -> https://sites.google.com/site/klajosw\n", "Külső link -> https://mierdekel.hu/blog/2018/08/\n", "Külső link -> https://mierdekel.hu/oktatas\n", "Külső link -> https://mierdekel.hu/igeny\n", "Külső link -> https://mierdekel.hu/alap\n", "Külső link -> http://mierdekel.hu/kozlekedes\n", "Külső link -> https://mierdekel.hu/abra/d3/\n", "Külső link -> https://mierdekel.hu/abra/d3/index1.html\n", "Külső link -> https://mierdekel.hu/abra/d3/index3.html\n", "Külső link -> https://mierdekel.hu/abra/d3/index4.html\n", "Külső link -> https://mierdekel.hu/abra/vis/\n", "Külső link -> https://mierdekel.hu/abra/vis/animacio.html\n", "Külső link -> https://mierdekel.hu/abra/vis/beallitas.html\n", "Külső link -> https://mierdekel.hu/abra/vis/szerkesztes.html\n", "Külső link -> https://mierdekel.hu/abra/vis/szerkesztes2.html\n", "Külső link -> https://mierdekel.hu/abra/vis/szerkesztes3.html\n", "Külső link -> https://mierdekel.hu/abra/vis/nodok.html\n", "Külső link -> https://mierdekel.hu/abra/vis/ment_betolt.html\n", "Külső link -> https://mierdekel.hu/abra/vis/ikonok.html\n", "Külső link -> https://mierdekel.hu/abra/vis/ido.html\n", "Külső link -> https://mierdekel.hu/abra/vis/ido2.html\n", "Külső link -> https://mierdekel.hu/abra/vis/hierachiak.html\n", "Külső link -> https://mierdekel.hu/blog/2018/08/12/android-alapok/\n", "Külső link -> https://mierdekel.hu/blog/2018/07/03/adatmodellezes-alapjai-powerdesignerrel/\n", "Külső link -> https://mierdekel.hu/blog/2018/07/03/adat-modellezes-sqldeveloperrel/\n", "Külső link -> https://mierdekel.hu/blog/2015/12/07/oracle-sql-halado-mintak/\n", "Külső link -> https://mierdekel.hu/blog/2015/12/01/szoftver-fejlesztes-mint-folyamat/\n", "Külső link -> https://mierdekel.hu/blog/2018/07/\n", "Külső link -> https://mierdekel.hu/blog/2015/12/\n", "Külső link -> https://mierdekel.hu/blog/2015/11/\n", "Külső link -> https://mierdekel.hu/blog/2015/10/\n", "Külső link -> https://mierdekel.hu/blog/2015/09/\n", "Külső link -> https://mierdekel.hu/blog/2015/08/\n", "Külső link -> https://mierdekel.hu/blog/2015/07/\n", "Külső link -> https://mierdekel.hu/blog/2015/06/\n", "Külső link -> https://mierdekel.hu/blog/2015/05/\n", "Külső link -> https://mierdekel.hu/blog/2015/04/\n", "Külső link -> https://mierdekel.hu/blog/2015/03/\n", "Külső link -> https://mierdekel.hu/blog/2015/02/\n", "Külső link -> https://mierdekel.hu/blog/2015/01/\n", "Külső link -> https://mierdekel.hu/blog/2014/12/\n", "Külső link -> https://mierdekel.hu/blog/2014/11/\n", "Külső link -> https://mierdekel.hu/blog/2014/10/\n", "Külső link -> https://mierdekel.hu/blog/2014/09/\n", "Külső link -> https://mierdekel.hu/blog/2014/08/\n", "Külső link -> https://mierdekel.hu/blog/2014/07/\n", "Külső link -> https://mierdekel.hu/blog/2014/05/\n", "Külső link -> https://mierdekel.hu/blog/2014/03/\n", "Külső link -> https://mierdekel.hu/blog/2014/02/\n", "Külső link -> https://mierdekel.hu/blog/2014/01/\n", "Külső link -> https://mierdekel.hu/blog/category/egyeb/\n", "Külső link -> https://mierdekel.hu/blog/category/felmero/\n", "Külső link -> https://mierdekel.hu/blog/category/hoby/\n", "Külső link -> https://mierdekel.hu/blog/category/it/\n", "Külső link -> https://mierdekel.hu/blog/category/mas/\n", "Külső link -> https://mierdekel.hu/blog/category/oktatas-2/\n", "Külső link -> https://mierdekel.hu/blog/category/stat/\n", "Külső link -> https://mierdekel.hu/blog/category/szemelyiseg/\n", "Külső link -> https://mierdekel.hu/blog/wp-login.php\n", "Külső link -> https://mierdekel.hu/blog/feed/\n", "Külső link -> https://mierdekel.hu/blog/comments/feed/\n", "Külső link -> https://hu.wordpress.org/\n", "Külső link -> https://mierdekel.hu/blog/gdpr\n", "Belső link -> https://mierdekel.hu/blog/\n", "Belső link -> https://mierdekel.hu/blog/android/\n", "Belső link -> https://mierdekel.hu/blog/blogok/\n", "Belső link -> https://mierdekel.hu/blog/gdpr/\n", "Belső link -> https://mierdekel.hu/blog/2018/08/\n", "Belső link -> https://mierdekel.hu/oktatas\n", "Külső link -> https://mierdekel.hu/oktatas/\n", "Belső link -> https://mierdekel.hu/oktatas/\n", "Belső link -> https://mierdekel.hu/igeny\n", "Belső link -> https://mierdekel.hu/alap\n", "Belső link -> https://mierdekel.hu/alap/\n", "Belső link -> https://mierdekel.hu/abra/d3/\n", "Belső link -> https://mierdekel.hu/abra/d3/index1.html\n", "Belső link -> https://mierdekel.hu/abra/d3/index3.html\n", "Belső link -> https://mierdekel.hu/abra/d3/index4.html\n", "Belső link -> https://mierdekel.hu/abra/vis/\n", "Belső link -> https://mierdekel.hu/abra/vis/animacio.html\n", "Belső link -> https://mierdekel.hu/abra/vis/beallitas.html\n", "Belső link -> https://mierdekel.hu/abra/vis/szerkesztes.html\n", "Belső link -> https://mierdekel.hu/abra/vis/szerkesztes2.html\n", "Belső link -> https://mierdekel.hu/abra/vis/szerkesztes3.html\n", "Belső link -> https://mierdekel.hu/abra/vis/nodok.html\n", "Belső link -> https://mierdekel.hu/abra/vis/ment_betolt.html\n", "Belső link -> https://mierdekel.hu/abra/vis/ikonok.html\n", "Belső link -> https://mierdekel.hu/abra/vis/ido.html\n", "Belső link -> https://mierdekel.hu/abra/vis/ido2.html\n", "Belső link -> https://mierdekel.hu/abra/vis/hierachiak.html\n", "Belső link -> https://mierdekel.hu/blog/2018/08/12/android-alapok/\n", "Belső link -> https://mierdekel.hu/blog/2018/07/03/adatmodellezes-alapjai-powerdesignerrel/\n", "Belső link -> https://mierdekel.hu/blog/2018/07/03/adat-modellezes-sqldeveloperrel/\n", "Belső link -> https://mierdekel.hu/blog/2015/12/07/oracle-sql-halado-mintak/\n", "Belső link -> https://mierdekel.hu/blog/2015/12/01/szoftver-fejlesztes-mint-folyamat/\n", "Belső link -> https://mierdekel.hu/blog/2018/07/\n", "Belső link -> https://mierdekel.hu/blog/2015/12/\n", "Belső link -> https://mierdekel.hu/blog/2015/11/\n", "Belső link -> https://mierdekel.hu/blog/2015/10/\n", "Belső link -> https://mierdekel.hu/blog/2015/09/\n", "Belső link -> https://mierdekel.hu/blog/2015/08/\n", "Belső link -> https://mierdekel.hu/blog/2015/07/\n", "Belső link -> https://mierdekel.hu/blog/2015/06/\n", "Belső link -> https://mierdekel.hu/blog/2015/05/\n", "Belső link -> https://mierdekel.hu/blog/2015/04/\n", "Belső link -> https://mierdekel.hu/blog/2015/03/\n", "Belső link -> https://mierdekel.hu/blog/2015/02/\n", "Belső link -> https://mierdekel.hu/blog/2015/01/\n", "Belső link -> https://mierdekel.hu/blog/2014/12/\n", "Belső link -> https://mierdekel.hu/blog/2014/11/\n", "Belső link -> https://mierdekel.hu/blog/2014/10/\n", "Belső link -> https://mierdekel.hu/blog/2014/09/\n", "Belső link -> https://mierdekel.hu/blog/2014/08/\n", "Belső link -> https://mierdekel.hu/blog/2014/07/\n", "Belső link -> https://mierdekel.hu/blog/2014/05/\n", "Belső link -> https://mierdekel.hu/blog/2014/03/\n", "Belső link -> https://mierdekel.hu/blog/2014/02/\n", "Belső link -> https://mierdekel.hu/blog/2014/01/\n", "Belső link -> https://mierdekel.hu/blog/category/egyeb/\n", "Belső link -> https://mierdekel.hu/blog/category/felmero/\n", "Belső link -> https://mierdekel.hu/blog/category/hoby/\n", "Belső link -> https://mierdekel.hu/blog/category/it/\n", "Belső link -> https://mierdekel.hu/blog/category/mas/\n", "Belső link -> https://mierdekel.hu/blog/category/oktatas-2/\n", "Belső link -> https://mierdekel.hu/blog/category/stat/\n", "Belső link -> https://mierdekel.hu/blog/category/szemelyiseg/\n", "Belső link -> https://mierdekel.hu/blog/wp-login.php\n", "Belső link -> https://mierdekel.hu/blog/wp-login.php?action=lostpassword\n", "Belső link -> https://mierdekel.hu/blog/feed/\n", "Belső link -> https://mierdekel.hu/blog/comments/feed/\n", "Belső link -> https://mierdekel.hu/blog/gdpr\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "y2Y6yKCxlTuc" }, "source": [ "## WEB lapról képek kikeresése" ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "2EDVoAbwlTuc", "outputId": "777d3936-286d-4d92-e88a-e65876e78fc7", "colab": {} }, "source": [ "from urllib.request import urlopen\n", "from bs4 import BeautifulSoup\n", "import re\n", "\n", "szamol=0\n", "html = urlopen('https://klajosw.blogspot.com')\n", "bs = BeautifulSoup(html, 'html.parser')\n", "images = bs.find_all('img')\n", "for image in images: \n", " ## print(image)\n", " print(szamol, image['src'])\n", " szamol += 1\n", " if szamol > 9: ## 10 után leállás\n", " break" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "0 https://1.bp.blogspot.com/-MkX7e5_jAU8/XqMnuEMm_ZI/AAAAAAAAclc/LRyVXVmwBPYy1qmQ8XnERnYUCswRv5bxQCLcBGAsYHQ/s400/kl_ms_00.jpg\n", "1 https://1.bp.blogspot.com/-o27bHitOJZg/XqMnuY5m_rI/AAAAAAAAclg/O5SIiPMoVHo6iM6Ozl1u2qwNIVPx_B7ZACLcBGAsYHQ/s400/kl_ms_01.jpg\n", "2 https://1.bp.blogspot.com/-ChXAP_nmkV0/XqMnuFW5QAI/AAAAAAAAclY/p3i5K5v5eM0jV4XWKJPKPXrmW68FQd_KgCLcBGAsYHQ/s400/kl_ms_02.jpg\n", "3 https://1.bp.blogspot.com/-LKS3m2g0tk0/XqMnuxxUQdI/AAAAAAAAclk/9FF9dzOPfRci9vuRgKu2FFOjxg13cihLACLcBGAsYHQ/s400/kl_ms_03.jpg\n", "4 https://1.bp.blogspot.com/-6gog84olmtw/XqMnvflNq8I/AAAAAAAAclo/cpj6VTfGiGwWfM7OThC25Ph_3DWfLBYGACLcBGAsYHQ/s400/kl_ms_04.jpg\n", "5 https://1.bp.blogspot.com/-6nysr7al_J0/XqMnv7PNFUI/AAAAAAAAcls/L2MsZxtLQ9cTrCa6gERVeTyRchi3Oi9hACLcBGAsYHQ/s400/kl_ms_05.jpg\n", "6 https://resources.blogblog.com/img/icon18_edit_allbkg.gif\n", "7 https://resources.blogblog.com/img/icon18_edit_allbkg.gif\n", "8 https://resources.blogblog.com/img/icon18_edit_allbkg.gif\n", "9 https://resources.blogblog.com/img/icon18_edit_allbkg.gif\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "0Kqimy_UlTue" }, "source": [ "## WEB lapról képek letöltése" ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "aLAEU2dalTuf", "outputId": "b4f3ee34-eb04-4f3b-f58a-ec1f15c60e7b", "scrolled": true, "colab": {} }, "source": [ "import os\n", "from urllib.request import urlretrieve\n", "from urllib.request import urlopen\n", "from bs4 import BeautifulSoup\n", "\n", "\n", "\n", "def getAbsoluteURL(baseUrl, source):\n", " if source.startswith('http://www.'):\n", " url = 'http://{}'.format(source[11:])\n", " elif source.startswith('http://'):\n", " url = source\n", " elif source.startswith('www.'):\n", " url = source[4:]\n", " url = 'http://{}'.format(source)\n", " else:\n", " url = '{}/{}'.format(baseUrl, source)\n", " if baseUrl not in url:\n", " return None\n", " url = url.replace('/https://', 'https://')\n", " url = url.replace('/http://', 'http://')\n", " return url\n", "\n", "def getDownloadPath(baseUrl, absoluteUrl, downloadDirectory):\n", " path = absoluteUrl.replace('www.', '')\n", " path = path.replace(baseUrl, '')\n", " path = path.replace('https://resources.blogblog.com', '')\n", " path = path.replace('http://resources.blogblog.com', '')\n", " konyvtar = path.split(\"/\")\n", " path = \"/\".join(konyvtar[-2:])\n", " path = downloadDirectory+\"/\"+path\n", " directory = os.path.dirname(path)\n", " if not os.path.exists(directory):\n", " os.makedirs(directory)\n", " return path\n", "\n", "\n", "##----\n", "## Paraméterek megadása\n", "downloadDirectory = 'downloaded' ## Letöltési könyvtár neve\n", "baseUrl = 'https://klajosw.blogspot.com' ## forrás web lap címe ///http://pythonscraping.com\n", "\n", "html = urlopen(baseUrl)\n", "bs = BeautifulSoup(html, 'html.parser')\n", "downloadList = bs.find_all('img') ## képfilek keresése\n", "#downloadList = bs.findAll(src=True)\n", "\n", "for download in downloadList:\n", " fileUrl = getAbsoluteURL(baseUrl, download['src'])\n", " if fileUrl is not None:\n", " print('p1', getDownloadPath(baseUrl, fileUrl, downloadDirectory))\n", " fileUrl = fileUrl.replace(baseUrl, '')\n", " print('p2',fileUrl)\n", " urlretrieve(fileUrl, getDownloadPath(baseUrl, fileUrl, downloadDirectory))" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "p1 downloaded/s320/KL_karacsonyi_szofelho.png\n", "p2 https://1.bp.blogspot.com/-LvQsQz0kOTU/XfyOEdINRWI/AAAAAAAAXxc/k1cZdGkTJnwYvkABO3oMxH10kKwx2edPwCLcBGAsYHQ/s320/KL_karacsonyi_szofelho.png\n", "p1 downloaded/s320/kari_fa_word_cloud_szines.png\n", "p2 https://1.bp.blogspot.com/-H62-mz2F1DY/Xfyc2J0gObI/AAAAAAAAXxo/7iQK20DSkvEK1kg0lMbcb3NX3eu0Q1gxwCLcBGAsYHQ/s320/kari_fa_word_cloud_szines.png\n", "p1 downloaded/s320/KL_tonok_harca_veg_szo_felho.png\n", "p2 https://1.bp.blogspot.com/-CVi-9ZUaRmU/XfyNu6i0LyI/AAAAAAAAXxQ/pIsl7ClQThgVtoOp2MQf7EU8LNtnhEqwgCLcBGAsYHQ/s320/KL_tonok_harca_veg_szo_felho.png\n", "p1 downloaded/img/icon18_edit_allbkg.gif\n", "p2 https://resources.blogblog.com/img/icon18_edit_allbkg.gif\n", "p1 downloaded/img/icon18_edit_allbkg.gif\n", "p2 https://resources.blogblog.com/img/icon18_edit_allbkg.gif\n", "p1 downloaded/img/icon18_edit_allbkg.gif\n", "p2 https://resources.blogblog.com/img/icon18_edit_allbkg.gif\n", "p1 downloaded/img/icon18_edit_allbkg.gif\n", "p2 https://resources.blogblog.com/img/icon18_edit_allbkg.gif\n", "p1 downloaded/img/icon18_edit_allbkg.gif\n", "p2 https://resources.blogblog.com/img/icon18_edit_allbkg.gif\n", "p1 downloaded/img/icon18_edit_allbkg.gif\n", "p2 https://resources.blogblog.com/img/icon18_edit_allbkg.gif\n", "p1 downloaded/img/icon18_edit_allbkg.gif\n", "p2 https://resources.blogblog.com/img/icon18_edit_allbkg.gif\n", "p1 downloaded/s320/KL_karacsonyi_szofelho.png\n", "p2 https://1.bp.blogspot.com/-LvQsQz0kOTU/XfyOEdINRWI/AAAAAAAAXxc/k1cZdGkTJnwYvkABO3oMxH10kKwx2edPwCLcBGAsYHQ/s320/KL_karacsonyi_szofelho.png\n", "p1 downloaded/img/icon18_wrench_allbkg.png\n", "p2 https://resources.blogblog.com/img/icon18_wrench_allbkg.png\n", "p1 downloaded/img/icon18_wrench_allbkg.png\n", "p2 https://resources.blogblog.com/img/icon18_wrench_allbkg.png\n", "p1 downloaded/img/icon18_wrench_allbkg.png\n", "p2 https://resources.blogblog.com/img/icon18_wrench_allbkg.png\n", "p1 downloaded/img/icon18_wrench_allbkg.png\n", "p2 https://resources.blogblog.com/img/icon18_wrench_allbkg.png\n", "p1 downloaded/img/icon18_wrench_allbkg.png\n", "p2 https://resources.blogblog.com/img/icon18_wrench_allbkg.png\n", "p1 downloaded/img/icon18_wrench_allbkg.png\n", "p2 https://resources.blogblog.com/img/icon18_wrench_allbkg.png\n", "p1 downloaded/img/icon18_wrench_allbkg.png\n", "p2 https://resources.blogblog.com/img/icon18_wrench_allbkg.png\n", "p1 downloaded/img/icon18_wrench_allbkg.png\n", "p2 https://resources.blogblog.com/img/icon18_wrench_allbkg.png\n", "p1 downloaded/img/icon18_wrench_allbkg.png\n", "p2 https://resources.blogblog.com/img/icon18_wrench_allbkg.png\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "dbzBz8JOlTuh", "colab": {} }, "source": [ "" ], "execution_count": 0, "outputs": [] } ] }