1 00:00:00,000 --> 00:00:03,234 >> [Speel van musiek] 2 00:00:03,234 --> 00:00:05,275 3 00:00:05,275 --> 00:00:06,400 ROBERT KRABEK: Hallo, ouens. 4 00:00:06,400 --> 00:00:09,980 My naam is Robert Krabek en Ek sal julle leer ouens 5 00:00:09,980 --> 00:00:15,470 hoe om die web krap Nokogiri, wat is 'n Ruby biblioteek, 6 00:00:15,470 --> 00:00:17,566 en kimono, wat is 'n Chrome uitbreiding. 7 00:00:17,566 --> 00:00:20,940 8 00:00:20,940 --> 00:00:25,010 >> So is daar 'n eerste paar dinge wat jy 9 00:00:25,010 --> 00:00:28,790 kan doen as Miskien het jy doen al die psets so ver 10 00:00:28,790 --> 00:00:31,170 en jou werkplek is om 'n bietjie vol. 11 00:00:31,170 --> 00:00:37,060 Ons kan eintlik net gaan en skep 'n nuwe werkplek vir jou 12 00:00:37,060 --> 00:00:41,220 om net 'n splinternuwe projek te doen. 13 00:00:41,220 --> 00:00:46,160 So as jy wil om voort te gaan werk in die CS50 sjabloon ID 14 00:00:46,160 --> 00:00:49,080 wat jy tans het, voel vry, en jy kan net 15 00:00:49,080 --> 00:00:54,700 Nokogiri installeer met CFLAGS equals-- juweel installeer nokogiri. 16 00:00:54,700 --> 00:00:56,930 Maar anders sal ek jou wys hoe om 'n nuwe een op te stel. 17 00:00:56,930 --> 00:01:01,210 En dan is dit in wese val meer opleiding wiele. 18 00:01:01,210 --> 00:01:07,120 En jy kodering asof jy net kodering in Sublime of iets. 19 00:01:07,120 --> 00:01:12,365 So as ons skuif dit oor. 20 00:01:12,365 --> 00:01:14,930 21 00:01:14,930 --> 00:01:18,690 >> So sê dit is jou huidige CS 50 ID. 22 00:01:18,690 --> 00:01:21,490 Jy kan net gaan na Cloud9 hier. 23 00:01:21,490 --> 00:01:22,725 Jy kan gaan na jou dashboard. 24 00:01:22,725 --> 00:01:26,720 25 00:01:26,720 --> 00:01:29,950 Dit moet bring blad Work. 26 00:01:29,950 --> 00:01:32,980 En dan kan jy kliek hier, skep 'n Nuwe Workspace. 27 00:01:32,980 --> 00:01:37,600 Noem jou nuwe werkplek, Miskien toets of skraap. 28 00:01:37,600 --> 00:01:42,700 En kliek hier persoonlike blad in plaas van die blad CS50 templates. 29 00:01:42,700 --> 00:01:45,155 En dan kan jy net gaan en die skep van 'n nuwe werkplek. 30 00:01:45,155 --> 00:01:48,280 >> Ek het reeds 'n werkspasie hier. 31 00:01:48,280 --> 00:01:50,640 So ons sal moet werk met hierdie. 32 00:01:50,640 --> 00:01:55,380 En as jy 'n nuwe geskep werkspasie so met die blad Custom, 33 00:01:55,380 --> 00:02:04,560 jy kan net tik juweel installeer nokogiri, wat nie hier gaan. 34 00:02:04,560 --> 00:02:06,230 OK, dit is 'n bietjie gevries. 35 00:02:06,230 --> 00:02:08,979 Maar jy kan tik juweel installeer nokogiri. 36 00:02:08,979 --> 00:02:15,970 En dat almal moet wees dat daar is om die installasie. 37 00:02:15,970 --> 00:02:20,590 >> Soos ek gesê het, as jy nog werk in jou CS50 sjabloon ID, 38 00:02:20,590 --> 00:02:30,270 jy hoef net te tik CFLAGS gelyk juweel installeer nokogiri. 39 00:02:30,270 --> 00:02:33,130 En ek het reeds geïnstalleer dit hier so sal Ek dit nie doen nie. 40 00:02:33,130 --> 00:02:38,500 Maar vir diegene volgende saam, voel vry om dit te doen. 41 00:02:38,500 --> 00:02:46,000 >> So as jy het jou Nokogiri werkspasie of biblioteek geïnstalleer is, 42 00:02:46,000 --> 00:02:49,500 Ek gaan vir jou 'n bietjie van 'n crash kursus in Ruby sintaksis 43 00:02:49,500 --> 00:02:53,380 omdat Nokogiri is 'n Ruby biblioteek. 44 00:02:53,380 --> 00:03:03,710 Sodat jy nodig het om te weet 'n paar basiese Ruby sintaksis vir die werk met Nokogiri. 45 00:03:03,710 --> 00:03:08,750 So 'n paar basiese verskille van wat jy gebruik om te 46 00:03:08,750 --> 00:03:13,370 miskien as jy het gewerk dusver in net C en PHP, 47 00:03:13,370 --> 00:03:16,010 verklaar u veranderlikes met geen tipe. 48 00:03:16,010 --> 00:03:19,720 Jy hoef nie kommapunte gebruik, wat is 'n soort van 'n verligting. 49 00:03:19,720 --> 00:03:25,480 Daar is geen hakies nou sowat vir of terwyl loops, byvoorbeeld. 50 00:03:25,480 --> 00:03:29,460 Jy moet net 'n blok van die kode, en dan kan jy die einde aan die einde van daardie. 51 00:03:29,460 --> 00:03:32,380 Daar is geen plus plus of minus minus, so net 52 00:03:32,380 --> 00:03:36,180 weet dat wanneer jy doen vir loops, 53 00:03:36,180 --> 00:03:38,620 net plus gelykes en minus gelyk. 54 00:03:38,620 --> 00:03:43,310 En in plaas van hash sluit, jy gebruik benodig en dan 55 00:03:43,310 --> 00:03:47,755 watter biblioteek probeer om te laai in jou program. 56 00:03:47,755 --> 00:03:51,610 57 00:03:51,610 --> 00:03:53,430 >> Ruby is nie 'n saamgestel taal. 58 00:03:53,430 --> 00:03:55,550 So dis 'n ander verligting. 59 00:03:55,550 --> 00:03:59,350 Dit is meer soortgelyk aan PHP waar dit is 'n geïnterpreteer taal. 60 00:03:59,350 --> 00:04:03,570 Jy kan enige Ruby script loop wat jy skryf met Ruby gevolg 61 00:04:03,570 --> 00:04:07,380 deur die naam van jou script of program. 62 00:04:07,380 --> 00:04:13,000 Om aan te dui dat dit 'n Ruby program, jy net eindig met .rb plaas van .c. 63 00:04:13,000 --> 00:04:17,440 En daar is veranderlike grootte skikkings in Ruby, 64 00:04:17,440 --> 00:04:23,200 wat is super gerieflik wanneer jy skraap en miskien wil voeg 65 00:04:23,200 --> 00:04:26,090 data wat jy geskraap in 'n skikking. 66 00:04:26,090 --> 00:04:31,960 Jy hoef nie na 'n nuwe reeks malloc en kopieer die ou verskeidenheid in die nuwe reeks. 67 00:04:31,960 --> 00:04:36,150 Jy kan net voeg met Die twee pyl tekens. 68 00:04:36,150 --> 00:04:39,820 En daar is geen karakters, is daar net enkele brief snare. 69 00:04:39,820 --> 00:04:44,760 Sodat moet 'n bietjie makliker te maak. 70 00:04:44,760 --> 00:04:50,130 >> So ons sal net 'n paar te gee jou voorbeelde van 'n paar basiese Ruby sintaksis. 71 00:04:50,130 --> 00:04:57,100 So hier kan jy sien dat in plaas van die streep streep om kommentaar te lewer in Ruby, 72 00:04:57,100 --> 00:04:58,740 jy net die gebruik van die pond teken. 73 00:04:58,740 --> 00:05:04,990 En veranderlike verklaring, het jy tik net die veranderlike gelykes 74 00:05:04,990 --> 00:05:07,971 alles wat jy wil hê dat die veranderlike te wees. 75 00:05:07,971 --> 00:05:09,220 Hulle kan snare. 76 00:05:09,220 --> 00:05:14,120 Jy kan skikking, het wat jy vul met waardes. 77 00:05:14,120 --> 00:05:17,240 wan en afdrukke is soortgelyk. 78 00:05:17,240 --> 00:05:20,110 Vir ons doeleindes, die enigste verskil is regtig 79 00:05:20,110 --> 00:05:25,500 dit plaas, wat staan ​​vir wan, net sit 'n nuwe lyn 80 00:05:25,500 --> 00:05:27,440 karakter op alles wat jy druk. 81 00:05:27,440 --> 00:05:30,980 >> So as ons 'n klein demonstrasie hier 82 00:05:30,980 --> 00:05:41,800 ons kan hardloop hierdie with-- open 'n nuwe terminale. 83 00:05:41,800 --> 00:05:46,020 Jy kan al hierdie te sien lêers wat in my terminale. 84 00:05:46,020 --> 00:05:50,960 En as ek net loop Ruby, Ruby intro.rb dit 85 00:05:50,960 --> 00:05:53,530 sit uit vyf Hallo Mather, Quincy, Carrier. 86 00:05:53,530 --> 00:05:54,410 Adams. 87 00:05:54,410 --> 00:05:59,295 So dit is al wat daar is om te verklaar skikkings. 88 00:05:59,295 --> 00:06:01,670 GEHOOR: Robert, kan jy maak jou font 'n bietjie groter? 89 00:06:01,670 --> 00:06:02,461 ROBERT KRABEK: Ja. 90 00:06:02,461 --> 00:06:05,370 91 00:06:05,370 --> 00:06:12,280 En ek kan in zoom, want jy kan nie zoom om terminale fonts blykbaar. 92 00:06:12,280 --> 00:06:18,790 93 00:06:18,790 --> 00:06:24,630 >> So dit is hoe jy druk veranderlikes om jou terminale. 94 00:06:24,630 --> 00:06:28,820 Jy kan ook gebruik veranderlikes in 'n string. 95 00:06:28,820 --> 00:06:33,720 So onlangs in PHP, jy dalk geleer het 96 00:06:33,720 --> 00:06:37,340 dat daar string interpolasie. 97 00:06:37,340 --> 00:06:43,830 So as jy 'n blik hier neem, as ek verklaar drie veranderlikes, naam, biblioteek, 98 00:06:43,830 --> 00:06:49,700 en taal, en ek wan, ek skryf 'n string, hello my naam is. 99 00:06:49,700 --> 00:06:54,190 En dan in plaas van die PHP weergawe van string interpolasie 100 00:06:54,190 --> 00:06:58,960 wat lyk 'n bietjie meer soos hierdie, jy het 'n pond teken, en dan 101 00:06:58,960 --> 00:07:01,220 'n krullerige brace, en dan die naam van die veranderlike. 102 00:07:01,220 --> 00:07:07,350 En dit is hoe jy wil druk, sê Wat ook al die veranderlike naam is. 103 00:07:07,350 --> 00:07:10,140 >> En dan kan jy ook koppel snare. 104 00:07:10,140 --> 00:07:12,890 Ruby maak dit super maklik om met die plus teken. 105 00:07:12,890 --> 00:07:16,110 Jy moet net een string aan die linkerkant plus 'n veranderlike 106 00:07:16,110 --> 00:07:18,860 of 'n ander string plus 'n string. 107 00:07:18,860 --> 00:07:23,500 So as ek druk dit uit, dit moet net sê Hallo, my naam is Robert. 108 00:07:23,500 --> 00:07:27,340 Ek sal julle leer nokogiri in Ruby. 109 00:07:27,340 --> 00:07:35,370 >> En laat ons net bevestig dat inderdaad die case-- Ruby intro. 110 00:07:35,370 --> 00:07:36,480 Hallo, my naam is Robert. 111 00:07:36,480 --> 00:07:40,160 Ek sal julle leer nokogiri in Ruby. 112 00:07:40,160 --> 00:07:45,600 >> Beweeg op, as anders state, dit is 'n bietjie anders 113 00:07:45,600 --> 00:07:49,800 van wat jy kan gebruik word om as jy het gewerk in C. 114 00:07:49,800 --> 00:07:53,200 Jy hoef nie die hakies nodig het. 115 00:07:53,200 --> 00:07:55,220 Jy hoef nie die krulhakies nodig. 116 00:07:55,220 --> 00:08:00,170 En in plaas van anders as, dit is 'n aaneen elsif. 117 00:08:00,170 --> 00:08:07,260 So hier, as ek verklaar x up hier, soos ons kan sien, is nog steeds x 5. 118 00:08:07,260 --> 00:08:11,100 So as x is minder as 3, sal dit klein te sit. 119 00:08:11,100 --> 00:08:14,030 As dit is minder as 7, medium, anders groot. 120 00:08:14,030 --> 00:08:17,340 So 5 is 'n medium-nommer. 121 00:08:17,340 --> 00:08:22,270 En ek eindig hierdie blok van die kode met die einde. 122 00:08:22,270 --> 00:08:24,920 >> Hier is my lus. 123 00:08:24,920 --> 00:08:28,240 En dit is ook sintaksis effens anders. 124 00:08:28,240 --> 00:08:33,500 Die 0 tot vyf net in wese is verklaar 'n skikkings van 0-5. 125 00:08:33,500 --> 00:08:36,120 So is daar vyf slots in die skikking. 126 00:08:36,120 --> 00:08:40,500 En dan vir elke slot in daardie skikking, sal ek die verhoog i. 127 00:08:40,500 --> 00:08:46,080 So moet die druk 0-5 of 0-4. 128 00:08:46,080 --> 00:08:49,630 En dit moet medium druk. 129 00:08:49,630 --> 00:08:51,370 >> En ek sal net bles deur. 130 00:08:51,370 --> 00:08:54,466 Julle sal toegang hê hierdie kode later. 131 00:08:54,466 --> 00:08:55,965 So julle ouens kan dit self te hardloop. 132 00:08:55,965 --> 00:09:02,090 133 00:09:02,090 --> 00:09:06,620 >> So dit is jou basiese while lus. 134 00:09:06,620 --> 00:09:12,230 Dit sal net die druk van j, die verhoog deur 1 tot ons getref 5. 135 00:09:12,230 --> 00:09:18,320 >> Super vinnige Ruby crash kursus oor hoe om 'n funksie te skryf. 136 00:09:18,320 --> 00:09:24,460 In plaas van, sê, int faktoriaal nommer, ons het net def. 137 00:09:24,460 --> 00:09:28,450 En in wese is jy definisie van 'n funksie hier. 138 00:09:28,450 --> 00:09:30,600 Dit gaan die wees naam van die funksie, 139 00:09:30,600 --> 00:09:34,280 en dit is 'n veranderlikes wat jy wil slaag in die funksie. 140 00:09:34,280 --> 00:09:36,760 Jy kan indien state binne te hê. 141 00:09:36,760 --> 00:09:38,030 Jy kan terugkeer. 142 00:09:38,030 --> 00:09:42,620 In hierdie geval, ons is definisie van 'n rekursief 143 00:09:42,620 --> 00:09:45,000 geïmplementeer faktoriaal funksie. 144 00:09:45,000 --> 00:09:48,660 Sodat ons net noem funksies Ruby soos hierdie. 145 00:09:48,660 --> 00:09:54,700 >> So as ek hierdie, ek omskryf kan faktoriaal noem, slaag in 3, 146 00:09:54,700 --> 00:09:59,700 en dan 3 sal die aantal veranderlike wat ek kan gebruik binne die funksie. 147 00:09:59,700 --> 00:10:08,010 En dit is net die to_s draai die waarde van faktoriaal teruggaan na 'n string. 148 00:10:08,010 --> 00:10:10,760 Anders sal dit gooi 'n fout te sê o, ek 149 00:10:10,760 --> 00:10:13,230 kan 'n string-- nie druk want as jy onthou, 150 00:10:13,230 --> 00:10:18,230 sit 'is string-- sit, want dit faktoriaal het 'n aantal teruggekeer. 151 00:10:18,230 --> 00:10:21,850 So kan ons skakel wat om 'n string soos so. 152 00:10:21,850 --> 00:10:27,856 En omgekeerd, kan jy ook omskep 'n string na 'n heelgetal met to_i. 153 00:10:27,856 --> 00:10:32,650 >> So maak alles super eenvoudige, as ek dit net nie kommentaar lewer nie, te red 154 00:10:32,650 --> 00:10:36,250 en loop die faktoriaal funksie. 155 00:10:36,250 --> 00:10:39,850 Ons moet in staat wees om te sien dat faktoriaal van 3 is 6. 156 00:10:39,850 --> 00:10:42,790 En dit is inderdaad waar. 157 00:10:42,790 --> 00:10:46,160 >> So dit is jou crash kursus in Ruby. 158 00:10:46,160 --> 00:10:53,550 En nou dat jy weet Ruby, ons kan gaan om die basiese Nokogiri skraap opgestel. 159 00:10:53,550 --> 00:10:58,190 Wese al wat jy hoef te doen is, Ruby, vereis dat die biblioteke. 160 00:10:58,190 --> 00:11:04,390 En vir ons doeleindes sal ons in die gebruik van die biblioteek OpenURI asook Nokogiri. 161 00:11:04,390 --> 00:11:07,870 En dan wat jy do-- en dit sal gee jou die sintaksis vir this-- 162 00:11:07,870 --> 00:11:16,010 is jy die URL veel oop as jy sou in 'n cURL versoek, wat staan ​​vir C URL. 163 00:11:16,010 --> 00:11:20,330 >> Sodat jy die URL van te neem die betrokke webwerf. 164 00:11:20,330 --> 00:11:22,030 Jy stoor dit in 'n veranderlike. 165 00:11:22,030 --> 00:11:27,400 En dan kan jy soek deur daardie veranderlike vir unieke HTML tags gebruik van 166 00:11:27,400 --> 00:11:30,590 die Css opdrag. 167 00:11:30,590 --> 00:11:34,360 En dan kan jy die uitset inhoud te waar jy wil. 168 00:11:34,360 --> 00:11:35,720 Jy kan begin in 'n databasis. 169 00:11:35,720 --> 00:11:42,040 Jy kan uitvoer in 'n lêer of selfs net druk dit op die skerm. 170 00:11:42,040 --> 00:11:47,290 >> So sal ons jou 'n basiese skraper. 171 00:11:47,290 --> 00:11:52,570 So hier kan jy sien ons het vereis nokogiri vereis oop uri. 172 00:11:52,570 --> 00:11:57,150 Jou basiese stel, laat se noem dit dokument of doc, 173 00:11:57,150 --> 00:12:07,780 gelyk Nokogiri :: HTML oop, wat is die opdrag deur die OpenURI aan ons verskaf 174 00:12:07,780 --> 00:12:08,920 biblioteek. 175 00:12:08,920 --> 00:12:14,000 En ons sal soek, vir die van julle wat in die quad mag woon, 176 00:12:14,000 --> 00:12:21,270 vir bikes wat in Boston gelys op die fiets artikel Boston Craigslist 177 00:12:21,270 --> 00:12:22,020 werf. 178 00:12:22,020 --> 00:12:26,460 >> So as jy nie vertroud is met krul, sal ek net 179 00:12:26,460 --> 00:12:28,930 wys jou ware vinnig wat cURL sal doen. 180 00:12:28,930 --> 00:12:38,350 As ek wou al die URL te kry van die Craigslist site, as ek tik krul, 181 00:12:38,350 --> 00:12:44,950 dit is net dumps al die URL uit die Craigslist fiets webwerf 182 00:12:44,950 --> 00:12:46,720 op my terminale. 183 00:12:46,720 --> 00:12:49,130 Dit is nie besonder nuttig omdat ek dit nie doen nie 184 00:12:49,130 --> 00:12:53,330 wil die hand deur te gaan en vind die ding wat ek soek. 185 00:12:53,330 --> 00:13:01,590 Maar net sodat jy kan sien dat ek eintlik 186 00:13:01,590 --> 00:13:13,966 gebruik van die regte kode, as jy kyk by die URL vir Craigslist in bikes-- 187 00:13:13,966 --> 00:13:17,460 vir een of ander rede is dit nie gevind nie. 188 00:13:17,460 --> 00:13:20,340 As jy kyk na hierdie bladsy en jy kyk na die URL, 189 00:13:20,340 --> 00:13:23,970 dit moet identies aan die wees cURL versoek dat ek net stuur nie. 190 00:13:23,970 --> 00:13:27,700 En inderdaad, dit is wat die wese gestoor in die doc veranderlike. 191 00:13:27,700 --> 00:13:36,540 >> So wanneer jy terug gaan na ons kode, ons kan dan werk op hierdie dokument veranderlike 192 00:13:36,540 --> 00:13:40,660 deur die gebruik van Css. 193 00:13:40,660 --> 00:13:49,240 So sê Ek wou al kry die etikette wat span.txt is, 194 00:13:49,240 --> 00:13:51,740 en al die n tags binne daardie tag. 195 00:13:51,740 --> 00:13:56,150 En hoekom kan ons wil doen dit, ek hoor jy roep? 196 00:13:56,150 --> 00:14:02,920 >> As ons Inspekteer Element, dit 'n gee uiteensetting van hoe die URL saamgestel is. 197 00:14:02,920 --> 00:14:06,200 As ek rol af deur hier kan jy sien 198 00:14:06,200 --> 00:14:08,770 wat elkeen van hierdie verskillende elemente verteenwoordig. 199 00:14:08,770 --> 00:14:13,410 So miskien is ek wil toegang hierdie spesifieke element. 200 00:14:13,410 --> 00:14:16,820 So ek gebruik Chrome ontwikkelaar gereedskap te inspekteer element. 201 00:14:16,820 --> 00:14:22,970 Ek kan hier neer te sien dat dit is 'n 'n tag binne 'n span 202 00:14:22,970 --> 00:14:26,230 merk met 'n klas van txt. 203 00:14:26,230 --> 00:14:29,610 >> So dit kry ons eerste operasie wat 204 00:14:29,610 --> 00:14:37,330 is doc.css span, wat is die tag wat Ek soek in al hierdie URL. 205 00:14:37,330 --> 00:14:43,650 En dan bedryf txt baie soos CSS doen wanneer jy net wil skryf CSS 206 00:14:43,650 --> 00:14:49,630 in jou HTML-lêers deur spesifiseer 'n klas. 207 00:14:49,630 --> 00:14:57,980 So hierdie spesifieke operateur sal spesifiseer 'n span tag met die klas van txt. 208 00:14:57,980 --> 00:15:02,800 En dan as ek 'n ruimte te verlaat, dit sal gaan dan binne daardie tag 209 00:15:02,800 --> 00:15:05,170 en vind dan 'n 'n tag binne daardie. 210 00:15:05,170 --> 00:15:10,750 >> So as ek dit sit net om die terminale, sou ek 211 00:15:10,750 --> 00:15:21,630 in staat wees om alles te sien in wese wat binne hierdie span van die klas txt. 212 00:15:21,630 --> 00:15:22,890 So ons sal gee dat 'n go. 213 00:15:22,890 --> 00:15:25,870 214 00:15:25,870 --> 00:15:27,756 Ruby craigslist-skraper. 215 00:15:27,756 --> 00:15:31,850 216 00:15:31,850 --> 00:15:37,250 En inderdaad dit gee ons al hierdie tags van die verskillende aanbiedings wat 217 00:15:37,250 --> 00:15:40,400 op die Craigslist bladsy. 218 00:15:40,400 --> 00:15:45,670 >> So as ons terug te gaan, kan ons hierdie draai in iets 'n bietjie meer nuttig. 219 00:15:45,670 --> 00:15:51,050 Miskien wil ons net die skakels. 220 00:15:51,050 --> 00:15:58,790 Want binne hierdie merker, sal ek ook het die hyperlink van die pad 221 00:15:58,790 --> 00:16:00,590 dat hierdie bladsy gaan. 222 00:16:00,590 --> 00:16:09,100 So as jy kyk na hierdie kode hier, wat ek sal doen, is in plaas van Css, 223 00:16:09,100 --> 00:16:12,380 Ek kan gaan at_css. 224 00:16:12,380 --> 00:16:16,820 En dit sal net die eerste element van al hierdie dinge. 225 00:16:16,820 --> 00:16:20,890 So as ek dit doen in die Ek het net-kode voorheen gedemonstreer, 226 00:16:20,890 --> 00:16:23,800 in plaas van die terugkeer van almal van hierdie, sou dit net 227 00:16:23,800 --> 00:16:26,850 die eerste een van die terugkeer. 228 00:16:26,850 --> 00:16:31,310 So dit is hoe die at_css operateur werk. 229 00:16:31,310 --> 00:16:39,460 >> So wil ons die stoor pad al van die eerste n tag. 230 00:16:39,460 --> 00:16:47,430 En omdat 'n ons sal a-- gee so ons is nog steeds gaan Css gebruik. 231 00:16:47,430 --> 00:16:53,830 Maar omdat dit gaan om te gee ons terug 'n hele verskeidenheid van etikette, 232 00:16:53,830 --> 00:16:55,710 ons gaan toegang die eerste element. 233 00:16:55,710 --> 00:17:01,700 So, dit is 'n ander manier wat jy kan toegang tot enige spesifieke element as jy 234 00:17:01,700 --> 00:17:04,810 het 'n verskeidenheid van elemente wat teruggekeer het, 235 00:17:04,810 --> 00:17:11,930 omdat jy enigiets kan hanteer wat Css opbrengste as 'n skikking, wese. 236 00:17:11,930 --> 00:17:16,880 En dan gaan ons die toegang hiperteks verwysing kenmerk van hierdie. 237 00:17:16,880 --> 00:17:24,810 >> So as jy 'n blik, as jy kyk hier baie naby, 238 00:17:24,810 --> 00:17:28,270 as jy net in wese kyk na die URL bar, 239 00:17:28,270 --> 00:17:33,880 dit is die pad wat jy gaan word skraap. 240 00:17:33,880 --> 00:17:41,565 So as ons net dit weer hardloop, en maak seker ons het dit gered. 241 00:17:41,565 --> 00:17:47,040 242 00:17:47,040 --> 00:17:48,300 Jy kan by die huis te gaan. 243 00:17:48,300 --> 00:17:51,430 Dit pas eintlik met hierdie skakel. 244 00:17:51,430 --> 00:17:55,950 >> So hoekom kan ons wil om dit te gebruik? 245 00:17:55,950 --> 00:17:57,870 As jy wil krap die bladsy en dit het 246 00:17:57,870 --> 00:18:00,270 n bladsy met skakels soos Craigslist doen, moet jy 247 00:18:00,270 --> 00:18:03,210 dalk wil gaan dan in elk van die skakels 248 00:18:03,210 --> 00:18:05,120 en dan skraap die inhoud van dit wat 249 00:18:05,120 --> 00:18:08,520 is presies wat ons gaan doen. 250 00:18:08,520 --> 00:18:11,660 >> So wanneer jy die pad as 'n veranderlike, ek nie meer werklik 251 00:18:11,660 --> 00:18:13,200 omgee druk dit uit. 252 00:18:13,200 --> 00:18:15,420 Ek het net nodig om dit te stoor as 'n veranderlike. 253 00:18:15,420 --> 00:18:20,980 En dan kan ek 'n ander toegang page dieselfde manier wat ek toegang 254 00:18:20,980 --> 00:18:22,260 doc in die eerste plek. 255 00:18:22,260 --> 00:18:25,920 Behalwe met die URL, ons gaan string interpolasie gebruik 256 00:18:25,920 --> 00:18:29,180 soos ek was in die beskrywing Ruby vroeër by te voeg 257 00:18:29,180 --> 00:18:32,010 die pad na die einde van die wortel. 258 00:18:32,010 --> 00:18:38,970 >> So, wat dit gaan doen, is dit gaan oor die pad te sit 259 00:18:38,970 --> 00:18:42,360 dat ek voorheen geskraap en draai dan 260 00:18:42,360 --> 00:18:49,580 in 'n nuwe item, wat jy wil om noem it-- first_listing, byvoorbeeld. 261 00:18:49,580 --> 00:18:52,900 Maar ek gaan om te verlaat dit op 'n item vir nou, 262 00:18:52,900 --> 00:18:55,420 want dit is wat ek hier gebruik nie. 263 00:18:55,420 --> 00:19:02,900 >> So sê Ek wou die beskrywing kry van die eerste plaas in Craigslist. 264 00:19:02,900 --> 00:19:04,740 So sou ek hier neer gaan. 265 00:19:04,740 --> 00:19:10,660 Ek sou klik op Inspekteer Element weer, want dit is die beskrywing. 266 00:19:10,660 --> 00:19:14,350 Ek sal hier neer gaan kyk As ek kan vind hoe ek kan 267 00:19:14,350 --> 00:19:16,530 in staat wees om te soek na hierdie unieke tag. 268 00:19:16,530 --> 00:19:19,530 En in hierdie geval, dit het 'n ID, wat lei ons 269 00:19:19,530 --> 00:19:26,810 na ons volgende manier van soek vir tags, wat met 'n hashtag. 270 00:19:26,810 --> 00:19:30,670 >> So vir klasse, jy kan gebruik die dot operateur. 271 00:19:30,670 --> 00:19:38,610 So txt is spesifiseer 'n klas van txt, terwyl die hash spesifiseer 'n ID. 272 00:19:38,610 --> 00:19:43,720 So in hierdie geval, die merker is artikel, en die ID is postingbody. 273 00:19:43,720 --> 00:19:47,780 >> So dit gaan en vind die first-- omdat ons 274 00:19:47,780 --> 00:19:51,200 gebruik van at_css-- dit gaan en vind die eerste element wat 275 00:19:51,200 --> 00:19:57,180 kom met die etiket van artikel en die ID van postingbody. 276 00:19:57,180 --> 00:20:02,636 En dan kan jy toegang tot die teks element van daardie item teruggekeer met .text. 277 00:20:02,636 --> 00:20:06,230 En dan kan ons slaan wat in die beskrywing. 278 00:20:06,230 --> 00:20:09,370 >> So nou dat ons 'n veranderlike beskrywing, 279 00:20:09,370 --> 00:20:14,850 ons in staat kan wees om te doen, sê, lêer I / O. So lêer I / O in Ruby 280 00:20:14,850 --> 00:20:21,310 is baie soortgelyk na 'n lêer I / O in C waar ons 'n lêer oop te maak. 281 00:20:21,310 --> 00:20:23,260 Ons kan skryf. 282 00:20:23,260 --> 00:20:25,060 En dan sal ons die lêer te sluit. 283 00:20:25,060 --> 00:20:29,660 >> So hier, ons is maar net die noem van die lêer, sommige arbitrêre veranderlike. 284 00:20:29,660 --> 00:20:33,120 Ons kon ook net sit dit hier. 285 00:20:33,120 --> 00:20:39,630 Ons het 'n veranderlike wat ons stoor die oop lêer as met File.open. 286 00:20:39,630 --> 00:20:46,370 En ons skryf hierdie lêer, sodat ons maak dit met die w operateur. 287 00:20:46,370 --> 00:20:54,280 En dan het ons string na die lêer met die .puts operateur. 288 00:20:54,280 --> 00:20:58,310 En dan het ons die veranderlike wat ons wil skryf na die lêer binne daardie. 289 00:20:58,310 --> 00:21:00,200 En dan het ons net maak die lêer. 290 00:21:00,200 --> 00:21:04,000 >> So as ons gaan voort en hardloop hierdie, dit moet 'n dokument 291 00:21:04,000 --> 00:21:10,840 met description.txt wat sal het hierdie beskrywing in dit. 292 00:21:10,840 --> 00:21:14,015 So as ek hardloop it-- no. 293 00:21:14,015 --> 00:21:17,520 294 00:21:17,520 --> 00:21:23,330 Dit het 'n teks lêer met, hopelik, dieselfde ding. 295 00:21:23,330 --> 00:21:25,850 296 00:21:25,850 --> 00:21:33,290 So is daar dalk 'n nuwe plaas gewees wat se kom terwyl ek het gepraat. 297 00:21:33,290 --> 00:21:36,580 En inderdaad is dit lyk asof daar is. 298 00:21:36,580 --> 00:21:43,380 So as ons na hierdie klassieke fiets, 1962-1966, wat blyk te pas. 299 00:21:43,380 --> 00:21:45,620 En daar gaan jy. 300 00:21:45,620 --> 00:21:51,250 >> So wat is die mees basiese funksionaliteit van skraap. 301 00:21:51,250 --> 00:21:57,510 Ons kon plaas van het net skryf om hierdie lêer, 302 00:21:57,510 --> 00:21:59,930 kan ons dinge toe te voeg tot 'n skikking. 303 00:21:59,930 --> 00:22:03,770 So as ek verklaar drie skikkings, titel, prys, en beskrywing. 304 00:22:03,770 --> 00:22:06,310 305 00:22:06,310 --> 00:22:13,790 En ons bedryf nou op die doc item. 306 00:22:13,790 --> 00:22:16,940 Ons kan deur te gaan en vind al die span.txt. 307 00:22:16,940 --> 00:22:21,710 En onthou, hierdie terugkeer 'n skikking van al die items wat dit vind. 308 00:22:21,710 --> 00:22:27,300 En dan in Ruby, jy kan net gebruik .each om Itereer deur elke item 309 00:22:27,300 --> 00:22:28,410 van die skikking. 310 00:22:28,410 --> 00:22:31,330 En dan vir elke item, Ek gaan net om dit te noem 311 00:22:31,330 --> 00:22:34,620 'n skakel, want dit is wese wat dit is. 312 00:22:34,620 --> 00:22:46,830 >> So as ek elke link.css dot a.hdrlnk, Dit is eintlik gaan om die skakel 313 00:22:46,830 --> 00:22:58,280 en vind binne 'n ander wat verwys HTML element en die ooreenstemmende klas. 314 00:22:58,280 --> 00:23:04,990 So as ons onthou wat dit was die span.txt, 315 00:23:04,990 --> 00:23:13,160 kan jy See-laat my net terug te gaan werklike quick-- binne span.txt 316 00:23:13,160 --> 00:23:17,490 ons het 'n baie ander klasse. 317 00:23:17,490 --> 00:23:27,180 So binnekant span.txt, is ons op soek vir 'n 'n tag met 'n klas hdrlnk. 318 00:23:27,180 --> 00:23:29,890 So laat my vind net dat vir julle ware vinnig. 319 00:23:29,890 --> 00:23:37,390 320 00:23:37,390 --> 00:23:42,850 >> So jy hier kan sien, is dit 'n 'n tag dit is in die span van die klas txt 321 00:23:42,850 --> 00:23:44,920 wat die klas hdrlnk. 322 00:23:44,920 --> 00:23:47,610 En dit is inderdaad wat ons probeer om te kry. 323 00:23:47,610 --> 00:23:54,680 >> So ons probeer nou al te stoor van die skakels in die titel. 324 00:23:54,680 --> 00:23:59,545 En dan gaan ons om te druk uit elk van die skakels. 325 00:23:59,545 --> 00:24:00,360 Nee jammer. 326 00:24:00,360 --> 00:24:04,530 Ons gaan uit te druk die prys van elkeen van daardie. 327 00:24:04,530 --> 00:24:09,350 So laat loop dit regtig vinnige en sien wat dit doen. 328 00:24:09,350 --> 00:24:14,680 329 00:24:14,680 --> 00:24:17,720 >> So dit net basies het deur elke van die skakels 330 00:24:17,720 --> 00:24:27,310 op sy beurt, verkry die tag in die vraag, en dan trek die prys. 331 00:24:27,310 --> 00:24:33,910 En dit het gedoen, want na jy alles in die titel, 332 00:24:33,910 --> 00:24:37,260 Ons het nou net die titel gestoor daar. 333 00:24:37,260 --> 00:24:40,180 Ons het nou net die skakel gestoor binne die skikking titel. 334 00:24:40,180 --> 00:24:47,720 En in hierdie lus operasie, waar in plaas van gaan na a.hdrlnk, 335 00:24:47,720 --> 00:24:50,490 Ons is op soek na 'n span.price. 336 00:24:50,490 --> 00:24:56,500 So as ek kan net regtig vinnig te vind die prys, as jy die element inspekteer, 337 00:24:56,500 --> 00:25:00,610 sal jy sien dat dit 'n span met die klas van die prys. 338 00:25:00,610 --> 00:25:04,670 En dit is in wese hoe ons kry die prys daar. 339 00:25:04,670 --> 00:25:10,040 >> So wat is die werklik basiese geval van skraap. 340 00:25:10,040 --> 00:25:13,550 Dit is hoe jy kry al die elemente op 'n bladsy 341 00:25:13,550 --> 00:25:16,510 dat, sê, jy weet reeds die URL van. 342 00:25:16,510 --> 00:25:21,050 >> So as ons wil 'n te kry bietjie meer in diepte, 343 00:25:21,050 --> 00:25:23,950 kan ons bladsye binne bladsye skraap. 344 00:25:23,950 --> 00:25:28,480 En vir hierdie voorbeeld, sal ek wees om 'n uitdruk CSV. 345 00:25:28,480 --> 00:25:39,510 So ek wat csv hier omdat Ruby nie, binne die self, 346 00:25:39,510 --> 00:25:42,350 het die funksie net uitset CSV lêers. 347 00:25:42,350 --> 00:25:45,030 So dit is super maklik. 348 00:25:45,030 --> 00:25:48,710 Laat my net te gaan na die volgende. 349 00:25:48,710 --> 00:25:51,640 350 00:25:51,640 --> 00:25:57,170 Ons bedek lêer I / O. So dit is soortgelyk aan hoe dit is in C. 351 00:25:57,170 --> 00:26:00,870 En voor ons na kimono, Ek sal net wys jy regtig 'n vinnige hoe 352 00:26:00,870 --> 00:26:02,790 om terreine binne visier skraap. 353 00:26:02,790 --> 00:26:10,040 >> So het ons reeds geleer hoe om skikkings te verklaar in Ruby. 354 00:26:10,040 --> 00:26:13,280 So ek net waarby 'n n klomp van die arbitrêre skikkings 355 00:26:13,280 --> 00:26:16,310 dat ek sal stoor data in. 356 00:26:16,310 --> 00:26:20,680 doc bedryf op dieselfde manier soos dit gedoen het in die vorige lêer. 357 00:26:20,680 --> 00:26:23,580 Ons gaan in, vind elk van die span.txt se. 358 00:26:23,580 --> 00:26:25,040 Ons weet reeds dat. 359 00:26:25,040 --> 00:26:32,130 Dit is die houer waarin elke skakel het al die data wat ons wil hê. 360 00:26:32,130 --> 00:26:40,800 >> So hier wat ons doen is vir elke skakel van span class txt, ons gaan in 361 00:26:40,800 --> 00:26:45,720 en ons is die vind van die 'n tag, vind die eerste element van daardie. 362 00:26:45,720 --> 00:26:49,937 Onthou, Css terug 'n skikking, sodat jy kan nie net toegang tot dit soos dit is. 363 00:26:49,937 --> 00:26:51,520 Ons gaan die eerste element te vind. 364 00:26:51,520 --> 00:26:56,430 Selfs al is dit 'n verskeidenheid van een item, jy het hierdie sintaksis te gebruik, 365 00:26:56,430 --> 00:26:58,800 en dan trek uit die href kenmerk. 366 00:26:58,800 --> 00:27:01,800 >> So ons het hierdie vroeër. 367 00:27:01,800 --> 00:27:04,440 Sodat hierdie moet vertroud te kyk. 368 00:27:04,440 --> 00:27:14,330 En so nou het ons 'n skikking genoem paaie van almal van ons skakels 369 00:27:14,330 --> 00:27:16,590 dat ons gaan om te wil gebruik. 370 00:27:16,590 --> 00:27:21,350 So as ons hierdie reeks van alle van die paaie wat ons wil gebruik, 371 00:27:21,350 --> 00:27:26,840 Ons kan dan 'n item vir elke te skep van daardie bladsye wanneer ons oop bladsy. 372 00:27:26,840 --> 00:27:31,150 So as ons het ook op die sintaksis voor, waar 373 00:27:31,150 --> 00:27:37,450 doen string interpolasie met die pad hier, so die sintaksis is net vir pad. 374 00:27:37,450 --> 00:27:41,450 En ek kon dit noem veranderlike enige arbitrêre naam. 375 00:27:41,450 --> 00:27:43,070 >> Dit is die belangrike een. 376 00:27:43,070 --> 00:27:46,650 Dit is die skikking dat jy wees om toegang tot elke element. 377 00:27:46,650 --> 00:27:52,400 Maar as jy sê vir pad in paaie, Dit beteken vir elke element in paaie, 378 00:27:52,400 --> 00:27:55,150 noem dit die pad, en gebruik dit. 379 00:27:55,150 --> 00:27:59,266 Dit is in wese soos wanneer jy doen 'n lus en jy int i gebruik. 380 00:27:59,266 --> 00:28:04,000 So jy kan die pad as die behandeling van veranderlike wat is die verhoog. 381 00:28:04,000 --> 00:28:07,820 >> En dan vir elkeen van daardie, gaan in elk van die skakels. 382 00:28:07,820 --> 00:28:11,710 Omdat ons dit stoor in item bladsy so ons is die skep van 'n nuwe bladsy elke keer 383 00:28:11,710 --> 00:28:13,330 ons toegang het. 384 00:28:13,330 --> 00:28:20,560 En dan binne daardie nuwe bladsy, vind span.postingtitletext, span.price, 385 00:28:20,560 --> 00:28:22,240 en dan artikel # postingbody. 386 00:28:22,240 --> 00:28:28,430 Ons het reeds gedek artikel # postingbody wanneer ons kyk na die beskrywing. 387 00:28:28,430 --> 00:28:34,890 >> Sodat ons kan gaan kyk in die Craigslist post, as jy net kyk na die titel, 388 00:28:34,890 --> 00:28:38,810 jy kan dit hier sien het, span postingtitletext. 389 00:28:38,810 --> 00:28:41,390 En dit is hoekom dit is daar. 390 00:28:41,390 --> 00:28:49,120 En dan vir die prys, kan jy toegang met span class van die prys. 391 00:28:49,120 --> 00:28:54,480 >> So het ons ook miskien kon wil die URL te stoor. 392 00:28:54,480 --> 00:28:58,580 So sal ons net hierdie hardloop weer, stoor dit in 'n skikking, 393 00:28:58,580 --> 00:29:01,150 want as jy op soek is op Craigslist, is jy 394 00:29:01,150 --> 00:29:05,290 waarskynlik gaan om 'n manier te wil, as jy sien iets wat jou interesseer, 395 00:29:05,290 --> 00:29:06,620 gaan terug na die webwerf. 396 00:29:06,620 --> 00:29:10,480 So jy wil net om te stoor die URL vir verwysings ontwil. 397 00:29:10,480 --> 00:29:13,840 398 00:29:13,840 --> 00:29:19,630 >> Dit is net in wese 'n ander sintaksis vir die lus. 399 00:29:19,630 --> 00:29:26,360 Ek kon net nie paths.each plaas van vir pad in paaie met indeks. 400 00:29:26,360 --> 00:29:31,280 En dit is sintaksis Ruby for-- pad is wat ons gedoen het hier grootgeword, 401 00:29:31,280 --> 00:29:33,920 waarby 'n veranderlike vir elke item. 402 00:29:33,920 --> 00:29:38,540 En die indeks optree soos die i in C vir loops. 403 00:29:38,540 --> 00:29:41,280 Sodat jy kan tred te hou van wat die indeks is. 404 00:29:41,280 --> 00:29:45,200 >> So hier is net 'n bietjie gerieflike ding 405 00:29:45,200 --> 00:29:46,950 vir wanneer jy die bestuur van die skraper. 406 00:29:46,950 --> 00:29:50,580 As jy skraap honderde bladsye, om seker te maak dat dit nie hang, 407 00:29:50,580 --> 00:29:53,320 Dit sal net uitvoer, Ek is die toegang tot hierdie bladsy, 408 00:29:53,320 --> 00:29:55,960 en seker te maak dat dit is nog steeds voort. 409 00:29:55,960 --> 00:29:59,250 Maar vir ons doeleindes, want daar is 'n honderd items, 410 00:29:59,250 --> 00:30:08,000 Ek gaan om toegang tot net drie van hulle sodat ons nie hardloop uit tyd hier. 411 00:30:08,000 --> 00:30:13,040 >> Maar voordat ons by wat, ek is net gaan jy regtig vinnig wys, 412 00:30:13,040 --> 00:30:16,940 Ek sal uitdruk die titel, prys, beskrywing, en URL 413 00:30:16,940 --> 00:30:19,600 van elk van die skakels wat ek geskraap. 414 00:30:19,600 --> 00:30:23,720 En dan is dit net die sintaksis vir die CSV biblioteek. 415 00:30:23,720 --> 00:30:25,240 Jy maak 'n CSV. 416 00:30:25,240 --> 00:30:27,070 Dit is wat ek gaan om dit te noem. 417 00:30:27,070 --> 00:30:29,430 Maak dit met skryf do. 418 00:30:29,430 --> 00:30:33,830 En dan sal die CSV-lêer wees dat jy skryf alles in. 419 00:30:33,830 --> 00:30:37,800 Dit is net 'n gesonde verstand tjek vir my om te weet dat dit loop. 420 00:30:37,800 --> 00:30:41,240 En dit is my gesonde verstand tjek om te weet dat dit voltooi is. 421 00:30:41,240 --> 00:30:46,670 So ek sit titel in 'n ry in die CSV, prys, url, beskrywing, 422 00:30:46,670 --> 00:30:49,420 alles in rye in die CSV. 423 00:30:49,420 --> 00:30:53,410 >> So as ons gaan en hardloop hierdie now-- en ek het net 424 00:30:53,410 --> 00:31:04,710 seker te maak dat ek it-- gered het plaas van net uitdruk dit na die terminale, 425 00:31:04,710 --> 00:31:09,750 ons het 'n CSV moet hê lêer wat geproduseer. 426 00:31:09,750 --> 00:31:13,500 So hier kan ons die CSV sien lêer wat is geproduseer. 427 00:31:13,500 --> 00:31:19,330 Dit is die opbrengs van die blomas dat ek net gehardloop. 428 00:31:19,330 --> 00:31:23,030 Soos jy hier kan sien, ontsluiting bladsy 0, 1, 2, 3. 429 00:31:23,030 --> 00:31:27,400 Hierdie is die titels, pryse, beskrywings. 430 00:31:27,400 --> 00:31:31,710 En as ons kyk na hierdie CSV lêer wat ons het gegenereer, 431 00:31:31,710 --> 00:31:35,700 jy kan sien hier die outputted. 432 00:31:35,700 --> 00:31:40,350 Dit is nie Excel, so dit is nie geformateer in rye en kolomme. 433 00:31:40,350 --> 00:31:45,140 Maar jy kan dink hoe dit kan geformateer word. 434 00:31:45,140 --> 00:31:47,740 >> CSV staan ​​vir kommas geskei waardes. 435 00:31:47,740 --> 00:31:50,090 So jy kan dink dit kan 'n ry wees. 436 00:31:50,090 --> 00:31:54,700 En elke komma sou dui op 'n aparte kolom. 437 00:31:54,700 --> 00:32:00,010 Net 'n woord van caution-- soms is jy 438 00:32:00,010 --> 00:32:02,260 skraap dinge met 'n baie kommas. 439 00:32:02,260 --> 00:32:05,100 So as jy uitdruk dit na 'n CSV-lêer, 440 00:32:05,100 --> 00:32:10,340 dit dalk nie die uitset manier wat jy dink. 441 00:32:10,340 --> 00:32:16,770 >> So dit is in wese al daar is om te skraap basiese HTML 442 00:32:16,770 --> 00:32:20,110 bladsye met Nokogiri. 443 00:32:20,110 --> 00:32:26,000 >> So die internet wese innoverende as dit kom 444 00:32:26,000 --> 00:32:33,220 met 'n meer outomatiese en GUI weergawe, hoewel minder robuuste 445 00:32:33,220 --> 00:32:35,540 weergawe van skraap verskeie webtuistes. 446 00:32:35,540 --> 00:32:39,060 En vir ons doeleindes Ek sal toon 447 00:32:39,060 --> 00:32:42,920 'n Chrome uitbreiding genoem kimono. 448 00:32:42,920 --> 00:32:46,690 En al wat jy hoef te doen, is jy opgevolg na die bladsy wat jy wil om te skraap. 449 00:32:46,690 --> 00:32:48,590 Jy kliek op 'n veld van belang. 450 00:32:48,590 --> 00:32:51,510 Jy Kalibreer die velde, want dit sal outomaties 451 00:32:51,510 --> 00:32:54,360 spoor wat hulle dink jy wil skraap, 452 00:32:54,360 --> 00:32:56,280 en dan kan jy net skep 'n API. 453 00:32:56,280 --> 00:33:03,700 >> So as ons dit op te demonstreer Craigslist, sou dit eintlik nie werk nie. 454 00:33:03,700 --> 00:33:08,290 En dit is wat ek terug gaan sê oor dit nie so sterk. 455 00:33:08,290 --> 00:33:10,320 Dit het probleme met die skep van die API. 456 00:33:10,320 --> 00:33:13,400 Maar as 'n demonstrasie van wat dit sou doen, 457 00:33:13,400 --> 00:33:17,460 as jy die Chrome uitbreiding te installeer, al wat jy doen is jy kliek op dit. 458 00:33:17,460 --> 00:33:21,750 Dit Kimonofies die bladsy en dan kan jy Klik op die ding wat jy wil script. 459 00:33:21,750 --> 00:33:24,480 >> So as ek klik op dat, sou dit na vore te bring 460 00:33:24,480 --> 00:33:28,130 wat hulle dink ek wil wees skraap af bladsy. 461 00:33:28,130 --> 00:33:33,660 So miskien noem ek hierdie lys. 462 00:33:33,660 --> 00:33:36,430 Dit is hoe baie items wat ek gekies het. 463 00:33:36,430 --> 00:33:43,810 En ek kan net bevestig of ontken sommige van die ander voorgestel volledige lys 464 00:33:43,810 --> 00:33:49,600 om dit te kry om by te voeg tot wat sal geskraap. 465 00:33:49,600 --> 00:33:52,330 >> So nou kan ons sien daar is 'n honderd items gekies. 466 00:33:52,330 --> 00:33:58,060 As ek wil 'n ander veld te hê dat ek ook skraap wat verband hou met hierdie, 467 00:33:58,060 --> 00:34:02,540 Ek sê die prys wil skraap sowel, dan sal ek kan dieselfde doen. 468 00:34:02,540 --> 00:34:06,190 469 00:34:06,190 --> 00:34:11,550 >> So hier is 'n demonstrasie van hoe dit is veel minder robuuste, want dit is nou 470 00:34:11,550 --> 00:34:15,050 pluk aan die stad plaas van net die prys wat ek wil. 471 00:34:15,050 --> 00:34:16,989 En nou is dit opgetel 200 dinge. 472 00:34:16,989 --> 00:34:19,880 Jy kan terug gaan en te verwyder. 473 00:34:19,880 --> 00:34:21,449 Jy kan weer probeer. 474 00:34:21,449 --> 00:34:24,250 Maar geen waarborge nie. 475 00:34:24,250 --> 00:34:29,909 Dit is hoe dit werk soms. 476 00:34:29,909 --> 00:34:32,969 As jy hier sien, is dit nou sê 96 tot hier. 477 00:34:32,969 --> 00:34:37,000 Dit is die meeste van die skakels opgetel wat jy wil skraap, maar nie 478 00:34:37,000 --> 00:34:39,280 noodwendig almal van hulle. 479 00:34:39,280 --> 00:34:43,909 >> Nog 'n nuttige instrument van Kimono al is jy kan gaan na Gevorderde kenmerke 480 00:34:43,909 --> 00:34:47,980 hier, gaan na Gevorderde en dit sal vir jou wys 481 00:34:47,980 --> 00:34:53,139 die afbreek van die unieke manier om toegang te verkry tot die HTML 482 00:34:53,139 --> 00:34:54,909 tags wat jy wil te skraap. 483 00:34:54,909 --> 00:35:01,450 So vir volledige lys, as jy kyk na hier, As jy toegang tot div p span strek oor 'n, 484 00:35:01,450 --> 00:35:06,030 jy kan eintlik net gebruik hierdie in jou Nokogiri kode, 485 00:35:06,030 --> 00:35:10,780 waar voordat ons het span.txt om toegang tot elk van die volledige lys. 486 00:35:10,780 --> 00:35:13,270 As ek die teks wil net binne die volledige lys, 487 00:35:13,270 --> 00:35:18,950 Ek kon insette div ruimte p ruimte span ruimte span ruimte a, 488 00:35:18,950 --> 00:35:21,570 en dit sou dieselfde effek te bereik. 489 00:35:21,570 --> 00:35:26,320 En vir dié van julle wat belangstel in die gebruik van gereelde uitdrukkings, 490 00:35:26,320 --> 00:35:31,670 dit gebeur ook gee jou die gereelde uitdrukking soort string om insette 491 00:35:31,670 --> 00:35:34,900 om die dinge te vind jy probeer om uit te vind. 492 00:35:34,900 --> 00:35:44,130 >> So daar is nog 'n koel funksie van Kimono waar jy kan pagineren, 493 00:35:44,130 --> 00:35:47,780 wat nie net kan ek skraap die resultate van hierdie bladsy 494 00:35:47,780 --> 00:35:50,890 Ek kan op hierdie klein hier knoppie Paginering, 495 00:35:50,890 --> 00:35:55,580 spesifiseer die knoppie wat sou neem my na die volgende bladsy 496 00:35:55,580 --> 00:35:59,500 en dan sal dit net weet dat dit kan Itereer na die volgende bladsy, 497 00:35:59,500 --> 00:36:04,120 en dan is almal van the-- solank skraap as dit is dieselfde formaat van course-- 498 00:36:04,120 --> 00:36:06,110 blomas al die skakels as well. 499 00:36:06,110 --> 00:36:15,230 >> So omdat kimono wil nie werk met Craigslist, wat ons gedoen het 500 00:36:15,230 --> 00:36:19,790 is ek Kimonofied die Harvard Crimson. 501 00:36:19,790 --> 00:36:29,380 Ek het getrek uit 'n paar van die soort van top featured artikels, bevestig hier. 502 00:36:29,380 --> 00:36:33,090 Sê al hierdie. 503 00:36:33,090 --> 00:36:35,830 Ek het hierdie API saamgestel vir jou voor die tyd. 504 00:36:35,830 --> 00:36:38,990 Maar anders wat jy sou doen is jy kliek net gebraai. 505 00:36:38,990 --> 00:36:40,940 Tik in jou API besonderhede. 506 00:36:40,940 --> 00:36:45,260 Stel dit na óf outomatiese of handleiding crawl. 507 00:36:45,260 --> 00:36:48,460 Sodat jy kan werk jou data elke 15 minute, 508 00:36:48,460 --> 00:36:50,330 weekliks, daagliks, wat jy wil. 509 00:36:50,330 --> 00:36:51,160 Noem jou API. 510 00:36:51,160 --> 00:36:52,790 Skep die API. 511 00:36:52,790 --> 00:36:58,460 Vir jou eie voordeel, het ek het die Bloedrooi voorblad API reeds. 512 00:36:58,460 --> 00:37:02,480 >> Sodat jy net skep 'n rekening op kimono, en dit 513 00:37:02,480 --> 00:37:06,240 sal al jou APIs die winkel vir jou. 514 00:37:06,240 --> 00:37:10,330 So in wese is dit al jou aparte verskillende skrape. 515 00:37:10,330 --> 00:37:18,250 >> So as ons hier sien, dit is die menings skakels wat ek versamel het. 516 00:37:18,250 --> 00:37:21,290 Hierdie is die featured skakels wat ek versamel het. 517 00:37:21,290 --> 00:37:24,090 En dit is die mees gelees skakels wat ek versamel het 518 00:37:24,090 --> 00:37:27,120 Van hierdie mees onlangse API scape. 519 00:37:27,120 --> 00:37:30,790 >> So as jy hier kan sien, Dit sou wees die featured, 520 00:37:30,790 --> 00:37:34,130 Dit sou wees die menings, wat in hierdie voorbeeld, 521 00:37:34,130 --> 00:37:38,150 Ek het hulle al gekombineer in een versameling. 522 00:37:38,150 --> 00:37:42,780 Maar as jy net om te speel met dit 'n bietjie, kan jy dit verdeel 523 00:37:42,780 --> 00:37:45,090 en verdeel dit egter jy wil so lank 524 00:37:45,090 --> 00:37:47,520 as die formatering is effens anders. 525 00:37:47,520 --> 00:37:51,320 >> Net om te speel met hierdie, die crawl opstel, een van die nadele 526 00:37:51,320 --> 00:37:58,120 is jy kan net kruip up 25 bladsye op 'n slag. 527 00:37:58,120 --> 00:38:00,430 Dit is een van die beperkende faktore. 528 00:38:00,430 --> 00:38:03,060 Maar hier, as jy dit handleiding crawl, hierdie 529 00:38:03,060 --> 00:38:06,100 is hoe jy dit kan vertel om jou data te werk. 530 00:38:06,100 --> 00:38:11,010 En hier kan jy jou crawl geskiedenis te sien van alles wat jy gekruip. 531 00:38:11,010 --> 00:38:16,000 En julle kan terug gaan, teken, speel rond met al die verskillende maniere 532 00:38:16,000 --> 00:38:20,340 wat jy kan verander en gebruik jou data. 533 00:38:20,340 --> 00:38:24,580 >> Kimono kan opgestel word om skraap skakels binne skakels. 534 00:38:24,580 --> 00:38:29,700 En jy sal dit doen deur die eerste skraap 'n lys van skakels, 535 00:38:29,700 --> 00:38:35,390 en dan met behulp van die API as 'n af te spring punt vir 'n ander API 536 00:38:35,390 --> 00:38:36,710 dat jy die script te skep. 537 00:38:36,710 --> 00:38:42,040 Maar dit is meer ingewikkeld as wat ons gaan om te kry in vandag. 538 00:38:42,040 --> 00:38:44,270 >> So dit is kimono. 539 00:38:44,270 --> 00:38:46,980 Ons sal praat oor die voor-en nadele van Nokogiri en kimono. 540 00:38:46,980 --> 00:38:50,380 >> Nokogiri, dit is regtig vinnig. 541 00:38:50,380 --> 00:38:51,640 Dit is maklik om te toets. 542 00:38:51,640 --> 00:38:55,910 Jy kan net sit om iets te console, maklik om te instel. 543 00:38:55,910 --> 00:39:00,400 Jy kan besluit wat presies jy wil krap en winkel. 544 00:39:00,400 --> 00:39:02,060 Daar is geen perke bladsy. 545 00:39:02,060 --> 00:39:08,010 Ek het eintlik het dit gebruik om te krap soos 1800 Suid-Afrikaanse skool webtuistes 546 00:39:08,010 --> 00:39:10,870 vir e-pos vir 'n internskap wat ek gedoen het. 547 00:39:10,870 --> 00:39:16,060 >> So dit is moontlik, maar die beste praktyk sou wees om te verdeel die script. 548 00:39:16,060 --> 00:39:19,310 Want as dit nie werk nie, dan jy hoef nie iets te kry. 549 00:39:19,310 --> 00:39:22,790 Maar as jy nie 'n honderd, Miskien 200 bladsye op 'n tyd, 550 00:39:22,790 --> 00:39:27,840 dan moet jy 'n kans van ten minste om dit stuksgewys, veral 551 00:39:27,840 --> 00:39:30,280 as jy het 'n slegte internet. 552 00:39:30,280 --> 00:39:32,720 >> Ongelukkig kan dit net skraap HTML. 553 00:39:32,720 --> 00:39:35,190 So as jy ' dinamiese gelaai pages-- 554 00:39:35,190 --> 00:39:39,480 en Ek sal julle 'n voorbeeld wys soos kajak in 'n second-- 555 00:39:39,480 --> 00:39:42,270 Nokogiri ongelukkig kan nie krap nie. 556 00:39:42,270 --> 00:39:45,700 >> Maar kimono is ook maklik om te gebruik. 557 00:39:45,700 --> 00:39:48,330 As jy gesien het, is dit in wese 'n punt en klik. 558 00:39:48,330 --> 00:39:50,260 Dit kan skraap JavaScript. 559 00:39:50,260 --> 00:39:53,790 Ongelukkig is daar 'n maksimum hoeveel bladsye wat jy kan krap. 560 00:39:53,790 --> 00:39:55,710 Soms is dit 'n bietjie moeilik om te instel. 561 00:39:55,710 --> 00:39:57,240 Dit word verwar. 562 00:39:57,240 --> 00:40:00,920 Maar dit is beslis iets om te oorweeg 563 00:40:00,920 --> 00:40:05,930 as jy nie probeer om 'n het super sterk onderhoubare skraap. 564 00:40:05,930 --> 00:40:09,010 As jy net wil om te kry alles af van 'n bladsy vinnig, 565 00:40:09,010 --> 00:40:10,970 dan kimono is 'n baie goeie hulpmiddel om te gebruik. 566 00:40:10,970 --> 00:40:16,490 En soos ek voorheen genoem, is daar die gevorderde funksie van Kimono 567 00:40:16,490 --> 00:40:19,260 wat wys jou hoe om toegang tot die unieke HTML 568 00:40:19,260 --> 00:40:24,210 element, wat is super nuttig selfs As jy besig is in Nokogiri. 569 00:40:24,210 --> 00:40:30,370 >> So as ons na die kajak webwerf, vir Byvoorbeeld, kan jy daar te sien is-- 570 00:40:30,370 --> 00:40:31,750 of miskien kan jy nie sien nie. 571 00:40:31,750 --> 00:40:38,910 Maar as ek wys jou die URL vir Kayak, hierdie is eintlik die bron URL. 572 00:40:38,910 --> 00:40:43,800 Dit is die URL voor om gewysig deur watter JavaScript skrifte 573 00:40:43,800 --> 00:40:45,350 dat hulle aan die gang. 574 00:40:45,350 --> 00:40:52,420 En dit gaan om te kyk verskillende van die inspeksie van die element. 575 00:40:52,420 --> 00:40:55,940 >> So as jy deur te gaan en jy ooreenstem met die Inspekteer Element 576 00:40:55,940 --> 00:41:00,340 kode om die bronkode, dit is eintlik gaan anders wees. 577 00:41:00,340 --> 00:41:05,640 En dit is in wese waarom Nokogiri kan nie skraap dinamiese gelaai webwerwe. 578 00:41:05,640 --> 00:41:08,810 Omdat Nokogiri is skraap die bron URL, 579 00:41:08,810 --> 00:41:16,310 terwyl kimono is eintlik skraap wat jy in wese is 580 00:41:16,310 --> 00:41:18,260 sien in Select element. 581 00:41:18,260 --> 00:41:23,880 >> So as ek gaan deur en ek probeer Kimonofy Kayak, 582 00:41:23,880 --> 00:41:26,600 Ek kan eintlik gaan deur en kies die prys. 583 00:41:26,600 --> 00:41:32,360 Dit is 'n bietjie harder, en in hierdie geval, is dit 584 00:41:32,360 --> 00:41:36,600 eintlik sien hierdie prys as verskillend van hierdie. 585 00:41:36,600 --> 00:41:41,110 So, terwyl jy kan configure-- of As dit nie dinamies gelaai, 586 00:41:41,110 --> 00:41:43,620 jy kan Nokogiri instel om al hierdie te kry. 587 00:41:43,620 --> 00:41:48,230 >> Omdat die opmaak is effens anders vir hierdie lys 588 00:41:48,230 --> 00:41:51,280 as dit vergelyk word met die res van hulle, en jy kan sien hier 589 00:41:51,280 --> 00:41:54,830 dit is eintlik gegaan en gekies al vlug pryse die. 590 00:41:54,830 --> 00:42:01,200 Miskien het ek wil kies tyd van vlug as well. 591 00:42:01,200 --> 00:42:04,700 En ek kan deur te gaan en soort instel nie. 592 00:42:04,700 --> 00:42:06,950 Ek wil nie dat. 593 00:42:06,950 --> 00:42:10,200 Ek wil net tyd die volgende vlug se. 594 00:42:10,200 --> 00:42:17,030 En dan na 'n paar van hierdie gaan deur, raak dit die prentjie. 595 00:42:17,030 --> 00:42:19,080 So kimono se mooi slim. 596 00:42:19,080 --> 00:42:21,900 Dit is net nie heeltemal so sterk. 597 00:42:21,900 --> 00:42:26,710 >> Daar is 'n paar ander alternatiewe wat jy kan gebruik. 598 00:42:26,710 --> 00:42:31,600 En ek sal jou dit hier wys. 599 00:42:31,600 --> 00:42:35,790 As jy meer gemaklik in Python plaas van Ruby miskien, 600 00:42:35,790 --> 00:42:39,290 daar is 'n biblioteek genoem Beautiful sop. 601 00:42:39,290 --> 00:42:40,430 Jy kan gebruik nie. 602 00:42:40,430 --> 00:42:42,270 Dit is baie soortgelyk aan Nokogiri. 603 00:42:42,270 --> 00:42:44,620 Dit het 'n paar meer funksies. 604 00:42:44,620 --> 00:42:52,160 Jy kan 'n HTML tag te vind en dan beweeg op of sywaarts beweeg. 605 00:42:52,160 --> 00:42:54,690 >> Daar is PyQt. 606 00:42:54,690 --> 00:42:57,820 Dit kan eintlik skraap dinamiese plekke, want dit is soort van 607 00:42:57,820 --> 00:43:02,540 is 'n WebKit wat voorgee om te wees 'n leser sonder dat daar eintlik 608 00:43:02,540 --> 00:43:03,670 'n leser. 609 00:43:03,670 --> 00:43:07,490 So dit sou wag vir al die JavaScript om eers te laai, en dan 610 00:43:07,490 --> 00:43:09,560 gaan in en probeer en skraap die site. 611 00:43:09,560 --> 00:43:13,560 >> As jy wil om te hou met Ruby, jy kan een vlak uit Nokogiri gaan. 612 00:43:13,560 --> 00:43:17,650 Jy kan gebruik om met Capybara 'n Poltergeist wikkel. 613 00:43:17,650 --> 00:43:22,910 En dit kan eintlik wese dieselfde ding doen 614 00:43:22,910 --> 00:43:26,610 as PyQt, wat is dit is 'n WebKit. 615 00:43:26,610 --> 00:43:29,610 Dit wag vir die JavaScript om eers te laai. 616 00:43:29,610 --> 00:43:33,340 As jy peuter met dit genoeg is, jy kan selfs dit kry om te klik op dinge. 617 00:43:33,340 --> 00:43:42,780 >> So as daar is 'n skakel wat is nie 'n klassieke href waar 618 00:43:42,780 --> 00:43:46,350 die pad is maklik toeganklik is, en dit is 'n paar JavaScript ding wat ontdek 619 00:43:46,350 --> 00:43:49,490 'n kliek, kan jy eintlik doen nie. 620 00:43:49,490 --> 00:43:53,430 Die meer gewilde biblioteek om 'n gebruiker te boots 621 00:43:53,430 --> 00:43:56,390 is in JavaScript, wat is PhantomJS. 622 00:43:56,390 --> 00:44:01,010 Dit kan natuurlik dinamiese skraap webwerwe, want dit is in wese 623 00:44:01,010 --> 00:44:04,270 voorgee om Chrome wees sonder dat die gebruiker koppelvlak. 624 00:44:04,270 --> 00:44:09,970 >> En dan, natuurlik die mees robuuste, maar stadigste opsie, 625 00:44:09,970 --> 00:44:13,260 is 'n Selenium leser outomatisering. 626 00:44:13,260 --> 00:44:15,550 En ongelukkig, jy gaan nie om te wees 627 00:44:15,550 --> 00:44:19,770 in staat wees om dit te doen binne jou CS50 IDE. 628 00:44:19,770 --> 00:44:24,140 Omdat wese wat dit doen, is dit stewels jou Chrome, 629 00:44:24,140 --> 00:44:27,090 Firefox, ongeag die leser wat jy wil gebruik, 630 00:44:27,090 --> 00:44:32,570 en dit liedjies miskien jou muis beweging, alles wat jy tik in, 631 00:44:32,570 --> 00:44:35,170 en dit net soort van automatiseert hierdie proses. 632 00:44:35,170 --> 00:44:42,070 So dit is ontwikkel as 'n soort van webwerf outomatisering toets hulpmiddel. 633 00:44:42,070 --> 00:44:45,910 Maar baie van die mense gebruik Selenium webtuistes skraap 634 00:44:45,910 --> 00:44:49,990 dat hulle anders het 'n baie moeite skraap 635 00:44:49,990 --> 00:44:53,700 met 'n paar van hierdie ander, vinniger gereedskap. 636 00:44:53,700 --> 00:44:57,530 >> So dit is al wat ek het vir die web skraap. 637 00:44:57,530 --> 00:44:58,090 Hê pret. 638 00:44:58,090 --> 00:45:01,762 639 00:45:01,762 --> 00:45:02,680 >> GEHOOR: Vraag. 640 00:45:02,680 --> 00:45:04,016 >> ROBERT KRABEK: Ja. 641 00:45:04,016 --> 00:45:12,840 >> GEHOOR: Is daar 'n meganisme om hash die webwerf sodat jy kan basies 642 00:45:12,840 --> 00:45:14,207 gaan deur dit later. 643 00:45:14,207 --> 00:45:15,040 ROBERT KRABEK: Ja. 644 00:45:15,040 --> 00:45:21,530 So het ons die, in ons Byvoorbeeld, vir beide van hulle, 645 00:45:21,530 --> 00:45:24,980 ons die hele webwerf in doc. 646 00:45:24,980 --> 00:45:31,260 En so kan jy eintlik net die veranderlike doc en skryf dit na 'n lêer. 647 00:45:31,260 --> 00:45:35,490 So as ek wou, kon ek skryf dit uit as 'n HTML-lêer, 648 00:45:35,490 --> 00:45:39,280 en dan plaas van die gebruik OpenURI en 'n cURL versoek 649 00:45:39,280 --> 00:45:43,520 dan kan ek net oop doc HTML en dan soek vir daardie. 650 00:45:43,520 --> 00:45:47,960 >> GEHOOR: Maar kan jy te bewaar die soort van aanlyn-ervaring 651 00:45:47,960 --> 00:45:48,930 terwyl jy op die regte pad te doen. 652 00:45:48,930 --> 00:45:51,013 Byvoorbeeld. wanneer jy vlieg vir 'n paar uur, 653 00:45:51,013 --> 00:45:54,070 Ek wil basies argief die hele webwerf. [Onhoorbaar] 654 00:45:54,070 --> 00:45:58,780 >> ROBERT KRABEK: Ja, dis exactly-- so letterlik wat dit doen 655 00:45:58,780 --> 00:46:03,010 is dit die neem van alles wat dit sou wees op hierdie URL. 656 00:46:03,010 --> 00:46:11,280 So as ons hardloop krul, dit is neem al hierdie HTML, 657 00:46:11,280 --> 00:46:14,590 en dit is om dit te stoor binne-in die veranderlike doc. 658 00:46:14,590 --> 00:46:17,290 So dan kan jy alles doen wat wat jy wil doen met doc. 659 00:46:17,290 --> 00:46:18,575 Jy kan uitvoer dit na 'n lêer. 660 00:46:18,575 --> 00:46:19,950 GEHOOR: Maar dit is nie gekoppel word. 661 00:46:19,950 --> 00:46:20,780 Dit is nie dinamies. 662 00:46:20,780 --> 00:46:22,770 Dit is nie rekursiewe, reg? 663 00:46:22,770 --> 00:46:24,016 Jy sien wat ek bedoel? 664 00:46:24,016 --> 00:46:28,359 Ek probeer om basies soort van 'n hash die hele webwerf op my hardeskyf 665 00:46:28,359 --> 00:46:31,150 sodat ek basies kan dit doen vir 'n paar uur sonder internet. 666 00:46:31,150 --> 00:46:32,025 >> ROBERT KRABEK: Right. 667 00:46:32,025 --> 00:46:37,140 So as ek had-- so waar's my lêer I / O? 668 00:46:37,140 --> 00:46:47,766 So, dit is die lêer I / O. So in plaas sê van hierdie, noem ek dit craigslist.html. 669 00:46:47,766 --> 00:46:52,620 670 00:46:52,620 --> 00:46:53,940 Ek wil oop te maak. 671 00:46:53,940 --> 00:46:59,020 Ek wil wan doc in dit. 672 00:46:59,020 --> 00:47:00,470 Ek maak die lêer. 673 00:47:00,470 --> 00:47:05,410 En dan, net omdat die CS50 IDE is op die wolk dit is ook al. 674 00:47:05,410 --> 00:47:07,710 Ek kan hier gaan. 675 00:47:07,710 --> 00:47:09,320 Ek kan die lêer af te laai. 676 00:47:09,320 --> 00:47:11,830 En dan sal dit nie wees op my hardeskyf. 677 00:47:11,830 --> 00:47:13,930 So jy kan dit doen op die manier. 678 00:47:13,930 --> 00:47:18,830 Of as jy by die huis, nie met behulp van die CS50 IDE, soos Sublime of iets, 679 00:47:18,830 --> 00:47:21,900 dit is selfs makliker, want dit is alles plaaslik beskikbaar, 680 00:47:21,900 --> 00:47:23,020 nie gekoppel is aan die internet. 681 00:47:23,020 --> 00:47:24,720 >> GEHOOR: ek sien. 682 00:47:24,720 --> 00:47:26,580 Dit is vir 'n spesifieke probleem. 683 00:47:26,580 --> 00:47:30,410 Kan jy dit doen rekursief sodat jy gaan verskeie lae diep soort ding? 684 00:47:30,410 --> 00:47:33,801 >> ROBERT KRABEK: Ek kan dopgehou aflaai sowel, as dit is wat jy vra. 685 00:47:33,801 --> 00:47:34,426 GEHOOR: Ja. 686 00:47:34,426 --> 00:47:39,890 687 00:47:39,890 --> 00:47:41,440 >> ROBERT KRABEK: Cool. 688 00:47:41,440 --> 00:47:43,182