From 9bbd329a3bca563385f7940b283ee161e560439d Mon Sep 17 00:00:00 2001 From: Aryan Sahay Date: Fri, 6 Oct 2023 11:24:31 +0530 Subject: [PATCH 1/3] Added Web Scrapping with BeautifulSoup module --- Web Scraping/Requirements.txt | 24 ++ .../Web Scraping with BeautifulSoup.ipynb | 347 ++++++++++++++++++ 2 files changed, 371 insertions(+) create mode 100644 Web Scraping/Requirements.txt create mode 100644 Web Scraping/Web Scraping with BeautifulSoup.ipynb diff --git a/Web Scraping/Requirements.txt b/Web Scraping/Requirements.txt new file mode 100644 index 0000000..17fa697 --- /dev/null +++ b/Web Scraping/Requirements.txt @@ -0,0 +1,24 @@ +async-generator==1.10 +attrs==21.4.0 +beautifulsoup4==4.10.0 +beautifultable==1.0.1 +certifi==2021.10.8 +cffi==1.15.0 +charset-normalizer==2.0.12 +cryptography==36.0.1 +h11==0.13.0 +idna==3.3 +outcome==1.1.0 +pycparser==2.21 +pyOpenSSL==22.0.0 +PySocks==1.7.1 +requests==2.27.1 +selenium==4.1.2 +sniffio==1.2.0 +sortedcontainers==2.4.0 +soupsieve==2.3.1 +trio==0.20.0 +trio-websocket==0.9.2 +urllib3==1.26.8 +wcwidth==0.2.5 +wsproto==1.1.0 \ No newline at end of file diff --git a/Web Scraping/Web Scraping with BeautifulSoup.ipynb b/Web Scraping/Web Scraping with BeautifulSoup.ipynb new file mode 100644 index 0000000..ddedb55 --- /dev/null +++ b/Web Scraping/Web Scraping with BeautifulSoup.ipynb @@ -0,0 +1,347 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "code", + "source": [ + "#Requirements\n", + "#pip3 install requests\n", + "#pip3 install bs4" + ], + "metadata": { + "id": "-gVGfpsFg4Ns" + }, + "execution_count": 11, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# import these two modules bs4 for selecting HTML tags easily\n", + "from bs4 import BeautifulSoup\n", + "# requests module is easy to operate some people use urllib but I prefer this one because it is easy to use.\n", + "import requests\n", + "\n", + "# I put here my own blog url ,you can change it.\n", + "url=\"https://getpython.wordpress.com/\"\n", + "\n", + "#Requests module use to data from given url\n", + "source=requests.get(url)\n", + "\n", + "# BeautifulSoup is used for getting HTML structure from requests response.(craete your soup)\n", + "soup=BeautifulSoup(source.text,'html')\n", + "\n", + "# Find function is used to find a single element if there are more than once it always returns the first element.\n", + "title=soup.find('title') # place your html tagg in parentheses that you want to find from html.\n", + "print(\"this is with html tags :\",title)\n", + "\n", + "qwery=soup.find('h1') # here i find first h1 tagg in my website using find operation.\n", + "\n", + "#use .text for extract only text without any html tags\n", + "print(\"this is without html tags:\",qwery.text)\n", + "\n", + "\n", + "links=soup.find('a') #i extarcted link using \"a\" tag\n", + "print(links)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "29YQuSxKg_py", + "outputId": "fad81c49-e0ad-4f16-d716-97e5a820a146" + }, + "execution_count": 12, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "this is with html tags : Fun with python programming – A programming language for revolution\n", + "this is without html tags: Fun with python programming\n", + "Skip to content\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# here i extarcted href data from anchor tag.\n", + "print(links['href'])" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "dNci1cV-hDne", + "outputId": "4fa5d4cb-9d0c-4d6a-e025-631e879f5c0a" + }, + "execution_count": 13, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "#content\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# findall function is used to fetch all tags at a single time.\n", + "many_link=soup.find_all('a') # here i extracted all the anchor tags of my website\n", + "total_links=len(many_link) # len function is use to calculate length of your array\n", + "print(\"total links in my website :\",total_links)\n", + "print()\n", + "for i in many_link[:6]: # here i use slicing to fetch only first 6 links from rest of them.\n", + " print(i)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "95HDbH_6hGRa", + "outputId": "80fd7795-6972-4aea-a292-a8906ee82043" + }, + "execution_count": 14, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "total links in my website : 100\n", + "\n", + "Skip to content\n", + "\n", + "
\n", + "
\n", + "Search\n", + "Fun with python programming\n", + "Home\n", + "Contact\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "second_link=many_link[1] #here i fetch second link which place on 1 index number in many_links.\n", + "print(second_link)\n", + "print()\n", + "print(\"href is :\",second_link['href']) #only href link is extracted from ancor tag" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Y8bBLk4phJbk", + "outputId": "d527d42f-4bcd-4f60-a7cd-80a75a2a8f6c" + }, + "execution_count": 15, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "
\n", + "
\n", + "\n", + "href is : https://getpython.wordpress.com/\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# select div tag from second link\n", + "nested_div=second_link.find('div')\n", + "# As you can see div element extarcted , it also have inner elements\n", + "print(nested_div)\n", + "print()\n", + "#here i extracted class element from div but it give us in the form of list\n", + "z=(nested_div['class'])\n", + "print(z)\n", + "print(type(z))\n", + "print()\n", + "# \" \" .join () method use to convert list type into string type\n", + "print(\"class name of div is :\",\" \".join(nested_div['class']))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "S8IgJqz7hMWC", + "outputId": "8f59199c-222b-4eb4-a155-a06564817d01" + }, + "execution_count": 16, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "
\n", + "\n", + "['cover']\n", + "\n", + "\n", + "class name of div is : cover\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "wiki=requests.get(\"https://en.wikipedia.org/wiki/World_War_II\")\n", + "soup=BeautifulSoup(wiki.text,'html')\n", + "print(soup.find('title'))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "HapUBD0xhPOI", + "outputId": "bf68db0d-e780-4dad-dcd2-5f12aeb49c1f" + }, + "execution_count": 17, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "World War II - Wikipedia\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "ww2_contents=soup.find_all(\"div\",class_='toc')\n", + "for i in ww2_contents:\n", + " print(i.text)" + ], + "metadata": { + "id": "uhxBXUPwhSMD" + }, + "execution_count": 18, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "overview=soup.find_all('table',class_='infobox vevent')\n", + "for z in overview:\n", + " print(z.text)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "FdBYCr3fhU9P", + "outputId": "75fe439e-6638-457a-8bed-eb8f96e42dc4" + }, + "execution_count": 19, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "World War IIClockwise from top left: \n", + "German Stuka dive bombers on the Eastern Front, 1943\n", + "British Matilda II tanks during the North African campaign, 1941\n", + "Soviet troops at the Battle of Stalingrad, 1942–1943\n", + "U.S. warships in Lingayen Gulf in the Philippines, 1945\n", + "Soviet soldier raising a flag over the Reichstag after the Battle of Berlin, 1945\n", + "U.S. atomic bombing of Nagasaki in Japan, 1945\n", + "Date1 September 1939 – 2 September 1945[a] (6 years, 1 day)LocationMajor theaters: \n", + "Europe\n", + "Pacific\n", + "Atlantic\n", + "Indian Ocean\n", + "South-East Asia\n", + "China\n", + "Japan\n", + "Middle East\n", + "Mediterranean\n", + "North Africa\n", + "Horn of Africa\n", + "Central Africa\n", + "Australia\n", + "Caribbean\n", + "North and South America\n", + "Result\n", + "Allied victory\n", + "Fall of Nazi Germany, Fascist Italy, and Imperial Japan\n", + "Allied military occupations of Germany, Japan, Austria, and Korea\n", + "Beginning of the Nuclear Age\n", + "Dissolution of the League of Nations and creation of the United Nations\n", + "Decolonisation of Asia and Africa and decline of European international influence\n", + "Emergence of the United States and the Soviet Union as rival superpowers and beginning of the Cold War (see Aftermath of World War II)Participants\n", + "Allies\n", + "AxisCommanders and leaders\n", + "Main Allied leaders:\n", + " Winston Churchill\n", + " Joseph Stalin\n", + " Franklin D. Roosevelt\n", + " Chiang Kai-shek\n", + "\n", + "Main Axis leaders:\n", + " Adolf Hitler\n", + " Hirohito\n", + " Benito Mussolini\n", + "Casualties and losses\n", + "\n", + "Military dead:\n", + "Over 16,000,000\n", + "Civilian dead:\n", + "Over 45,000,000\n", + "Total dead:\n", + "Over 61,000,000\n", + "(1937–1945)\n", + "...further details\n", + "\n", + "\n", + "Military dead:\n", + "Over 8,000,000\n", + "Civilian dead:\n", + "Over 4,000,000\n", + "Total dead:\n", + "Over 12,000,000\n", + "(1937–1945)\n", + "...further details\n", + "\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "NBFRwleXhdEy" + }, + "execution_count": 19, + "outputs": [] + } + ] +} \ No newline at end of file From e804ac06010f83f968e33988681373f553630478 Mon Sep 17 00:00:00 2001 From: Aryan Sahay Date: Fri, 6 Oct 2023 12:12:13 +0530 Subject: [PATCH 2/3] Output Screen Shot --- Web Scraping/outputss.png | Bin 0 -> 35849 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Web Scraping/outputss.png diff --git a/Web Scraping/outputss.png b/Web Scraping/outputss.png new file mode 100644 index 0000000000000000000000000000000000000000..3339daa0ff6daaf44e82eaf9ca2356e1e8aa7e2e GIT binary patch literal 35849 zcmbrm3tZCo{y*-{w(e$|UDb4LE3=E`5^t%jxpmQ$Qd2XPC0iwU4e<_iR%sWJwoDyf zm=%&&4og%Np`}7)sNn_kMoB_Siin5^=>H?owtqXnZ{Nr7$K%mO{9N9b*X8+ozMh}Y z)nh(~j8~YgFfuYSK63b5Un8TX0Y*muQZHKqeB%>)HVXLX1ElYvZ;YziEJlGJK015A z`+$)V6~9t*`eWed<*|oPB8`mJZ(aQJ!4cmtCxI_v5&l8(e$f%J-ap2l{^4}|Y2Z5} zqtwq~krA=SVj`mBk)OMqO8q?PbC7 zA6~bKxAWexUS8k$fvhO$gP)okzCHFe{v!{6#tZ8|j`X$O`_}aE!3fYNpxZBR4=nlU z=Y-Y9X!k&G%C8_vXt`};xpHDit@PS)LR&#DqLrnvq_4)$mZ_gxqj}bi(Yje0eg8QH z%8Fi{;eiA`nX$&0nfCeT+b+JX{`mG{|-aYnr4XR+kN@mYkUyf z+^qbi$!7gkeAW@lPUp9aIgdJLZb4PIxb2!>!SdO%iI|0P)?ivoU|Nf;doOs@T6?$V zF&36K_>q^&GXYri(S7NIQdh}RafbXn_*V%^#XBft_JNHP^9ma`F5C5i$P+s@gg39toWz zLHjfGd;n4GVzhbCrbZZOLMOU`O5MCc(g znvlqp7jkRS{k0&l5*SIsn+(kBjDv2pO%n$+D+c$>-QEMoyjY6)&CLfrY>f$*=VLl! z;PXPP2G2cSQoQrCgX7I6~zhXlL5I7>kh;=R2`3SxinKx;qereYr<-d8V{?i~HGch8f<|g)hW=>;@qAbci zLxi5|g4Wi5TnxCK@npUi8kF=|N1>{5(Um`-VW)S$F;~w&RFwb+*C+`PW67bqyd=ycmaa<4y z?1^eRv42-?tH@E4F6hwkpmSdNF&cJEBrCiIQn!>fQme_Cne}jg<;Od*Uoi8v|XY_<2fEVkLe?$gXP|WY4340sChvJULdQQu(Kw$keqo9aX~IXsG$oI zEKNSpQk&LVYcJ4n1q0D&jD~|{^tyV(JP76OLmH9ef`G+M)W#J}9iCh}G(S^oh1aiE zT>_PA#w65yY40oS#ABsWZR5=H&dK-@qV_(vMl~;8n4c+6^SFb$H;H;!e08HHlPKHQ zmp)EeP_UTj%|%12AW^F;HxzxO&Bw}P92VXH=fPezUbePu3KXW3Z5R5WY6Rz8Xx@T3 z^QC#8u;Y7ekyKSQFx)P3|v2yT3GbFGl}v-{pf11lgZ$>hrii-N2MI z^eu^uVETs$D03%RWsOCpMM1{%Y{9H~3q_+nwD8&rgq?!SKNgmEUb4OkR^0^CRSj6B zw8neDR-h^rJZHuv%k43^*efOx6-@O>euH~}v3}wn8m2(0?z1-b@Bq0RZ6v^m%48zn zArw1K(bA$K?@j*jL*(HS@83J@R~a+xperqyXB^$VRk`y#D13ettR+i_+~xbg_s2^w zlRdC)?JDOeAL8_A|9`UDXEWQAn${PMSqK-mMmw=|LsQ`F!Iwum7UrM}h*S*)CS`cU~P42=}VhmKa4*CqEh(0Gm zOKLHQeEFJ(rsb^34f79YW;bYWL%YHdYl_ya#=ZQ^K2B)*tH)*QqcBrv*Y8pv&-V!C zPL2CjzbwB4SvPlw8tC$^x_K@NCJSKC#6s#Z<7Ul&Dsp{?;7&Bnji#6@lpFRfFmSbt?+YV{pN!5)4HH~w6rE%jV zs>uV}1ZvEgR5Y{3Yqd3wk+Q4Z#oGD~dmOh5ugb$m%uhk*Te;HtK~_Ul02n*Zz-17P zv|CxPa;rHWm&vId_mR0{OmzdRL6x{LApkWDPHfy16N#T5#GQat{7X0T*h(M(V(zI1 z+O-3sCa|WdUl3w!{BZJzH@%iYNuMel0rTp0|5&}~i(K&R(uLoW6=Nq-EoubnRBTLt zv*sBPeubL`A4(hM7ag%*u&pvmFcT%{5v`7zY7r#pLggE!dge$s;Kz`t_1C}a{{bW3 zFL(|_Z_U?o1$03XHMHhs(PfIue3o=JOLU4ka;lG}SzH#u;4$5*)qwVV7lfGIJvh0) zoO}&Zv0CxQ6f84^X4q;Mmzbq~_Cmd$^`V(=N*5#>tj1Ovv)rxbimm$6dd{K)ahj&?If1uO`lP4rxzO(ceI&EN$&V4*?d%ttsBV}<0A9!}cboXMC{3FlGn+o6JOLi@b08qk(Ex|NJEz{1NVier6olQP{1-<+w(`7O{x_UW+dZYM)2;X%iZv z+@*4Nsnb_S&+TF=Dr2HpeNL`dPA(b>>&R#9 zp|Qsnv-25uq5uK|r4i$2SC39^<{k+0PjXFqleh_CFcVixvvU5Av|x~xGR`V7O>vOy z5U{7^2VD0;>YcC*@Ebc^_heAy>%5Hokg3J!%!MvUu#KvptyDk5?&h=gx#)rL6SMNu zE1`08v%tw?-_sxLYzLr6=UbcEcO0e z%88^m&XIU;MwO<|r*X)yZTWDTN<~W=>vt5yxu)bU2*g^E@L6hki&s6oIqIGr9po|5 zgqGA-`As~#fn;|v9B7E0Epk@!;!<8ftij0T9LyU|7Uc!zGOKaY(dpK4NCjqcDK@r$ zuNE-P2e7;SO6-Et5&H(Or4CsKx=~ZG-`up-+>mBZ1m91rU+&-ioIC^_U4Qq|ZxB>Z>y9b8|})qG(B@F;=1LRHFiA($a%$g~Qo@-xt@`E0nN`|3BY%(nL3+;x`=7-uk; z8*H|S{EaLAV;aFmZ-y@j&6E#)9P9ST%CVih6Kg2{TFojaIG(uJ@gG$mMcXH`#td6$ z{j8jMOw>Fs#PMyZ#cOM;o&9;YtY98p=Nra2!o1F{6jM~U^s6tynJuzurz_&zZ1zLC zUD*CTxgs(We*&><#QWZ)3!5k0&VCpGPrEft@73%W$>4jmsN?wRlc`XjWER|$zmCHC z(rTr0`w)5BX&J{3961_vgX5(-P2Aa%{`wT8YA2X|dm81w{uSlUWUbZwro|mFs#`++ zbsZsq8u#PT?}MUbG8y~Y8FnOUrQxJUC)v{{la@&vKrQxp?cfD!Tv&`&?KRi}=Q|d@?<4QtsA(hRvqNz_duwWCZ z!TY2Aj^tk%jU(Dgy&mDDkMrc7Y$gjP*CBAr1_m8|e^Bi3qaSGFK+w24v^z#!6N8xV zu$uGWI%4IHRsb42Z8dY6b0^}`Hvh<(OX$ArYu-(DsO3VM3n*gT6&&;R2;B~BnW51X zaJCQiPg}a)?U=si-PqtT#B)ik1o@9+*nE}X#O^RtdFQy@O6jS{OKcWyJ30pD`iArB zL*2UIn_jTTZdk2b4PB~%foEWVVSnQCQ2FCw;cHt@g-1nK+BIB7yjS7<(#oTe;+I0@x3 zwBs>gX3Cu^YIW&N$MlCmHaRPVB!<6xSlK6vZfX9`!-!XO5*0A~-ImQ%Uu~81#cIr` z(_u+2T;z$&4hO#O#+;>n85K{0tPvUi$Jf+W#2-Gu4>}TA##{`@%Ht_qj|mTfwqiu2 zJij7TSs8Bum`-&-O7sqj>E)!fLgFdH&JE|~3?@C}6**bu9DxZd|KX{?UAKT84eUJKg$260;b7k}51r0I3ef~{*^pFy$jy9t4$JG14 z@_qS>r3vSeISLd|y3+VQ(*B9>@QHnZzD&HJwy&YO?4MYw(j~;} z%-7cmi#K*ZIK~vGGRdmpJ@dmuZ>x?6B=c?nnsOFqt+-aIFR*vzHl4a6!F@pvW+emV zQ(UHQ97aYVl;hBk3l>uWOLWJ5><$61d4!Mr1_wX^={cshpVgQQpoQe88`*&$=HYcqFP8(#q76qD_Bs*pi>(b%2}g#`n0rU$tgkKgf2f1>d$@P zCx2~LUR;{8oa?V2zzbQ@SGaDTUq!^O*N8`KYsWiGYbW8&vIBF~a5Iy1*T;mm&0=F} zyz!_c7*j^^DLt5t9|8SjKT}iNSUJejnT`HRvEFQlfU_KJ%W`jC?{;te#aIhMNt_oa zJn~A%mzlVSjH^MPnw8K>BKSeJ4%>w}4j`}kDOlu{;OIbYk_Eu9EPh_t)c3OCeV=Xa z+=XL{p!FTSnWr9y<`K+5&7ZPGs^5~g5YIyg*nz51*BZUSYe1^HC&-mr4N zn>}rE*lzvBlFEwGV2a>^2Kvb|L3g$>i)w~Ft2ZVi%ZBpEigbz!$7(Rc#wgZOf899a zVV1if70k^fT<4HiaGyAx?d6Gnv}lDLNbw>17ETXTA1uX0VE(-JqCaOe6+f3Mxz{)B z$$F_)%+#{9NgwGCh{eRDbmkLOX+uxX+!q0#jg|5f5A?q?a(io6Mk(hE7{h3~BWRIs z0zR*csVnsV>+mobztL|Q?6KuTGd1AOXpiX;v|6-3>kxTygHv4V^L+~&stlEk}|nt?Y=CEEhH#kq(>n}_T2m3aK&7#lf7EYOqLC|*rl=bHQ+?xynRGu z&g!dVT(>V~^hh^jQ@&$>oP2Q6f<}_250b2pc532Xn}w1*KNqm4BqT+?K|f9(S&3s~ z>96f#ZlnVuIyyS*nG2+19$NhJS4R)nt`pb3Qw7brSgrIlZtdvE^yXI6PyQkn{bnC1`uI5lJ80-@!@`WYQd3Tsz*E>{h;Wg< z13m>lFoowU2yw<{gk2KV%kI)!$OZDmW5<9dX&Jjxion9cTrGFF?b)GCh=@!`*XFU$ z7FiLG;bdv9PhcblFXj*ZNq~1m(t;b^Emm_ete7xHQrs#51=!MY&K>nSLZOMuyo}#b z-DTLO7k0q@4s|^h%g;FEgB%?lIp+!~|H6DtA_wfb`Zf|UT5m>IxWDQwd$!fl_ATf1 zBGmQ2Zm?m8zBVxcUZV>D?$l57eHJ78+rZafZ?RjYKW#E;JfQ)Aw~qIpSJ3Hn=Yx{B zhIipQ^?790A@Th%$|1)9^t!$J6W(`k*He`N6q5{(`#=_J36ERFM=Juc3fZ~5#X8r? zQXedh;`<{VICtbHDSR%#(23;90R2bE&(9Yg9=vBAz;QTn(XY*LXx*20ih^+7ykbak z78jh6y9a8CCx~WdW&nHJLP2PPS2Yf~lZWt53-pN*f4(EzdBMS_v51!}4zbn^`2jk4 zEl?8Oa`1;ll$ChjxwqE*b9=%>UnJqY8>l#piE6p%8+lFAcpcehRkg1N`v_6Mv*Ax| zlo}!;X@9F}c_P{uK*kYvRO{Zx|< zL&mOl_a4I;_t>Y{$XSVzDsUwP)9I zSe&a{)>PktN2T3(y2_cJ6pgWn?>2$Uiaiy=^&DZ`)5m!I4T^rEEX+~BmWBL6^YY^4 z;J(|_Nfp(}_H4SD7fsQe6jhl!^t!BaPe}V(1Z6Onsa}5>)Qq~zq1*JhTrTbTSwNib z>lC`f&g(B%1;B!#LrBFgNX5{JbN?c7YhpDwaK%-MW?`M%x>4=xPXRR7-hM=Ssy8WS z!bGtNY@Hf>YVJzEQWJwkz&Vdw6ur<3Wzy-XS=o^waFr~=4MWL2sc87f`AC6nw zeqA^klxs)V+dBUqB{`)^H1@Z6cyiZzPVDoJ^oU3Kw@X*>x7mZFea-sdlk~(Pp9|n) zw!Jr&OHqM1cN~NNi+!IoD}R;^sd@-{8_nzTtJq`y6O~k#977>!w6~e$5O7G#9AK_W~lw^)4do~oLGvNr39tl zC=*FIu;0$VMCZOC^rWPw_D6@15p$<@(n}Qlo?hC#>(H&0x*3P$Uf1q;(Q)M-$f$GM zcTXRiZ=fX|Gn172nNG_8=9=DHP=U>wJ`UDmhOCG}x2vXp~E<*RQlu*EjT69Ca zpcIu~IP@C+bu+c@GXHqyNcb+R>#Eb{zGv@EYp66&z9r()?$EPGFxcA~6p`U0U>q+J zoUms2C`(;g6rWz-WDJq2@ZvFe&ZHnd19ofdmEvMwTnDYl)v>IFv!i>{{UV^wap>tq z3SIPfdq}~$y_vM_A5WMXx3#UI_H|#%t3MEDV~l5tT6nKcU zS*a9RI+Ul5jgYGSAELaIqlyC}2_>i2D0NqPAdLGN*WH`F9rVo%UR0MTd-G76Y$z7_uvn~G}H`@C^_$eX( z-%IpSI;4hsrgK6%*WI|ab>#O!3SV-jwjU%{F@EKq;c~g&=F;;r7Ij5zpaGyi2#u)t z7e4IVJ$RXZ;S>KGCgR*dRHO@hGg;(~BNRW9=9ewbiJ&uuG8EtWfM6D#7j7)B&uZu~ z77N6EZ6JQ=0LR6nvCi0To6;@`&euDI$xFa{sK@u#oZdTAyS81?e|?m|sbFn`is?O@ zNlN$VP#Jk_K-xsVEA8Lfm_edl3SzW-NEI~Z9&*YRiLumcTsvm&)vb@3FL>`}NHAma zKx*IiD-^lO3z(1Do|fBHnsbLMH3cD$Ano3A`CRh&Z}u?}ZH$B)eDmP)yZ+#NEq*GO zpQa0VDN{&Z(x}t+?onUDod8z0d6%eSWT`6XM%JOwWDiO1SV?&Fqm>*q%2O_){K1TQ=m$=XW-e!J2g*sCo?_;A! zQTg1G!I;|q1Tbmj{PPLE1a-fE{4eBMf=i@70cZ}Z2V$#-%9bga2DKLaVh@hr_L#)| zY1-);D%{nQ3_Ctw4+-7_-h(4coO6MCA#N?~^v*%zFG=X*d__(s*Tj<^D$ZpCV|6}W zbW?mQJXt$Aw>A_NzRMFTh8?hRIGDG;jc9oYCdw2i6q?q=XZc2ROBJ2yvK%5uC<)mJ zkzb6r!b5<1yRK*;l&=qd%F)~AjuRcQ>U3oPm09dt&0JI@lB^Zr7Co2JIV3i z?4fqQK|Xq!yqV4u4sJBo%mZE(T*V zGsZ2f<}(OX%n|n-rsby)30We|cgz*7cAmH?&I*M9SuY&-9}@r6&9;0oXLe1*L@$zu zRIlRV_+QmvFeW^;X-yjA%+msKcGVZ55KQQCGuCw*2^lr4rF0*G(Wv%kcSLY`alONR z4cTqFWO%_#@h;vx3NUgblr4E<(&21Y?G4k}23;NWqBzPSKY=wE-LK8gY5lPQ`fkc} z7-|Xppvi4HuDmWHEG`;0KlF{y3+bo2m;%6kLmd>d>Mdh$6k_1v02b2{QUX+Th}bK| z$^$I@tF3I5U3mzAs}Z>uyf}32S`fh&}}IN1nrJDQG7Pf)*p# zwf;J6_T}Y+-&TH-?O+q`Q)C6rJ%1-{7kcxE_-_4_oLcP@BKr+rgA;Nz|b!dQ^qEdPd*n9aw-z&i@}f9XgBBHF7eOY-5x9O^=r zYC=j6b|~r-eEhHLfs!=p{_|?}ctZaKxjMwQUz^exozM`vkJz67JhEqCV4zxN8>l?- zfa?57?PR^z)7D#Kcj=>X-cXE9z$xr*OT~!E&myvz3=5r`@}e>&W?xWD@txEvp)HJm z@(KQw1)c+IA*dGpSCW4x9^-GeQW5T&MN%gfT$2HYL}UX#IN%f$9a&f^(t{&Q{Pn1c z^ljgr3uqp*B8+TJ*^I?g}W7d~(Txvw8 z_0Y|Xx}Nxy>N5L_ihkG*N$U6|4%8EiaRm1HH!Cu zK7x%A&#JF;4`TVcwf*`rfIx}U0HqYO){Gd}>2JWe8~${&4NazROV2>hzmpJd*I9Na zO|kt`Aytj@q$~WB4LwZRK;8g>r%J4RPNrZmp)%Asql#)*Ql>Z8HKA`}D$+|HjgODZ zy3L`vuW;E+O~&3=F1F8U6qcxqRmjsO-Aj#cqjgQRmny8rEZr_8Nj;_B{^nj%(a z%{|p>l3s9=%~=L|NRP8ZHQE;56zc;oETI&40{U^t8p6gnqQkz2aRcE#Yha~G(Gij7 zcC7=zu%d7SYQ(tm*^iN0-drbofTs@mg?~g2tAJF*1s3}hfZZl|Gq)FMA?Vu@VAnvedtF*vRP_$f!@&ST=77ZBYaY9^GPl8bve=T+mhfz zmCw#sNz%@tmCntbsk~e;J9O+4s0Bshc2lRHwonpY*B3;bylfHQ_?p!juw0voQ@Pb=f>R@1ufR@wEiCbr&AM1BO9wNi zQ7+;j5@9s1H@(X$Utho;mA(_>^Soq1<~AynG2O?TL?+J^fnN!}$=g3!yG%D+F~Fke z8jwoAVB6erOk(-@izoqN6a>Q)zsWT?*M@--@5j!W{MFPj~R0r^AT9w`DMD zl0rw#+8T>|waE78B!|SP!nplpHNko;U+T`+rLYI_wsQcZXHpas6N5h_UMF%>hAhTO zv!b%9RP{z_>L{V4zU`Q`3kSXb$3hc@We;#fiYL&w-`91-xHS0*IuG8s6$U4sZwzfq z4h6}~rjk1m<+zsFE~PHTeqXWZqd+c5Kz|lGcfkqh-+9r2{v0!F3h4<)PICuoMV~?a z0x=dlyI=Ee2?DWiQsA_URn*UjJG*HmzubVf?!B3AGdF+&w6_lxYqvAl@a8UP?^6w> z>M^pDPnwI^^+;^feH||QjIz(afMOprjv6g+)psSCp>UXDjJd)I^TPb^IWw2xW1j%T zWR>JzIcB_oun4zy_fST%Lb1opc6L8To{zw!Se-w;D~rrQdn%gTaZBT%zlfFGL7>}* z*43-My{Mk9v1UHKO6I$ZV%3#(XXDCK1(X1?7s09xf9i%Mr$FPh%-L>zO_I+IanIdk z64H}emCSh}X%@y;Na}zJFlTC!=#kkxq$g{)v(sNc+3ZI?^F}4B*O}l(5m3OqY#N$9 zoiw*)CcC5zTcuEpo?7TNc`Da1=jg@Be&+RUv1pkYK<;=*AeAvg#S*LXn4yrTT>ieA zwqD7mU`MltA_Bu_t~T3J`B?IbJ%lfw6LCqZQ37w)d4PtQ3%kof^O89s(vCTkEfu?= z*xtlSXRa=5ya=_OyV^Zj95XQI{=yqM=e{?KH|H_sHB2{=ZHcd+`H#2FP*X7tHndi` zrRNIb^{2>T2U^t}tmmX@+e-1$gNTA;dyFwvHCaQZCwC)*$?XQ|p*@E&Kz7{2^VK2AE%9Ba=M+ zFy9wog3y5;d=%6w3IFTaYw8=Adtf$QdMIq63$+>rmBvhDCpWo0YHz?Ri07r`6f0>8 zS{aA+EGbfk@MXu8WYHD@#YViE#$&0bW55$S6W^X%6I>Z)wL0SrOW=6DWq2bdNwxIx z=u+lr(ENc|O^1_Nu=N#Kr~-*bT=k?~+UK+L#P zZqLqA?(v&KWbaf7Hrk}9L3G@DPhj|sM>oFvqi#774^t{V=ebyBMjjyriGJ_5kF ziBW_V3>P6%G7dJL|Jh-q5 zs3Wh4vqg_b6c=N|%qZQD`D=`S)n%CP;qNd1df7W5eseD|H(1QI{NH`*ldb6SFJr!% zOkBQbg05T5%J+U9`T4iGeMjqZP&}^s(N+VbDBAHCmz~=eRJd8Gvsoh}|Nq|iaCz98 zy9a+LaRYpiG~|yMEl2WEMLXKmYmkEP1Sy=bPLO_=jV^FrzZ0neG=7HnC&n(sI1&OU^wd@CLlMf%$4=*V$50Hy4X z+fSo@n(q(?tLyE!rkrGE4@s+()atfiOxkAoo#1)e#)kO}#t@Go(=I!ew)rmIP7lWS zUIyB6CC0b5utkT=_6hHLS9<-z!lNa-8l|Cp|1zvMc0Y{oVh?`hoow|@<#glqw~UvO zcgg>@37ORUY7wl|l)VX^Y*sY9pW)X1> zug>(*D&&OAspfSoopC;Zy}bICDh~e>HoWizXfnM=O(*%|x@Q}*a-*-I!dhwWXNEY5 z%lT_+0X`o|E|7N>q~I;5h7!1&*_Po^;(}WL#3yviVT|tXuIo1R2jQ$DIpY@W9v}Wb z5d(3ep^fLZ9U!ZyHkp+~k%^m_&|P(3V);sD?}$58TU$HcbM{=A?bBb0d|DA=W(|Ms zL{vmu2D6qt-}vq594DkTRIE=AaVh@@m@hphXa7jheC>+ed?{%3L;19a%oTh^A!I@V z!zwX5+HQFvR+pM)!*P{2MY)$WPLQw$3F-zr{gt4lcP>LtIUqqoyH z5|kY!!DspCmAoWZAK`I<7Ghw&fnRNCNhYrWx*YLZSa*+oi%Z6UIN0?T-?_UN*&y;3 zj?N*{MIWmeGDaO<=3hh<-Q^sZcPZnVzY;eO{0D-+lSgEC2JI-as`V{&j|dwr@Qr-L zu(Je4bneZZJWXdjLnAu?vOMjzc`e|7xtC0G5h%EfYIT@D*3~tp?54La9RYM9!K|IE zFS(mjeAb>D#cTo~;7 zM0#Skw0OD_+$^1P^!F=&UR$JgP^7fQ?YY?Jf{+oInqqAG7HJ4yNA|>yR#j2W+~44= z-mKQfI&!U2e2xTvq3v+SWsLjh29Qev_Oqu~dKDZ-Y?vT;!Xru>hf_wq(H8gu#v0NdH0mM@hMdF_ z1c^RRm&;w71v*mr0jd5P8$NzM)(EW4~)8w@uOb)>J3DV#~>DcsD z55%iE6wIXHk&ENaY5yDWQ znoAjnTLmFQ8F;M^{Sd7E*I{(hJ>^$V%|o6Dj*q*$c4_JU6S^kCgC=?xd#qc_-VvMp zjp+`DH4Uq{t(TYZZNwjw+ng^uNw?a+uAlI@g7};%wxsKIRoQ>W!v8}F^|s+{l(MK9 z0pvkanl9!6uqFF!dH0y&W$d{bHTr(guB?|C8wjO9XakgAKeOdR|CDH#1h}4UF^a{! zH^3+RLqE14{FeNMy#rJj0KZovW9r?@=*1}gH5+~o&W_6LShM+dPU09tAG99`;{i%? z`tdV$c3Y|dspm_Ka>d8d>n8nOOAYMj-G3U&&_E_6E1?Ae$t@92cQ3DJ>#uh~{yfrQ z9MdpZqqfwzdvj)Qhp_8 z2Y3e&X$1QiX3j9cj#O!??DXS%A*%;E5w@TZp*#DI26e;XP^a*>Y^$y@!^+_W-#G@r zI`>6J?AwPUr#rZIiq54BoIR)KD2yiSLb!n+9HKrZa11ukHnM}Y!s!X|ZSn1tQ4X|} z$o>fEhZaDuc+LgK@0vm=^haOdyvq*gvH_r4ntw0LJyOP6@%Cu<|BihPyWJt&VZOM) zu9l65uC$C-)x(d1^gTACST|cH)usAs@*;gLPJqhwt74QZd>0FUb*Th?F1$n?GW05w zUOLTi%HfZdL(4uv;S3XR`d^F~sE6%$!-QYCO_(B^avTqInvF`TsQwj!=7#Z92~Nzj z$AXGgn`)6A$MhWH1cC)$AFAw+}656kIGHK`L*lcE?>`0fS4EknD*&3leolN zj6;H7r5IK)8vi@hW#(#ogX5=ul{n!Hfw6+P0GG|n~Asm!LQ5mMTvus`cb`T42^_=92SNXmcu2Z*NC0Hb2O9z%nvS7Dj7)+ ze=k?%Ravh{CMBhXmV^9V9R>JGtMkLorw#j*-cV2ZmwRo4y_J`7n++i^6hVL&>M#HG z;5!ZZ$)?tPY{Z9lo3G3Kro1>H51>x0us^$4yYkmV`S824?_V1tRLD<@-TK=8s0JeM zJUvn=QPe*lPvEAx$DFx;5_smblidI$Q-fM1DFrB9#>y`k0?T^@jlwZq_Heblby>zV zm@iQLENFrYu+Ue8Mtg6)`DTV`KWq1+%+=!!}a>JKdY}71Qq(8D`6Wnl)s4{I|O*_1N|93eiPj`FIOtQ zEVX_s2ew@-m>@r|)|L&~#~j9JLc6yZR7DRuXWl7D4O+a|h4*H^sUNU!SM~ete-S5t z@xgzAnZM#$T`zkKAWZ}agH0rDZx1N%mNdQW0G>NKLk+TM%H3)ou*mpQh7>N>WDHeG z?%S+=I`VzpSzUg#KLFsF8zLD%e;Rfno#qN$_b>=1huw6D>FODKCF?UlmDo+T zzXOeo>%~Vls-K==NDmqg&vr&^Y~& zU!;V@!xY6uLz(i`g@E{jKwgXj@H#_?$Q?cIP7Ou`t&aM^XK->?w^x3pVX8m=BiaQO zfAXuNC2UuWZ%K08E>R2BH|=oY_RXz8ea)V#4~6MZoLu{UYxw+asD98HUkY^NRDVjE z{djLN)PI#PbMEMtdMat!_9e<7J2C1I18F9r6M1dP>+$iZ2E)o`zAG-!OafA1hi^KC zpG8&o3?JCIb3~MU0IKyJ|82bqyKA|p>W^L*{S;y=-)|y6FCxs-=hmj9Qwp+LD%azu z_y^2dIS9o?SI4pI8I_c_8_9^bd%&ogat!c5+C_^y0$Dvzp9;~a^EA!dyjy3rVKAuD z?dMHGnyi6v8*}cbtjeE79HdXF!JLmu;KZQu^L*?5WXxCb=NgeveN)dUmH^<)63BV> z?qxtb3jO;&?p3wFi)Ggs{#Mo5D_i(_ECrzRcVgga{X8%HZ_tnCPgJkI`&LNt{}Yt| z=?2!%g3zj|5!q`uPin(5#jrzjUWooiFHSEesVJ8)-w%JU&RNsY*oapC{kLxK=z+nE z-Uq9=oZh-jp6E=b*tk6@tm>b_q^Y-Rf4ldWE4rK-&fXp4Qi9_wKFpLI4!cAbYDVMi z&$J~)^PNw(zRdz{(&O`N_)wl}Ztt6?c%%p4ul2h3skaKtq>aF48ROVq5!=|PS8C)+ zd2`8l#}b3P@2xzfY96Dz#$S~C5}q0yqAMf~28sz!=NJF6v9{Q|EpMTNhq^0yOxfuv z)F1MoDe0ZM$B@11ufJ!OjMq|fh6%3S3t`0YQ>6OyU+_XkVk*L}XGF*Tsdz1k zLje!=-CbqeROdZd?V6~i4!aD;WmES3xz6_Q*1(2fF(G&_1(Ei@7Pnv3Wm5bh@=DOK z!)2YQWYF^Pz zW*g@xV1oczjzYSl>zaZmyjNZH&mAk*EUH2a$|CX{w~?!?TF#us6qL6hX$)kgAxjsP z0R%j|>_*wbqEIf2+2P*#9K_slNup(@StYPDPGTFIjcZ4b5)}K2S!vA*B2-I&Z)V z(Rwmh$?8VDxtaoBKyTxP>#(<+vC9!F^&)el3zCFez$0FS+_;^a`kq#dbPv=1O5|}m zY#PS4K9J#XjQmTRxft_EVc0pP5SRuUa$!hmdONqqz!kl~ysPAerdJ>T)!mrjxVI_j z%B`Y}yGNG5gn#5AzuC1JA~9U*$M;5kfC)6@-O1|3I)4oF7V^JfzGn;mUi}tKAemlu zL&Xp4ZBbGBo3GKO>KeCO>{F3nvBy6xNL@?|Z_BCNH}7&pFI&>X&edNQR;zLx)Zwl% zMr=S*p+cv(nd5%_;#ChDAs2B}X$J^5%ec2ZB|X3c(^O_MAm@mxkQfR#%Z&HeiGu*c zBMLrO*0MXMhGbl;&)}iqnBIDk@f514Op<~e4H=E|zgGBp;TL1UXERBj)X$3eD4*W? z34?_n9oOac8~L8+L@iNp>dB<4Ic0H-)wi_e19T2hu}lq~s#lI{ZJU0>I&Qb#WsJF1v@QXtfdFWj{^j8_M(x^14|7 zD@HOJ8>4DN08uQC*y_Push`==#dN=z7k)`h{sjovwINXz>-X3cnk#8$s-SVFYgGFp z_Egditg-(1Oyz4Vj5gDJ?wk{wTAiHFft=V6Zo8Sq&jLDJ7hMgQ-wA(65H$WNAv>-C z;^*jrP=xy#7>K%jU4}TzB>JWe?~5ic6O$0Gv^Ia<+Xw~VDeC}OlRSj`gt_Du$Z`9g z;>U)u;#>a7^O#?hp@!aMI>Uqq1kQ2H=>mdl%xeajEmxgK3-v>ez50Hv0mw&v$OcIF zfL0ImX1>F&+bg`34xfuR*uY+6pa}fZm1JfhwZ3=xZ=2!@=nFLHXBx+Y2$`REXw1Eg zJh_b-l1NSgv%9WJ^5GMup=0&8iWe9DM^% zqTJCG5MrYv+O}7A)|R-|N)#JO$(=zr+HaYC6%)}&-|HSfv~f|KbB9TF?Xd=v{lU18 z6Cdm1(glvl*StIsD5r}{*VHmz#s(ILh3P;zaR-IS2Cy(&eJPkW;IzJW+AMt62AC@7 zsY(A07jZx^1k-rjqFo3`)cnZ_t^v?O04k&q+bbPnGD&cyYOPG;TNnhcvL@EX6q170 zavtXN{OTE~^=0H(!E_7rplK1UpWD&A`^0skS6@foZ9w=c*#o>$An`Ry(OtS+l}Jyd zB{vLjh4GJ-Bco}OG1IB`IHHy3c<@|L@&rp<3|BxJZS|{sdNG37TMnPs1x?8W4&$YuKi#_Qq3W>WYYhKWt6xD?^0 zRAg0Ry_I@!T0|(ju;@4ls_z5o^s>CwFeakzlkW?_h9bV${76abhKSqLT_dM7ZZF zaJH`T_^+k+#I&(*IrIW_7s97MFI#QRuE8mf{Cc2vex^f5pY z^EXtTeWP)?c^hh+4h;Z;dR~EjZ9*eWL&&qLnRf3QTS`LK>)Ejj8Sk}u==aN_Cb9ZuPb{Nw#v% zcj2IBPzUxOm;(>Lffg<-EHdlofs-9Ewkif%^4gsI=9h_6v-vp5=qbO*ik5L|U5zB= z9w>|_7~eRmtxs3#BVftoJIrX>riV*sibvNdOMQ1e5{_of121zKFZj(Kk}Y1cg#|R7 zGx?%SS@8I|N6rzhU`KSQZ<$r*RkHjQr?ko?Ir>=H&7NhRFqmi@;DTja#7jfzi;jA) z~#P%AIv%kOci&dZF74oNnGM7t4`~?aMa6lRuUFHHRp0L4Mshnx3 z9zAa`d2CUs4L;hg^jl#yN$v+NSHhn5d9;D-x3k0e{=;df=QHXcBm@p|t>4CWT>8VC z6t)PzjsgU`@kjuFYDOG_@0j^MfvgF8F*C`2>Wk1leQXxCmJ=HbbeDCH?|!>Xlq$7a^Zm zBtCN#peedlF@jf3lwWAdcq6+wGyS2GD(l^NRT#Gmc#%PaJ%mSyv&zIB8cn)U1w3xc zzu9AQ%GD8n2zVUe+Q$)?Qr%-!K0;MWxRzi?|D$(qtE?dCi(B{+p$AD~F_w*ZOp^FW zP?hBPHX8}iGhzq`zoYKA+H8&hW>8v{7+Gk~iU*|9jO~^C?gm&u+L!b6WM!<)yOc(9 z<~KKQQ=Y{^0TP-~+m~vZA0kc?lxR|c7mm?6SG`k&Gm@ManNb|N^2;~CbNfQjs&2)|=Z=+-In;E|8!DHN!PUdW6+i0nhp_ z%D&+$K-s@?DtK#LTiOI8V2%9t7DH>^Y4Crbfq=JM{C~}Td05le)-F9?k9GjTIx#3n ztwmHo1VmyWZE2kl5Q0F1VKApE34$6Ugdte1V1Lj6!<0Z~(|k302f6 zgViPNlXd+7Ddl6dr3O>>WpLqrGN}buW06$bPf~I0Q;%dHO^m09B^4d1XzARDlnf>G zeB%_R_ZlftZx(uo7Q*I{8jBt5^R{!>YmWL8pe$?;uSmk6(^e-lWOM2lKdD$~Z~YkL zl7R?@hIn*nx%BG}wg}+Yy6a6P+JGwDL@g#q=(e_-_mxXy^pg71ntp1EO4qQ~O8r%2 zt}i>ZU62T=1pExnrsz_`9K(@eBQbe3RwIkInO7Nkztg&e7T-j1Ee%3-gPJ*(e16!6 zlwmLD8g4(hHV*Dhq@&oX0Z!Q#_ElKQr0k7o_ygIWcG^V{7ue| z9XnLmZ2QWj+98DpX+pgR;|CLJSQ}q~%ujcEzEFWBF@Rhf@H^Xup&%fRjovNgY$o5NrQ>_kLFY z`q->3gXw4ZAN1jYT1V5FkmLRbqmTvZ;$*w~gr4Xi=o9QHqDqqK6;Lr1dAtIos5wlx zgCypCatjBEZJS`Dm(aL<5(MY-M35`NhuWJtH(!@~Tk#hBb}t9CmLoxP4DpH6jAdSp zNye)Ou`{n=j$}kBgl?Q8&2U#wnef+e6X|$IBzoNCr@6+QS~$B{ zd2&>i$tE<$sIOT)h_?mB(9$Qclgt_iB!_lt*P%SOh~x?1l|7HHx0=yyK8xKP#Fz=A zOUj$fo7Rl^QQ{HD($6@aa!oI7ioe<&?^3!3PB+WUm~V7yQyPmumWnY8qYNCvW$y5G z-Mbi*`#s|LSIJ#o#EX>>MMOxbc8rx3>%9p*31n~#gex8n8H2Nu#Z+3QpPiM<2#$|& z%AVyaZvi&vKLaS{Dp)gM^1@~qs#K;Of594e9zhr?b;)zvHaTG0@-b9ke{(XZ z|3(7_p)HKr8XlS=5{VZkDa{DLmTEl^w_Jip5wq(>V!U1OETYkiWRe4r;^UQ_H`4+j zqn`OIw1H)^$+oZ;8JGjJj1Ism7|GPvWwtu(ZyAS{FbN#md<74xC7m^A`C=k*e4Sf1485>`M< zh0(pVD;ben$L7tAhaIDzRAphCx(+E#nFgxo?=@X`SFoQUTv?lR0pQID?a&>@Inu8| zZnrw6&w2QLJe0XE69HqUQsAB$8yH?Os zI)XWpOb#Ih{C6FbZuY`(OWvSR@NL4qJS z1QnN=e`|uh)M56ohRqO_`pIa89a3SPwz=j!$89r_h9B}xsY>E9?&W%!saigiPct(F zpd*@R8~db_HKXss7uf8+y-p*{ zqfV~^p)4qTb8O5nBb0zveOPr_RPS;JMVw+NXa7g)c&r#v z!S+iS9eLTPjntW)u~$?i2HqC)EWZMyw&9Brn-{`IUTA&_g<fn zt+)B+jj6^KAksJL%;dGSlZhq_u zUhIWXA_ZqC;_mMlSfji5J)5Zha9?3FtE<*7@mt=;a>;bRLKv-Ue63O*G%OF!mlN_K zsG7y(W2v)n_Ml`-SutxsK9();A%zdK9%Cw)n6;3e82Yiz@}h2rLtJNTTl9QXH!hz!Rdn=L{t>j_lls9 zU+$7+I!$tUV?^;!>uMfZV zg-T-6UFss;9fLcs$3uM?unx@XPTF5KVTKgs=CKXp`63fQ37Joxx3zyFy>JIcb-Myw zow@m7?H_j@melE(qG-;2GL&$6veQ#l*nR=bup*}?=L?ziK%xnuV$sJbxuxsQ4Lw;Na3MfG~m;ju&>R-8x$T;vydSi@l@UPh3IaMTRB;O%P&&)@PNb6 zDRUUt6F;XHJm)YB+=757Y3utdyQ1~X<%#rb;+}61W?3Kvm*#q%$ihRL{1TFvH|>+u z^!wVtmVM=xc+rBqVxSBtKB0g*ZE)8apasZJ5g3&0G){J3-qa}BW4+_+Hxg)y=$O99 z38_jDCY(q;Qjx9jSZk%)O0@_TzB{eBEjz)OL%&hMIOdm|l$cIW#1r(Ieaw6ccHMWg zoPG7FBe?@9bYPhaR*doiQesfo5wNuIn@|F5U5v4$QwA!Q^WujeR2_(9N-t; z18z7PIr|jwPw{p!va#VdrNZ|INwR!BxEQOG*I}p>#0r((1%3cjYckv>uL$eT8$K|? z5bhE*PXk8IihdR#KsnkCMYfc+MgV0bhu1R*LJuUqT%rJv`^r~U4~_mpuSC^G66cuM z<|t5-wgZR6ot7uEKpshdDi1n1V|3}6UN8Y_2H5olPPB%oP(XMuG;bVXi)_vOqbS95 zS7tB=qk8%!+q%Q8+?QjP4$U&@#|k6nR!ZE3EAC@A(N8sStdG5r#bsu*XlYFuP3wfl z!q?4~C%}_ca3160>@G&>Q{^_s6wF9bXtW7@h!X_3&{utJdMHO4ICepEY{AZwJB&%E z8ar4DLw2}tb}L={iSXO)d`Q0{+rJ&WORqT_pzj$5N|R}pu3_$UbuYpxqO=(InlA2? ztON8QtN9GWBQJ4T5~ob%ToNu=asx3m?WR!Ps9PzIx-6qeV{};<4D`Eh%#^s|EWtOb z)A9k8P7_u3RCPA1xVOVN>V6>EY{X8=n{zWBj=^sVuLy9~snCs)luarP9I3c&VUHeo zl*4!b;KkDCfq=2DLQl6=;gm$309+^|ZTdCg0V!sD{kknf`5-;c_cEjZBy^Eps4U~Q zjpZZrSF|<#IQ|Nfb!%X)bV-bY)oIBB1VJiZ${`gK@{ZC8ZHKD1l-Py=s8NTn&+JuC zLV426&QyU3oaPdoD{_6_a%HMt3X*S3WEhz!8s{AwwK$|4pwgJir20 zPV#x;%L=^zzPz(uhCoo%+*pz$)pc|uHtP2Ix<_A(3b^M~>6ee!@OwLes+ zTXeG1E(}5zr-@z^__Q9{#q=TB->z}lFQwx4i*sdCEIg>NU^j#;0%F#|P-1ElJ7xHN zXP$1k$b!%0yJ0VQX6Y4VnNa)jp}|R&k!76SdXfRORnJdt> z1eG3^W3A$G>`3R_?GP0sa#a%E!%87@I*k}+=Ti}X$(2CZ+J`_)|HQ&4c+N$d}H>$LS* z{KZ?%t-sVN{zGwZVcV&t)oK53tT0sF34J!wfvmTiq}x=Qzyo-!P7U(MI6fh)FzLk2 zE--Y@^u*}tabr}s2G>;T^#?4msV&qQZrQc8$RoYdE#nq`1JgE5xF0u2o50^{aZoKE zRuQ{xU%wrwVQ6P<;1$rZdx7!>bp{c7ut0s;>PJ8y^k1@+to%90$*|b&q*P9%Y`DDg zqtdqb6N>Iw5#v8ctgWw&A4n&iRN#>S34)vG?0_f**F;NzYEH`xw#~}mG%}d8W9$kf z521?B;Pc`%PK5~x%63?7^bhBp#{0^ZLcCC+93GGdy^M~L@u)k(Ec{#3fsfZzHC3ge zMrJh3`*=RJv0eFz=rUGJtSD-M#ITMuHA}KiXQ8N4ZkhYH?hC9zgUDF*oz|;*v@VTz zi^q550)oV)(So8KXUWj{6kHmkga_h+caMTK4kgq<+{$3;pFoj5fagtJf=Ij=6S=kq z?2L{gph+l?OTs3D4Ro8YNt7moRX2_=!0N{ftM%kHK*;>Sl($6%0YgABEo6o=T zDVf_6(Y!`o!as+>0cpeL9}(she)KyWYYaOCGEgA0w9eD) z&>}V}`N1vx5g92nYL+z(8h-%A#IM(pX~WJDX6y+aWQO zZwMHp7Z$6je=g>0j9j2Wj+|W+?l`|vOuh#sn|k^rGn_@YXnd~#4M2u?{7Y4%&+^xe zJItg?Z+0?E;~t?$|KJqNZ9kRf`X^Fd>uk-!`~}{wG?2h*dS&h&D`T{Em4H_{f+#ctEuiKf+mAc$?3we?VsBR9HZD; zHJWHBap!8^hFSd=OR?h3QtVvwZqI(aaM|Rul{te?^=!l>sL4zo%?mQ91*$Q{X9MopCejxFIvDYZd*Kr5(Lt({L1dmr zq4gYX_^sGFb(-p0%lQ^zXhbsk0jNTJ0BRbpbhj%>plGgNz#qDtt|4Od8vbR2!~ykv zY-^%g>-}6j7H}cV{weQHYw>N2K&We=T2KDG9znt{Anq$JMs)5k=SJLOD2JTXws=y7 z$0qF<7`^x28bTCHBKJ{pl?QN0V9dH89aay`Ny^*BAS<8a`e}xz@f)lg_thTZq)`M` zjj6Rjf(8s|bob4%%&QzANeHiX!BSD6J<&Gtvs(NJNU6L_Pf&Fb5Poh3zsq}Km|su} z;#KyCKIq3FSWSE$U=G`BL_n6K&k%7AgPBg_k$tPj9yLdJ)iVvQnP4YS>Sv8O?(?g! zPGebV>VQsJ<;>wHY*DU1N5J-X9wF3Bv&K8yHGHH}TkwxWcbjFwYvYb~U!SQByevtS z7qsaSQKu4$uCE!xr-*Vj)Qr;A$$)gG9ME}4YMwD7MJ-cwK9{x24&ZdCyI-`I!wWU` zW!wU?Iqs5vq|votqA5VTvG(gU7PVmZjybm;qz<;_GOvyq`UfAdb5$=0hXXi zt?l0dh3nZ!We$ctut*b}efv4Bd_p`$jkO%SL2YY<&;j(H9L-EVo*;QV(LtS}3}=*h z+X#Kk_G0*e0H}Fay?5cjz_|t_fF>wGZDjgalsB1qV;ZaUc(wbBHYHsIj0}Y%OF{Q@)vhRwgS0Suah7;iVbv34m&8Yk2!plKbH z{{tY1Z|H;FF?Zk!_A9q1uEZ?+ESpt4D5Bj-+S%ww=d70NnGdf3?B&{f zX&uqo+&1}2^?Mj!1B4px?jy(FUlzP17avRr`FvU4@)`id7<8@g-~?|q+47?zC_$d% zLg;yzRwvYuC^)rmq35=halXH?nDmc^zJpfy`-MRRZ3o&V_sB)P;_BAEf7AN-XQ%Vs z_VHhw2Jn|Jn9L}e2Jz!8J1jiQo(z+9&={JDbAJkS0$SsGuZw!sz5VvM0i-w!-K8Gx z>dCiF&&2_CKj;VwAtV-pRL7IG zHerZ zp#8YFe~6g%sEJL7YhACFNsau@;Tru;2bj0?vaP z$8K)C0eC9qk2`H)M5@Mp2SzSXDzMg0vKvl{8?|iGmEddJ9i6_ZOj=J&<+?mHJQCX8 zVyC0-I)XiJ<1L^p2+twbS-aM=cLXUPPqQ2rx6{2G5HSri5)^Z$#NdbIPX#bJRQIL)c(jiYAgZrZ<3y^Zm{ngU z(Zsg&KVW1}Up$Hq2@%zLbWAm5Fj+;OS)iv#2CGeDO~ZfL+ebpd2pOicMBfE(wRHq& zaQq5e-dMt5KT-p^IVU*{8fMKoP^!m`9Zs6Lk1Gef;OLJuPPx|!N@D&^lalUC2Z7GD z$~fYQ@cr5zN1|WPiaXX;#^RRozz_|FzxVXpd_v8O{s%juf3m$y-km!`6$|+AXBMed zm7kACqJ_wy5zz zrLR->A=n!1BPVbOqqJ|e4pGkM@!V6n8l0(CZ{7km`%|DoFh?E7c=^d${u)Dqu3kv5 z;BgiwAi3jr9E+_bm&)*{(nYa|QQj@Z=H6awTVo8deQ`Iqv+7Sq!o4*P6}+m-^51A1al~c@rwa zBG^&d756&jb;aWf&8&ECh4{`UHIGF=&(?ZTVn*4Hl1jDx_im{ekt>s*jjUz}G3}ux z@(H<15ZYq0{(>Ny{T5X@N?pfIR#?*mC_@L#wvI)Z80^VW7ER7)?mLd_#7X`xC zJtU2hxJb`DKx_B+Wh4#lZHcj{E(n(0fOo^_KQYpadFBXZ82^@SS`x=wBbck@a_>bT zZqvyEBCR*{@}9p(#l%z{p(IbUe-_MPWM%W3GF)$g#cQJi5923;?;SR1t0^+aUdwj! zz!381_svI#QoJeAx-48h-j3A`RP33l+KsMg%%tXMiC!^c*xq~1x<#csSiR>3K25n; z<*4>qvG^Blz5g%2MRWwpW@jsQT|Gk)o@NyZI+?aYLnvh(82)RRAdXd%q3K-NL z&+hcN#o{%BJWAy2-_1oOcFfFFu1)Z?V2W9H$y>%S=$N0&B%0qtR~vwN-ByVt{q5nI zb*?ee;vF!ij99xtcM}Fn+aK%xYeAt<&?uohX?`$626K_T(z*UjTk-jZm1hawm@e;% zZ`w8MM2a|bXL{XxLE2WW;F$Y)#9T$FIl7!zKHijB8F77wX*jWS?P zEjd}?|L82cBK^i!rJA%{x--kIOA+l9E_MJ1SdB*ST>EhF^oJRZpBH);-0^3!BTZm` zpIM3yyQ-<)F!$VssY1y;IA~$*ov|LlEjgD^}YRlq@vEk&_&=N^g{3FxDmgxWm`4G+e z2*{%p$iMx^9nx3TE44)O@p5hLdb|gH^&n4>Ltx>4&KBS5xJL(P*rnygAT+fUUlMgm zLBgzgFLcUi#ou!8Y+E<(w2x&yEh3KmR4@N20}+NlqbV%+)>IZ5IzKwo7X7(CAlF*e z;8}JwfuC`giTZ7)28Yh`^|iU@wr#%fFe1wYTOUPpEIy!P?H*XKtqYyoM#%i7x^_Jtx_6M%Zf z5zoftCMC}-4l{*!x6RZSQPw7DR6qVB~bgzLBz=%mAZ$jK>M0r{sp912ydN z>#+uZ^|b@{xzXU^P841j-VI25?*hudC(8~$JbLfL0{-Sgp@h+W>?vp>oqyn)@rizu z1B_U6OM90eFQpHQr{ok0r^PaF%{&DX+?7QBnBJp?GtjRJVhg%I4bjvY@f8Qa;2MEM1%!-rcr9*>{zTpqp2l&L2__ z(7E^C{Vhy6JJ)}feNiGay#H*ZVrI6xr)SKk3P{x|`NF;6oDtfn8HK{j`i;d;Eu*#O z?V|9+qflB`s4xp0I9Cc#zW09pfsbA#kl=jA?mY>#yLirAt6{7kXP}=3Gz=~3C@1zg z)_0@G#JVyT;pxGO@6Z%)P54PWn)hJ%NbE;Db?3N0oHO5gU=PRL^F(5qb8WOqS>A7! ziT_KZ0&Cj?dm0Z08d4+~twMG#KMY+lxM;lR0?3xW#0P=eAKco$DN(2xHz+y=X^BaZ zyRw{4xt-93ODvK#XQ64$+;0!GTk`!rLKishB26DE+LN#Iqa+PeLe4-WzgfL6`rT)wyc2{?OPuQltiTx~uWs*=tOoe60L+KepKPgS{|9sVPyzY=H_ds@MW`JYt zUxH)sG}(k!@;&fox=yXuwEppS%@AujcfVH7){dP0SSYazDR~x!cQ|qrvE(NHiD4}| z8#8yn0p=s=@nl>hV`L`qNaLT>AXv2kG@2K`HhQg8neF zVsto$JW4xg{Ql6?o)ES!!-L5tuzU>vZ&*eKQ6EDA{Bvl zainB|v+eJe6?1$;x34R=(gBk5(x$D%&R=5FrfE)1MZRUWoVC`+xAsgmJgSWjIpBC1 z#p<{+c_7lsv31zaD@?Xeu5m=InQpYvXeSC=nt7Iu3Yg+&F?r(1mv_e@?Rn@~JI2b3(3u^0yO+r_hb(F#I za$?^9c>o*047NZNkrsoQf_u*YK7bXWu{0>iK{3~x&y0w;)RB|P;KSD zrjQ%BZOIQF1}nLenW;j~9t0*o@A=V!-~3Zpf{r&z@A`l+1{^5kcevy*d({y)`kptd zZ8GX@H*df4GwwLTVofb5I1a?L-1~0q_S$-3p6pWY|J9|GWAAP9%VIp!(p|qOU7`PK z`Oe1Hj%(0Oe$yAb0u5)K9jF$VYovJlU#D%`MDG;iX8@q6|AU zX%}ZZkSW`@CHjEu%)s|YzfG8kgvK2}+M^w>sgdnkT4`ZVAD}I+M}MvV>qlQ;;lg#T z_g0F<54NiBc1PP?&PBU?w6XOk7nb#x$GSJH1H#u_Y!5=ALVbWwpkg&BvQ(ZseIVl7 zq-46x;9h9`hS!?gGauV~S2c%UycXOwaj9hiAg!ep;gmo?*==@ii3qsdkFT(+(zdVf zj>%9n4S_8$2aHY7Jd36u@wJ{tvgXwIfW{UW{mnM+{FUl=#a z9qNruo!>F1p{Mtjl*|(5PqDim$|7~1jlA|JSeW}Z4zea7Yb4)U3};XV0G+U;m~5_0 zm;P+7%p2L5lrGCYrn%}pH(KlL@Tq0L4@a_?oDph|FY&#=kKU6?Os%&z{Ldp*wvJ|% zdgs?}2w?B1qQ1P=HZ8_ZNIv8D{q!0R5-OG^DTw&aYF(k|dC#%))i9l9s1I%=k@m=~ zT(f#6Xgu}6SKm`C2jgOC-r!o>nLC*r^rF2irbUWlI2EI^844mmHsIAW`zC8rYl0J9IJwj3e}IO<;9tm2?O3trtur6r%un$ z{j!h~KyBue!4LWs=7CyTH{naRs@8=J+Sjv9Sc&<*HKiLny3s%xJGp8;ouW`y9tlYH v9Ce&-n1e~jyzdn|mF<}X{kSQD>5NI#p1>K_-`R$$+wc3v?Q6zYf#?4ht6}7r literal 0 HcmV?d00001 From 736878d35eef4feb1632d40b70770d0d056c3ad0 Mon Sep 17 00:00:00 2001 From: Aryan Sahay Date: Fri, 6 Oct 2023 15:03:45 +0530 Subject: [PATCH 3/3] Create Readme.md --- Web Scraping/Readme.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Web Scraping/Readme.md diff --git a/Web Scraping/Readme.md b/Web Scraping/Readme.md new file mode 100644 index 0000000..c919434 --- /dev/null +++ b/Web Scraping/Readme.md @@ -0,0 +1,13 @@ +Introduction: +Web scraping, web harvesting, or web data extraction is data scraping used for extracting data from websites using its HTML structure, In this post, I will explain basic fundaments of web scraping using python and also explore it by a live demonstration with two python libraries Beautifulsoup and requests respectively. + +What you will learn from this: +Basic understanding of web scraping +How to extract data from a website using classes and HTML tags +How to use requests module to get data +How to use Beautifulsoup + +Requirements: +python3 +requests +bs4