1 00:00:00,000 --> 00:00:03,234 >> [Muziek] 2 00:00:03,234 --> 00:00:05,275 3 00:00:05,275 --> 00:00:06,400 ROBERT KRABEK: Hallo, jongens. 4 00:00:06,400 --> 00:00:09,980 Mijn naam is Robert Krabek en Ik zal onderwijzen u guys 5 00:00:09,980 --> 00:00:15,470 hoe het web schrapen met Nokogiri, een Ruby bibliotheek 6 00:00:15,470 --> 00:00:17,566 en Kimono, dat is een Chrome-extensie. 7 00:00:17,566 --> 00:00:20,940 8 00:00:20,940 --> 00:00:25,010 >> Dus eerst is er een paar dingen die je 9 00:00:25,010 --> 00:00:28,790 kan doen of misschien je bent geweest doet al het psets dusver 10 00:00:28,790 --> 00:00:31,170 en uw werkruimte is een beetje vol. 11 00:00:31,170 --> 00:00:37,060 We kunnen eigenlijk alleen maar gaan maak een nieuwe werkruimte voor u 12 00:00:37,060 --> 00:00:41,220 gewoon een gloednieuw project te doen. 13 00:00:41,220 --> 00:00:46,160 Dus als je wilt blijven werken in de CS50 template ID 14 00:00:46,160 --> 00:00:49,080 dat u op dit moment, voel je vrij, en u kunt gewoon 15 00:00:49,080 --> 00:00:54,700 Nokogiri installeren met CFLAGS equals-- gem installeren nokogiri. 16 00:00:54,700 --> 00:00:56,930 Maar anders zal ik je laten zien hoe je een nieuw op te zetten. 17 00:00:56,930 --> 00:01:01,210 En dan is dit in wezen dropping meer zijwieltjes. 18 00:01:01,210 --> 00:01:07,120 En je bent codering alsof u net codering in Subliem of zoiets. 19 00:01:07,120 --> 00:01:12,365 Dus als we verschuiven het over. 20 00:01:12,365 --> 00:01:14,930 21 00:01:14,930 --> 00:01:18,690 >> Dus zeggen dat dit je huidige CS 50 ID. 22 00:01:18,690 --> 00:01:21,490 U kunt gewoon naar Cloud9 hier. 23 00:01:21,490 --> 00:01:22,725 U kunt naar uw dashboard. 24 00:01:22,725 --> 00:01:26,720 25 00:01:26,720 --> 00:01:29,950 Het moet brengen tabblad werkruimten. 26 00:01:29,950 --> 00:01:32,980 En dan kun je gewoon klikken hier, een nieuwe werkruimte. 27 00:01:32,980 --> 00:01:37,600 Noem uw nieuwe werkruimte, misschien test, of schrapen. 28 00:01:37,600 --> 00:01:42,700 En klik hier deze gewoonte tab, in plaats van het tabblad CS50 sjablonen. 29 00:01:42,700 --> 00:01:45,155 En dan kun je gewoon gaan en het creëren van een nieuwe werkruimte. 30 00:01:45,155 --> 00:01:48,280 >> Ik heb al een werkruimte hier. 31 00:01:48,280 --> 00:01:50,640 Dus we zullen werken met deze. 32 00:01:50,640 --> 00:01:55,380 En als je een nieuw aangemaakt werkruimte dus met het tabblad Aangepast 33 00:01:55,380 --> 00:02:04,560 je kunt gewoon typen gem installeren nokogiri, die hier niet gaat. 34 00:02:04,560 --> 00:02:06,230 OK, het is een beetje bevroren. 35 00:02:06,230 --> 00:02:08,979 Maar u kunt typen gem installeren nokogiri. 36 00:02:08,979 --> 00:02:15,970 En dat zou alles zijn dat is de installatie. 37 00:02:15,970 --> 00:02:20,590 >> Zoals ik al zei, als je nog steeds werken in je CS50 template ID, 38 00:02:20,590 --> 00:02:30,270 je hoeft alleen maar te typen CFLAGS evenaart gem installeren nokogiri. 39 00:02:30,270 --> 00:02:33,130 En ik heb al geïnstalleerd hier dus ik zal dat niet doen. 40 00:02:33,130 --> 00:02:38,500 Maar voor die volgende langs, voel je vrij om dat te doen. 41 00:02:38,500 --> 00:02:46,000 >> Dus als je eenmaal hebt je Nokogiri werkruimte of bibliotheek geïnstalleerd, 42 00:02:46,000 --> 00:02:49,500 Ik ga je een beetje van een spoedcursus in Ruby syntax 43 00:02:49,500 --> 00:02:53,380 omdat Nokogiri is een Ruby bibliotheek. 44 00:02:53,380 --> 00:03:03,710 Dus je moet weten een aantal fundamentele Ruby syntax voor het werken met Nokogiri. 45 00:03:03,710 --> 00:03:08,750 Dus een aantal fundamentele verschillen van wat je gewend bent 46 00:03:08,750 --> 00:03:13,370 misschien als je hebt gewerkt dusver in slechts C en PHP, 47 00:03:13,370 --> 00:03:16,010 verklaart u variabelen zonder type. 48 00:03:16,010 --> 00:03:19,720 Je hoeft geen puntkomma's gebruiken, dat is een soort van een opluchting. 49 00:03:19,720 --> 00:03:25,480 Er is geen haakjes nu ongeveer voor of tijdens loops, bijvoorbeeld. 50 00:03:25,480 --> 00:03:29,460 Je hebt gewoon een blok van de code, en dan zet je einde aan het einde van dat. 51 00:03:29,460 --> 00:03:32,380 Er is geen plus plus of min min, dus gewoon 52 00:03:32,380 --> 00:03:36,180 dat wanneer je doet voor loops, 53 00:03:36,180 --> 00:03:38,620 gewoon gelijken plus en min gelijk. 54 00:03:38,620 --> 00:03:43,310 En in plaats van hash omvatten, je zult gebruiken nodig en dan 55 00:03:43,310 --> 00:03:47,755 wat bibliotheek proberen laden in uw programma. 56 00:03:47,755 --> 00:03:51,610 57 00:03:51,610 --> 00:03:53,430 >> Ruby is niet een gecompileerde taal. 58 00:03:53,430 --> 00:03:55,550 Dus dat is een opluchting. 59 00:03:55,550 --> 00:03:59,350 Het is meer vergelijkbaar met PHP, waar het is een geïnterpreteerde taal. 60 00:03:59,350 --> 00:04:03,570 U kunt elke Ruby script dat schrijf je met Ruby gevolgd 61 00:04:03,570 --> 00:04:07,380 door de naam van uw script of programma. 62 00:04:07,380 --> 00:04:13,000 Aan te geven dat het een Ruby programma, je gewoon eindigen met .RB in plaats van .c. 63 00:04:13,000 --> 00:04:17,440 Er zijn variabel sized arrays in Ruby, 64 00:04:17,440 --> 00:04:23,200 dat is super handig als u bent schrapen en misschien wilt toevoegen 65 00:04:23,200 --> 00:04:26,090 gegevens die u hebt geschraapt in een array. 66 00:04:26,090 --> 00:04:31,960 Je hoeft niet naar een nieuwe array malloc en Kopieer de oude serie in de nieuwe array. 67 00:04:31,960 --> 00:04:36,150 Je kunt gewoon voegen met de twee pijl tekenen. 68 00:04:36,150 --> 00:04:39,820 En er zijn geen tekens, is er slechts één letter snaren. 69 00:04:39,820 --> 00:04:44,760 Dus dat moet een beetje gemakkelijker. 70 00:04:44,760 --> 00:04:50,130 >> Dus we zullen gewoon je sommige geven voorbeelden van een aantal fundamentele Ruby syntax. 71 00:04:50,130 --> 00:04:57,100 Dus hier kun je dat in plaats van te zien de slash slash, te reageren in Ruby, 72 00:04:57,100 --> 00:04:58,740 je gewoon gebruik maken van de hekje. 73 00:04:58,740 --> 00:05:04,990 En variabele verklaring u typt u de variabele gelijken 74 00:05:04,990 --> 00:05:07,971 wat je wilt het variabel te zijn. 75 00:05:07,971 --> 00:05:09,220 Ze kunnen strings. 76 00:05:09,220 --> 00:05:14,120 U kunt array, hebben die je vullen met waarden. 77 00:05:14,120 --> 00:05:17,240 puts en prenten zijn vergelijkbaar. 78 00:05:17,240 --> 00:05:20,110 Voor onze doeleinden, de enige verschil is echt 79 00:05:20,110 --> 00:05:25,500 dat stelt, wat staat voor zet, maar zet een nieuwe lijn 80 00:05:25,500 --> 00:05:27,440 teken op wat u afdrukt. 81 00:05:27,440 --> 00:05:30,980 >> Dus als we een kleine demonstratie hier, 82 00:05:30,980 --> 00:05:41,800 we kunnen lopen deze met-- opent een nieuwe terminal. 83 00:05:41,800 --> 00:05:46,020 U kunt al deze te zien bestanden die zijn in mijn terminal. 84 00:05:46,020 --> 00:05:50,960 En als ik het alleen nog maar Ruby, Ruby intro.rb het 85 00:05:50,960 --> 00:05:53,530 steekt vijf Hallo Mather, Quincy, Carrier. 86 00:05:53,530 --> 00:05:54,410 Adams. 87 00:05:54,410 --> 00:05:59,295 Dus dat is alles wat er is te verklaren arrays. 88 00:05:59,295 --> 00:06:01,670 PUBLIEK: Robert, kunt u lettertype een beetje 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 ik kan inzoomen, want je kunt niet inzoomen op terminal fonts blijkbaar. 92 00:06:12,280 --> 00:06:18,790 93 00:06:18,790 --> 00:06:24,630 >> Dus dat is hoe u afdrukt variabelen om uw terminal. 94 00:06:24,630 --> 00:06:28,820 U kunt ook gebruik maken variabelen in een string. 95 00:06:28,820 --> 00:06:33,720 Zo kort geleden in PHP, je zou kunnen hebben geleerd 96 00:06:33,720 --> 00:06:37,340 dat er snaar interpolatie. 97 00:06:37,340 --> 00:06:43,830 Dus als je hier een kijkje nemen, als ik verklaren drie variabelen, naam, bibliotheek, 98 00:06:43,830 --> 00:06:49,700 en taal, en ik zet, I schrijf een string, Hallo mijn naam is. 99 00:06:49,700 --> 00:06:54,190 En dan in plaats van de PHP versie van de string interpolatie 100 00:06:54,190 --> 00:06:58,960 die ziet er een beetje meer als dit, heb je een hekje, en vervolgens 101 00:06:58,960 --> 00:07:01,220 een accolade, en vervolgens de naam van de variabele. 102 00:07:01,220 --> 00:07:07,350 En dat is hoe je zou afdrukken, zeggen: ongeacht de naam van de variabele is. 103 00:07:07,350 --> 00:07:10,140 >> En dan kunt u ook aaneenschakelen strings. 104 00:07:10,140 --> 00:07:12,890 Ruby maakt het super gemakkelijk met het plusteken. 105 00:07:12,890 --> 00:07:16,110 Je hoeft alleen maar één snaar links plus een variabele 106 00:07:16,110 --> 00:07:18,860 of een andere string en een string. 107 00:07:18,860 --> 00:07:23,500 Dus als ik print deze uit, het moet gewoon zeggen Hallo, mijn naam is Robert. 108 00:07:23,500 --> 00:07:27,340 Ik zal onderwijzen u nokogiri in Ruby. 109 00:07:27,340 --> 00:07:35,370 >> En laten we gewoon bevestigen dat is inderdaad de case-- robijn intro. 110 00:07:35,370 --> 00:07:36,480 Hallo, mijn naam is Robert. 111 00:07:36,480 --> 00:07:40,160 Ik zal onderwijzen u nokogiri in Ruby. 112 00:07:40,160 --> 00:07:45,600 >> Moving on, als andere verklaringen, het is een beetje anders 113 00:07:45,600 --> 00:07:49,800 van wat je zou kunnen worden gebruikt om Als je hebt gewerkt in C. 114 00:07:49,800 --> 00:07:53,200 U hoeft niet de haakjes nodig. 115 00:07:53,200 --> 00:07:55,220 U niet de accolades nodig. 116 00:07:55,220 --> 00:08:00,170 En in plaats van else if, het is een aaneengeschakelde elsif. 117 00:08:00,170 --> 00:08:07,260 Dus hier, als ik heb verklaard x up hier, zoals we kunnen zien, is nog steeds 5 x. 118 00:08:07,260 --> 00:08:11,100 Dus als x minder dan 3, zal het kleine zetten. 119 00:08:11,100 --> 00:08:14,030 Als het minder dan 7, medium, anders groot. 120 00:08:14,030 --> 00:08:17,340 Dus 5 is een medium getal. 121 00:08:17,340 --> 00:08:22,270 En ik eind dit blok code met einde. 122 00:08:22,270 --> 00:08:24,920 >> Hier is mijn lus. 123 00:08:24,920 --> 00:08:28,240 En deze syntaxis ook een beetje anders. 124 00:08:28,240 --> 00:08:33,500 De 0 tot vijf gewoon hoofdzaak is te verklaren een arrays van 0-5. 125 00:08:33,500 --> 00:08:36,120 Er is dus vijf gleuven in de array. 126 00:08:36,120 --> 00:08:40,500 En daarna voor elke sleuf, dat array, zal ik verhogen i. 127 00:08:40,500 --> 00:08:46,080 Zo moet deze druk 0-5 of 0-4. 128 00:08:46,080 --> 00:08:49,630 En dit moet medium afgedrukt. 129 00:08:49,630 --> 00:08:51,370 >> En ik zal gewoon blaze door. 130 00:08:51,370 --> 00:08:54,466 Jullie zullen toegang hebben deze code later. 131 00:08:54,466 --> 00:08:55,965 Dus jullie kunnen deze zelf uit te voeren. 132 00:08:55,965 --> 00:09:02,090 133 00:09:02,090 --> 00:09:06,620 >> Dus dit is je basis, terwijl lus. 134 00:09:06,620 --> 00:09:12,230 Dit zal gewoon afdrukken j, verhogen met 1 tot we hit 5. 135 00:09:12,230 --> 00:09:18,320 >> Super snel Ruby spoedcursus over hoe een functie te schrijven. 136 00:09:18,320 --> 00:09:24,460 In plaats van, zeg, int factoriële nummer, we hebben gewoon def. 137 00:09:24,460 --> 00:09:28,450 En in wezen je bent definiëren van een functie in. 138 00:09:28,450 --> 00:09:30,600 Dit gaat het worden naam van de functie, 139 00:09:30,600 --> 00:09:34,280 en dit is van variabelen die u wil overgaan in de functie. 140 00:09:34,280 --> 00:09:36,760 U kunt als verklaringen binnen te hebben. 141 00:09:36,760 --> 00:09:38,030 U kunt terugkeren. 142 00:09:38,030 --> 00:09:42,620 In dit geval zijn we definieert een recursief 143 00:09:42,620 --> 00:09:45,000 geïmplementeerd faculteit-functie. 144 00:09:45,000 --> 00:09:48,660 Dus we gewoon bellen functies in Ruby als deze. 145 00:09:48,660 --> 00:09:54,700 >> Dus als ik heb dit, ik gedefinieerd kan faculteit noemen, pas in 3, 146 00:09:54,700 --> 00:09:59,700 en 3 zal het aantal variabele die ik kan gebruiken in de functie. 147 00:09:59,700 --> 00:10:08,010 En dit to_s is gewoon het draaien van de waarde van de faculteit terug in een string. 148 00:10:08,010 --> 00:10:10,760 Anders zal dit gooien een fout zeggend oh, ik 149 00:10:10,760 --> 00:10:13,230 kan een string-- niet afdrukken want zoals u herinneren, 150 00:10:13,230 --> 00:10:18,230 puts wordt string-- gezet omdat deze factorieel een aantal teruggekeerd. 151 00:10:18,230 --> 00:10:21,850 Dus we kunnen zetten dat een string als zodanig. 152 00:10:21,850 --> 00:10:27,856 En omgekeerd, dan kunt u ook converteren een string naar een integer met to_i. 153 00:10:27,856 --> 00:10:32,650 >> Dus het maken van alles super simpel, als ik dit alleen maar commentaar, opslaan 154 00:10:32,650 --> 00:10:36,250 en uitvoeren van de faculteit-functie. 155 00:10:36,250 --> 00:10:39,850 We moeten in staat zijn om te zien dat de faculteit van 3 is 6. 156 00:10:39,850 --> 00:10:42,790 En dat is inderdaad waar. 157 00:10:42,790 --> 00:10:46,160 >> Dus dat is uw crash cursus in Ruby. 158 00:10:46,160 --> 00:10:53,550 En nu dat je weet Ruby, kunnen we verder gaan om de basis Nokogiri schrapen opgezet. 159 00:10:53,550 --> 00:10:58,190 In wezen alles wat je hoeft te doen is, Ruby, vereisen de bibliotheken. 160 00:10:58,190 --> 00:11:04,390 En voor onze doeleinden zullen we met behulp van de bibliotheek OpenURI evenals Nokogiri. 161 00:11:04,390 --> 00:11:07,870 En dan wat je doen-- en het zal geven u de syntaxis voor dit-- 162 00:11:07,870 --> 00:11:16,010 is dat je de URL veel te openen als je zou in krul verzoek, dat een C URL. 163 00:11:16,010 --> 00:11:20,330 >> Zodat je de URL van de te nemen de website in kwestie. 164 00:11:20,330 --> 00:11:22,030 Je opslaan in een variabele. 165 00:11:22,030 --> 00:11:27,400 En dan kun je zoeken door dat variabele unieke HTML-tags gebruiken 166 00:11:27,400 --> 00:11:30,590 de .css commando. 167 00:11:30,590 --> 00:11:34,360 En dan kun je de uitgang van de inhoud aan waar u maar wilt. 168 00:11:34,360 --> 00:11:35,720 U kunt starten in een database. 169 00:11:35,720 --> 00:11:42,040 U kunt de output in een file, of zelfs alleen maar af te drukken op het scherm. 170 00:11:42,040 --> 00:11:47,290 >> Dus laten we u zien een basis schraper. 171 00:11:47,290 --> 00:11:52,570 Dus hier kun je zien dat we hebben vereisen nokogiri, vereisen open uri. 172 00:11:52,570 --> 00:11:57,150 Uw basis set-up, laten we noem het document of doc, 173 00:11:57,150 --> 00:12:07,780 evenaart Nokogiri :: HTML geopend, dat is de commando door de OpenURI aan ons heeft 174 00:12:07,780 --> 00:12:08,920 bibliotheek. 175 00:12:08,920 --> 00:12:14,000 En we zullen op zoek gaan, voor die van u die in de quad zou wonen, 176 00:12:14,000 --> 00:12:21,270 voor fietsen die in Boston opgesomd op de fiets sectie Boston Craigslist 177 00:12:21,270 --> 00:12:22,020 website. 178 00:12:22,020 --> 00:12:26,460 >> Dus als je niet bekend bent met krul, zal ik gewoon 179 00:12:26,460 --> 00:12:28,930 laten zien echt snel wat cURL zal doen. 180 00:12:28,930 --> 00:12:38,350 Als ik wilde alles van de URL te krijgen van de Craigslist site, als ik typ krul, 181 00:12:38,350 --> 00:12:44,950 het gewoon dumpt alle URL van de Craigslist fiets website 182 00:12:44,950 --> 00:12:46,720 op mijn terminal. 183 00:12:46,720 --> 00:12:49,130 Dat is niet bijzonder handig omdat ik niet 184 00:12:49,130 --> 00:12:53,330 handmatig wilt gaan door en vind het wat ik zoek. 185 00:12:53,330 --> 00:13:01,590 Maar gewoon zodat u kunt zien dat ik eigenlijk 186 00:13:01,590 --> 00:13:13,966 met behulp van de juiste code, als je kijkt op de URL voor Craigslist in bikes-- 187 00:13:13,966 --> 00:13:17,460 om wat voor reden het is niet gevonden. 188 00:13:17,460 --> 00:13:20,340 Als je kijkt naar deze pagina en je kijkt naar de URL, 189 00:13:20,340 --> 00:13:23,970 Dit dient identiek te zijn aan het cURL verzoek dat ik net te sturen. 190 00:13:23,970 --> 00:13:27,700 En inderdaad, dat is wat het zijn opgeslagen in de doc variabele. 191 00:13:27,700 --> 00:13:36,540 >> Dus als je terug naar onze code, we kan dan werken op dit doc variabele 192 00:13:36,540 --> 00:13:40,660 met behulp van CSS. 193 00:13:40,660 --> 00:13:49,240 Dus zeg ik wilde al krijgen de tags die span.txt zijn, 194 00:13:49,240 --> 00:13:51,740 en alle een-tags binnen die tag. 195 00:13:51,740 --> 00:13:56,150 En waarom zouden we willen dit doen, ik hoor je huilen? 196 00:13:56,150 --> 00:14:02,920 >> Als we Inspecteer Element, het geeft je een geeft uitsplitsing hoe de URL wordt opgebouwd. 197 00:14:02,920 --> 00:14:06,200 Als ik naar beneden scrollen door middel van Hier kunt u zien 198 00:14:06,200 --> 00:14:08,770 wat elk van deze verschillende elementen vertegenwoordigt. 199 00:14:08,770 --> 00:14:13,410 Dus misschien wil ik toegang dit specifieke element. 200 00:14:13,410 --> 00:14:16,820 Dus ik ben met behulp van Chrome developer tools waarmee Inspect Element. 201 00:14:16,820 --> 00:14:22,970 Ik kan hier beneden zien dat dit is een tag binnen een tijdsspanne 202 00:14:22,970 --> 00:14:26,230 tag met een klasse van txt. 203 00:14:26,230 --> 00:14:29,610 >> Dus dit krijgt om onze eerste handeling die 204 00:14:29,610 --> 00:14:37,330 is doc.css spanwijdte, dat is de tag die Ik ben op zoek naar binnen al deze URL. 205 00:14:37,330 --> 00:14:43,650 En dan werkt .txt net als CSS doet wanneer je net het schrijven van CSS 206 00:14:43,650 --> 00:14:49,630 in uw HTML-bestanden het opgeven van een klasse. 207 00:14:49,630 --> 00:14:57,980 Dus deze bijzondere exploitant zal geef een overspanning tag met klasse van txt. 208 00:14:57,980 --> 00:15:02,800 En dan als ik een ruimte te laten, Dit gaat dan binnen die tag 209 00:15:02,800 --> 00:15:05,170 en dan vinden een een tag binnen die. 210 00:15:05,170 --> 00:15:10,750 >> Dus als ik dit alleen maar om te zetten de terminal, moet ik 211 00:15:10,750 --> 00:15:21,630 in staat zijn om in wezen alles te zien dat is binnen dit tijdsbestek van klasse txt. 212 00:15:21,630 --> 00:15:22,890 Dus we zullen geven dat een gaan. 213 00:15:22,890 --> 00:15:25,870 214 00:15:25,870 --> 00:15:27,756 ruby craigslist-schraper. 215 00:15:27,756 --> 00:15:31,850 216 00:15:31,850 --> 00:15:37,250 En inderdaad, dat geeft ons al deze tags van de verschillende aanbiedingen die 217 00:15:37,250 --> 00:15:40,400 zijn op Craigslist pagina. 218 00:15:40,400 --> 00:15:45,670 >> Dus als we terug gaan, kunnen we deze draaien in iets meer bruikbaar. 219 00:15:45,670 --> 00:15:51,050 Misschien willen we gewoon de links. 220 00:15:51,050 --> 00:15:58,790 Want binnen deze tag, zal ik ook de hyperlink van het pad 221 00:15:58,790 --> 00:16:00,590 die deze pagina gaat. 222 00:16:00,590 --> 00:16:09,100 Dus als je kijkt naar deze code hier, wat ik ga doen is in plaats van CSS, 223 00:16:09,100 --> 00:16:12,380 Ik kan gaan at_css. 224 00:16:12,380 --> 00:16:16,820 En dit zal gewoon de eerste element van al die dingen. 225 00:16:16,820 --> 00:16:20,890 Dus als ik om dat te doen in de code ik eerder aangetoond, 226 00:16:20,890 --> 00:16:23,800 in plaats van terug te keren alle dit, het zou gewoon 227 00:16:23,800 --> 00:16:26,850 de eerste van die terugkeren. 228 00:16:26,850 --> 00:16:31,310 Dus dat is hoe het at_css operator werkt. 229 00:16:31,310 --> 00:16:39,460 >> Dus we willen het op te slaan pad gehele eerste een tag. 230 00:16:39,460 --> 00:16:47,430 En omdat ons a-- geven dus we zijn nog steeds te .css gebruiken. 231 00:16:47,430 --> 00:16:53,830 Maar omdat dit gaat geven ons weer een hele reeks van labels, 232 00:16:53,830 --> 00:16:55,710 we gaan de toegang het eerste element. 233 00:16:55,710 --> 00:17:01,700 Dus dit is een andere manier die u kunt toegang tot een bepaald element als je 234 00:17:01,700 --> 00:17:04,810 een reeks elementen die wordt geretourneerd, 235 00:17:04,810 --> 00:17:11,930 omdat je iets kan behandelen die .css keert terug als een array, wezen. 236 00:17:11,930 --> 00:17:16,880 En dan gaan we de toegang hypertextverwijzing attribuut van dit. 237 00:17:16,880 --> 00:17:24,810 >> Dus als je een kijkje nemen, indien je keek hier echt dicht, 238 00:17:24,810 --> 00:17:28,270 als je gewoon wezen kijken naar de URL-balk, 239 00:17:28,270 --> 00:17:33,880 Dit is het pad dat je gaat te schrapen. 240 00:17:33,880 --> 00:17:41,565 Dus als we alleen deze opnieuw uitvoeren, en ervoor zorgen dat we hebben het gered. 241 00:17:41,565 --> 00:17:47,040 242 00:17:47,040 --> 00:17:48,300 U kunt thuis te controleren. 243 00:17:48,300 --> 00:17:51,430 Dit past eigenlijk met deze link. 244 00:17:51,430 --> 00:17:55,950 >> Dus waarom zouden we dit willen gebruiken? 245 00:17:55,950 --> 00:17:57,870 Als u wilt schrapen de pagina en het heeft 246 00:17:57,870 --> 00:18:00,270 een pagina met links, zoals Craigslist doet, je 247 00:18:00,270 --> 00:18:03,210 Misschien wil je dan gaan in elk van deze banden 248 00:18:03,210 --> 00:18:05,120 en vervolgens schraap de inhoud van die, welke 249 00:18:05,120 --> 00:18:08,520 is precies wat we gaan doen. 250 00:18:08,520 --> 00:18:11,660 >> Dus als je eenmaal weg als variabele, ik niet meer echt 251 00:18:11,660 --> 00:18:13,200 zorg over het afdrukken van het uit. 252 00:18:13,200 --> 00:18:15,420 Ik moet gewoon op te slaan als een variabele. 253 00:18:15,420 --> 00:18:20,980 En dan kan ik een andere toegang pagina op dezelfde manier ik toegang 254 00:18:20,980 --> 00:18:22,260 doc in de eerste plaats. 255 00:18:22,260 --> 00:18:25,920 Tenzij met de URL, we gaan string interpolatie 256 00:18:25,920 --> 00:18:29,180 zoals ik beschreef in Ruby eerder te voegen 257 00:18:29,180 --> 00:18:32,010 het pad naar het einde van de wortel. 258 00:18:32,010 --> 00:18:38,970 >> Dus wat dit gaat doen is dit gaat op de weg te zetten 259 00:18:38,970 --> 00:18:42,360 dat ik eerder geschraapt en dan dat 260 00:18:42,360 --> 00:18:49,580 in een nieuw item, wat je wilt noemen het-- first_listing, bijvoorbeeld. 261 00:18:49,580 --> 00:18:52,900 Maar ik ga om te vertrekken het op punt voor nu, 262 00:18:52,900 --> 00:18:55,420 want dat is wat ik hier gebruikt. 263 00:18:55,420 --> 00:19:02,900 >> Dus zeg ik wilde de beschrijving krijgen van de eerste detachering in Craigslist. 264 00:19:02,900 --> 00:19:04,740 Dus ik zou hier beneden te gaan. 265 00:19:04,740 --> 00:19:10,660 Ik zou op Inspect Element opnieuw, omdat dit de beschrijving. 266 00:19:10,660 --> 00:19:14,350 Ik zou hier beneden gaan en te zien als ik kan vinden hoe ik zou 267 00:19:14,350 --> 00:19:16,530 in staat zijn om te zoeken naar deze unieke tag. 268 00:19:16,530 --> 00:19:19,530 En in dit geval, heeft een ID, die ons leidt 269 00:19:19,530 --> 00:19:26,810 naar onze volgende manier van zoeken naar labels, die met een hashtag. 270 00:19:26,810 --> 00:19:30,670 >> Dus voor de klassen, kunt u gebruik maken van de puntoperator. 271 00:19:30,670 --> 00:19:38,610 Dus .txt specificeert een klasse van txt, terwijl de hash specificeert een ID. 272 00:19:38,610 --> 00:19:43,720 Dus in dit geval, de tag is sectie, en de ID is postingbody. 273 00:19:43,720 --> 00:19:47,780 >> Dus dit gaat en vindt de first-- omdat we 274 00:19:47,780 --> 00:19:51,200 gebruik at_css-- dit gaat en vindt het eerste element dat 275 00:19:51,200 --> 00:19:57,180 komt met de tag van de sectie en de ID van postingbody. 276 00:19:57,180 --> 00:20:02,636 En dan kun je toegang krijgen tot de tekst element van dat punt terug met .text. 277 00:20:02,636 --> 00:20:06,230 En dan kunnen we opslaan die in de beschrijving. 278 00:20:06,230 --> 00:20:09,370 >> Dus nu hebben we een variabele beschrijving, 279 00:20:09,370 --> 00:20:14,850 we kunnen doen, laten we zeggen, file I / O. Dus file I / O in Ruby 280 00:20:14,850 --> 00:20:21,310 is zeer vergelijkbaar met file I / O in C, waar we een bestand te openen. 281 00:20:21,310 --> 00:20:23,260 We kunnen schrijven. 282 00:20:23,260 --> 00:20:25,060 En dan zullen we dat bestand te sluiten. 283 00:20:25,060 --> 00:20:29,660 >> Dus hier zijn we gewoon de naamgeving van de bestand, een aantal willekeurige variabele. 284 00:20:29,660 --> 00:20:33,120 We zouden ook hebben alleen deze zet hier. 285 00:20:33,120 --> 00:20:39,630 We hebben een variabele die we opslaan de open bestand met File.open. 286 00:20:39,630 --> 00:20:46,370 En we schrijven naar dit bestand, dus we openen het met de w operator. 287 00:20:46,370 --> 00:20:54,280 En dan zetten we string in de bestand met de .puts operator. 288 00:20:54,280 --> 00:20:58,310 En dan zetten we de variabele die we wilt schrijven naar het bestand binnen die. 289 00:20:58,310 --> 00:21:00,200 En dan hebben we net sluit het bestand. 290 00:21:00,200 --> 00:21:04,000 >> Dus als we doorgaan en uitvoeren van deze, dit moet een document 291 00:21:04,000 --> 00:21:10,840 met description.txt die zal hebben deze beschrijving daarin. 292 00:21:10,840 --> 00:21:14,015 Dus als ik zonder het-- niet. 293 00:21:14,015 --> 00:21:17,520 294 00:21:17,520 --> 00:21:23,330 Het produceerde een tekstbestand met, hopelijk hetzelfde. 295 00:21:23,330 --> 00:21:25,850 296 00:21:25,850 --> 00:21:33,290 Dus er kan een nieuwe posting geweest dat is gekomen, terwijl ik heb gesproken. 297 00:21:33,290 --> 00:21:36,580 En inderdaad, het lijkt erop dat er is geweest. 298 00:21:36,580 --> 00:21:43,380 Dus als we naar deze klassieke fiets, 1962-1966, dat lijkt te passen. 299 00:21:43,380 --> 00:21:45,620 En daar ga je. 300 00:21:45,620 --> 00:21:51,250 >> Dus dat is de meest elementaire functionaliteit van schrapen. 301 00:21:51,250 --> 00:21:57,510 We konden plaats hebben van gewoon schrijven naar dit bestand, 302 00:21:57,510 --> 00:21:59,930 kunnen we de dingen toe te voegen aan een array. 303 00:21:59,930 --> 00:22:03,770 Dus als ik verklaar drie arrays, titel, prijs en omschrijving. 304 00:22:03,770 --> 00:22:06,310 305 00:22:06,310 --> 00:22:13,790 En we werken nu op de doc punt. 306 00:22:13,790 --> 00:22:16,940 We kunnen gaan door en vind alle span.txt. 307 00:22:16,940 --> 00:22:21,710 En vergeet niet, dit geeft een array van alle items die het vindt. 308 00:22:21,710 --> 00:22:27,300 En vervolgens in Ruby, dan kunt u gewoon gebruik maken van .Elke te doorlopen elk item 309 00:22:27,300 --> 00:22:28,410 van de matrix. 310 00:22:28,410 --> 00:22:31,330 En dan voor elk item, Ik ga gewoon om het te noemen 311 00:22:31,330 --> 00:22:34,620 een link, want dat is in wezen wat het is. 312 00:22:34,620 --> 00:22:46,830 >> Dus als ik elke link.css dot a.hdrlnk, Dit is in feite gaat om de link 313 00:22:46,830 --> 00:22:58,280 en het vinden binnen die verwijzen andere HTML-element en de bijbehorende klasse. 314 00:22:58,280 --> 00:23:04,990 Dus als we nog wat Dit was de span.txt, 315 00:23:04,990 --> 00:23:13,160 u kunt zien- laat me gewoon terug echte quick-- binnen span.txt 316 00:23:13,160 --> 00:23:17,490 we hebben veel van de andere klassen. 317 00:23:17,490 --> 00:23:27,180 Dus binnen span.txt, zijn wij op zoek voor een tag met een klasse hdrlnk. 318 00:23:27,180 --> 00:23:29,890 Dus laat ik vind gewoon dat voor jullie echt snel. 319 00:23:29,890 --> 00:23:37,390 320 00:23:37,390 --> 00:23:42,850 >> Zodat je hier kunt zien, is dit een een tag dat is binnen de spanwijdte van klasse txt 321 00:23:42,850 --> 00:23:44,920 dat heeft de klasse hdrlnk. 322 00:23:44,920 --> 00:23:47,610 En dat is inderdaad wat we proberen te krijgen. 323 00:23:47,610 --> 00:23:54,680 >> Dus hebben we nu proberen om alle slaan van die links in de titel. 324 00:23:54,680 --> 00:23:59,545 En dan gaan we om af te drukken uit elk van deze banden. 325 00:23:59,545 --> 00:24:00,360 Nee sorry. 326 00:24:00,360 --> 00:24:04,530 We gaan om uit te printen de prijs van elk van deze. 327 00:24:04,530 --> 00:24:09,350 Dus laten we lopen dit werkelijk snelle en zie wat het doet. 328 00:24:09,350 --> 00:24:14,680 329 00:24:14,680 --> 00:24:17,720 >> Dus dit gewoon eigenlijk ging door elk van de verbindingen 330 00:24:17,720 --> 00:24:27,310 op zijn beurt, toegankelijk het label in kwestie, en dan trok de prijs. 331 00:24:27,310 --> 00:24:33,910 En het deed dat, omdat na heb je alles in de titel, 332 00:24:33,910 --> 00:24:37,260 we hebben net opgeslagen de titel daar. 333 00:24:37,260 --> 00:24:40,180 We hebben net opgeslagen op de link binnen de array titel. 334 00:24:40,180 --> 00:24:47,720 En in deze lus operatie, waar in plaats van naar a.hdrlnk, 335 00:24:47,720 --> 00:24:50,490 we zijn op zoek naar een span.price. 336 00:24:50,490 --> 00:24:56,500 Dus als ik kan gewoon echt snel de prijs, als je het element te inspecteren, 337 00:24:56,500 --> 00:25:00,610 je zult zien dat het een overspanning met de klasse van de prijs. 338 00:25:00,610 --> 00:25:04,670 En dat is in wezen hoe krijgen we de prijs daar. 339 00:25:04,670 --> 00:25:10,040 >> Dus dat is het echt fundamentele geval van schrapen. 340 00:25:10,040 --> 00:25:13,550 Dat is hoe je alle de elementen op een pagina 341 00:25:13,550 --> 00:25:16,510 dat, zeg, weet je al de URL van. 342 00:25:16,510 --> 00:25:21,050 >> Dus als we willen krijgen beetje meer in de diepte, 343 00:25:21,050 --> 00:25:23,950 kunnen we pagina's binnen pagina's te schrapen. 344 00:25:23,950 --> 00:25:28,480 En voor dit voorbeeld, zal ik zijn het uitvoeren van een CSV-bestand. 345 00:25:28,480 --> 00:25:39,510 Dus ik ben die csv hier omdat Ruby niet, binnen zelf, 346 00:25:39,510 --> 00:25:42,350 hebben de functionaliteit gewoon uitgang CSV-bestanden. 347 00:25:42,350 --> 00:25:45,030 Dus dat is super eenvoudig. 348 00:25:45,030 --> 00:25:48,710 Laat me gewoon naar de volgende. 349 00:25:48,710 --> 00:25:51,640 350 00:25:51,640 --> 00:25:57,170 Wij vallen file I / O. Dus dit is vergelijkbaar met hoe het in C. 351 00:25:57,170 --> 00:26:00,870 En voordat we overgaan tot Kimono, Ik zal gewoon laten zien hoe erg snel 352 00:26:00,870 --> 00:26:02,790 naar sites binnen bezienswaardigheden schrapen. 353 00:26:02,790 --> 00:26:10,040 >> Dus we al geleerd hoe arrays verklaren Ruby. 354 00:26:10,040 --> 00:26:13,280 Dus ik ben gewoon waarbij een stelletje willekeurige arrays 355 00:26:13,280 --> 00:26:16,310 dat ik zal het opslaan van gegevens binnen. 356 00:26:16,310 --> 00:26:20,680 doc werkt op dezelfde manier net als in het vorige bestand. 357 00:26:20,680 --> 00:26:23,580 We gaan in het vinden elke span.txt's. 358 00:26:23,580 --> 00:26:25,040 We weten al dat. 359 00:26:25,040 --> 00:26:32,130 Dat is de houder waarin elk koppeling heeft alle gegevens die we willen. 360 00:26:32,130 --> 00:26:40,800 >> Dus hier wat we doen is voor elk koppeling van span class txt, we gaan in 361 00:26:40,800 --> 00:26:45,720 en we vinden het een tag, het vinden van het eerste element van. 362 00:26:45,720 --> 00:26:49,937 Vergeet niet, .css geeft een array, dus je kunt niet alleen toegang tot het als het is. 363 00:26:49,937 --> 00:26:51,520 We gaan naar het eerste element te vinden. 364 00:26:51,520 --> 00:26:56,430 Ook al is het een serie van één punt, moet u deze syntaxis gebruiken, 365 00:26:56,430 --> 00:26:58,800 en trek het href attribuut. 366 00:26:58,800 --> 00:27:01,800 >> Dus we hebben dit eerder. 367 00:27:01,800 --> 00:27:04,440 Dus dit moet vertrouwd kijken. 368 00:27:04,440 --> 00:27:14,330 En nu hebben we een array riep paden van al onze links 369 00:27:14,330 --> 00:27:16,590 dat gaan we willen gebruiken. 370 00:27:16,590 --> 00:27:21,350 Dus als we deze array van alle van de paden die we willen gebruiken, 371 00:27:21,350 --> 00:27:26,840 We kunnen dan een item voor elke creëren van die pagina's wanneer we open die pagina. 372 00:27:26,840 --> 00:27:31,150 Zo zagen we ook op de syntax voor, waarbij 373 00:27:31,150 --> 00:27:37,450 doet snaar interpolatie met het pad hier, zodat de syntax is alleen voor pad. 374 00:27:37,450 --> 00:27:41,450 En ik kon deze naam variabele elke willekeurige naam. 375 00:27:41,450 --> 00:27:43,070 >> Dit is de belangrijkste. 376 00:27:43,070 --> 00:27:46,650 Dit is de array die u zult zijn toegang tot elk element. 377 00:27:46,650 --> 00:27:52,400 Maar als je zeggen pad in wegen, Dit betekent dat voor elk element in de paden, 378 00:27:52,400 --> 00:27:55,150 noem het pad, en dat gebruiken. 379 00:27:55,150 --> 00:27:59,266 Dit is in wezen zoals wanneer je doe een lus en u int ik gebruik. 380 00:27:59,266 --> 00:28:04,000 Dus je kunt het pad als de te behandelen variabele dat is het verhogen. 381 00:28:04,000 --> 00:28:07,820 >> En vervolgens voor elk van deze, gaan in elk van deze banden. 382 00:28:07,820 --> 00:28:11,710 Omdat we deze opslaan in punt pagina, dus we zijn het creëren van een nieuwe pagina elke keer 383 00:28:11,710 --> 00:28:13,330 We openen het. 384 00:28:13,330 --> 00:28:20,560 En vervolgens binnen dat nieuwe pagina, vind span.postingtitletext, span.price, 385 00:28:20,560 --> 00:28:22,240 en dan sectie # postingbody. 386 00:28:22,240 --> 00:28:28,430 We hebben al gedekt sectie # postingbody toen we gekeken naar de beschrijving. 387 00:28:28,430 --> 00:28:34,890 >> Dus we kunnen gaan zien in de Craigslist post, als je gewoon op zoek bent naar de titel, 388 00:28:34,890 --> 00:28:38,810 je kunt het hier zien up, overspanning postingtitletext. 389 00:28:38,810 --> 00:28:41,390 En dat is waarom het er is. 390 00:28:41,390 --> 00:28:49,120 En dan voor de prijs, kunt u toegang tot het met span class van de prijs. 391 00:28:49,120 --> 00:28:54,480 >> Dus we misschien ook zou kunnen willen de URL te slaan. 392 00:28:54,480 --> 00:28:58,580 Dus we alleen deze run nogmaals, op te slaan in een array, 393 00:28:58,580 --> 00:29:01,150 want als je op zoek bent op Craigslist, je bent 394 00:29:01,150 --> 00:29:05,290 waarschijnlijk gaat om een ​​manier te willen, als zie je iets dat je interesseert, 395 00:29:05,290 --> 00:29:06,620 ga terug naar die site. 396 00:29:06,620 --> 00:29:10,480 Dus je wilt opslaan de URL naar referenties sake. 397 00:29:10,480 --> 00:29:13,840 398 00:29:13,840 --> 00:29:19,630 >> Dit is slechts in wezen andere syntaxis voor de lus. 399 00:29:19,630 --> 00:29:26,360 Ik kon gewoon niet paths.each plaats voor pad in wegen met index. 400 00:29:26,360 --> 00:29:31,280 En deze syntax is Ruby voor-- pad is wat we deden hier boven, 401 00:29:31,280 --> 00:29:33,920 waarbij een variabele voor elk item. 402 00:29:33,920 --> 00:29:38,540 En de index zich gedraagt ​​als de i in C voor lussen. 403 00:29:38,540 --> 00:29:41,280 Zodat je kunt bijhouden wat de index. 404 00:29:41,280 --> 00:29:45,200 >> Dus hier is slechts een beetje handig ding 405 00:29:45,200 --> 00:29:46,950 voor als je gebruik maakt van de schraper. 406 00:29:46,950 --> 00:29:50,580 Als je schrapen honderden pagina's, om ervoor te zorgen dat het niet opknoping, 407 00:29:50,580 --> 00:29:53,320 het zal gewoon output, Ik ben de toegang tot deze pagina 408 00:29:53,320 --> 00:29:55,960 en ervoor te zorgen dat het is nog steeds voort. 409 00:29:55,960 --> 00:29:59,250 Maar voor onze doeleinden, omdat er is een honderd punten, 410 00:29:59,250 --> 00:30:08,000 Ik ga om slechts drie van hen zodat we niet de tijd om hier. 411 00:30:08,000 --> 00:30:13,040 >> Maar voordat we dat, ik ben gewoon ga je echt snel te laten zien, 412 00:30:13,040 --> 00:30:16,940 Ik zal het uitvoeren van de titel, prijs, beschrijving en URL 413 00:30:16,940 --> 00:30:19,600 van elk van de links die ik heb geschraapt. 414 00:30:19,600 --> 00:30:23,720 En dan is dit nog maar het syntaxis voor het CSV-bibliotheek. 415 00:30:23,720 --> 00:30:25,240 U opent een CSV. 416 00:30:25,240 --> 00:30:27,070 Dit is wat ik ga noemen. 417 00:30:27,070 --> 00:30:29,430 Open het met write do. 418 00:30:29,430 --> 00:30:33,830 En dan wordt het CSV-bestand zijn dat je bent het invoeren van alles in. 419 00:30:33,830 --> 00:30:37,800 Dit is slechts een sanity check voor me om te weten dat het draait. 420 00:30:37,800 --> 00:30:41,240 En dit is mijn sanity check te weten dat het voltooid. 421 00:30:41,240 --> 00:30:46,670 Dus ik ben om de titel in een rij in CSV, prijs, url, beschrijving, 422 00:30:46,670 --> 00:30:49,420 allemaal in rijen in het CSV. 423 00:30:49,420 --> 00:30:53,410 >> Dus als we gaan en uit te voeren dit now-- en ik 424 00:30:53,410 --> 00:31:04,710 ervoor zorgen dat ik het-- hebt opgeslagen plaats van slechts uitvoeren naar de terminal, 425 00:31:04,710 --> 00:31:09,750 we een CSV moeten hebben bestand dat is geproduceerd. 426 00:31:09,750 --> 00:31:13,500 Dus hier kunnen we de CSV zien bestand dat is geproduceerd. 427 00:31:13,500 --> 00:31:19,330 Dit is de uitgang van de scape dat ik net liep. 428 00:31:19,330 --> 00:31:23,030 Zoals je hier kunt zien, Toegang tot pagina 0, 1, 2, 3. 429 00:31:23,030 --> 00:31:27,400 Dit zijn de titels, prijzen, beschrijvingen. 430 00:31:27,400 --> 00:31:31,710 En als we kijken naar deze CSV bestand dat we hebben gegenereerd, 431 00:31:31,710 --> 00:31:35,700 je kunt zien hier zijn uitgevoerd. 432 00:31:35,700 --> 00:31:40,350 Dit is niet van Excel, dus het is niet geformatteerd in rijen en kolommen. 433 00:31:40,350 --> 00:31:45,140 Maar je kunt je voorstellen hoe het zou kunnen worden opgemaakt. 434 00:31:45,140 --> 00:31:47,740 >> CSV staat voor komma's gescheiden waarden. 435 00:31:47,740 --> 00:31:50,090 Dus je kunt voorstellen dat dit misschien een rij zijn. 436 00:31:50,090 --> 00:31:54,700 En elke comma zou geven een aparte kolom. 437 00:31:54,700 --> 00:32:00,010 Gewoon een woord van Voorzichtig- soms moet je bent 438 00:32:00,010 --> 00:32:02,260 schrapen dingen met veel komma's. 439 00:32:02,260 --> 00:32:05,100 Dus als je het uitvoeren het naar een CSV-bestand, 440 00:32:05,100 --> 00:32:10,340 het misschien niet de output van de manier waarop je zou denken. 441 00:32:10,340 --> 00:32:16,770 >> Dus dat is in wezen alles er te schrapen eenvoudige HTML- 442 00:32:16,770 --> 00:32:20,110 pagina's met Nokogiri. 443 00:32:20,110 --> 00:32:26,000 >> Dus internet wezen innovatief als het omhoog is gekomen 444 00:32:26,000 --> 00:32:33,220 met een geautomatiseerde en GUI versie, zij het minder robuust 445 00:32:33,220 --> 00:32:35,540 versie van schrapen verschillende websites. 446 00:32:35,540 --> 00:32:39,060 En voor onze doeleinden Ik zal demonstreren 447 00:32:39,060 --> 00:32:42,920 een Chrome-extensie genaamd Kimono. 448 00:32:42,920 --> 00:32:46,690 En alles wat je hoeft te doen is je navigeren naar de pagina die u wilt schrapen. 449 00:32:46,690 --> 00:32:48,590 U klikt op een veld van belang. 450 00:32:48,590 --> 00:32:51,510 U kalibreert de velden, want het zal automatisch 451 00:32:51,510 --> 00:32:54,360 detecteren wat het denkt u wilt worden schrapen, 452 00:32:54,360 --> 00:32:56,280 en dan moet je gewoon zorgen voor een API. 453 00:32:56,280 --> 00:33:03,700 >> Dus als we waren om het op te demonstreren Craigslist, het zou eigenlijk niet werken. 454 00:33:03,700 --> 00:33:08,290 En dit is wat ik terug zou gaan zegt over dat het niet zo robuust. 455 00:33:08,290 --> 00:33:10,320 Het heeft problemen met het maken van de API. 456 00:33:10,320 --> 00:33:13,400 Maar als een demonstratie van wat het zou doen, 457 00:33:13,400 --> 00:33:17,460 Als u de Chrome-extensie te installeren, alles wat je doet is je er op klikt. 458 00:33:17,460 --> 00:33:21,750 Het Kimonofies de pagina, en dan moet je klik op de wat je wilt script. 459 00:33:21,750 --> 00:33:24,480 >> Dus als ik klik op dat zou het hoogtepunt 460 00:33:24,480 --> 00:33:28,130 wat het denkt dat ik wil zijn afschrapen die pagina. 461 00:33:28,130 --> 00:33:33,660 Dus misschien noem ik deze aanbiedingen. 462 00:33:33,660 --> 00:33:36,430 Dit is hoeveel items die ik heb geselecteerd. 463 00:33:36,430 --> 00:33:43,810 En ik kan bevestigen of ontkennen wat van de andere voorgestelde lijsten 464 00:33:43,810 --> 00:33:49,600 om deze toe te voegen aan wat zal worden geschraapt. 465 00:33:49,600 --> 00:33:52,330 >> Dus nu kunnen we zien dat er honderd items geselecteerd. 466 00:33:52,330 --> 00:33:58,060 Als ik wil een ander veld hebben dat ik wegvagen die voor deze, 467 00:33:58,060 --> 00:34:02,540 zeggen dat ik wil om de prijs te schrapen als goed, dan kan ik hetzelfde doen. 468 00:34:02,540 --> 00:34:06,190 469 00:34:06,190 --> 00:34:11,550 >> Dus hier is een demonstratie van hoe het is veel minder robuust, want nu is het 470 00:34:11,550 --> 00:34:15,050 oppakken van de stad plaats van alleen de prijs die ik wil. 471 00:34:15,050 --> 00:34:16,989 En nu is het opgepikt 200 dingen. 472 00:34:16,989 --> 00:34:19,880 U kunt terug gaan en te verwijderen. 473 00:34:19,880 --> 00:34:21,449 U kunt het opnieuw proberen. 474 00:34:21,449 --> 00:34:24,250 Maar geen garanties. 475 00:34:24,250 --> 00:34:29,909 Dit is hoe het werkt soms. 476 00:34:29,909 --> 00:34:32,969 Zoals u hier ziet, nu zegt het 96 hier. 477 00:34:32,969 --> 00:34:37,000 Het meeste van de verbindingen opgehaald dat u wilt schrapen, maar niet 478 00:34:37,000 --> 00:34:39,280 noodzakelijkerwijs allemaal. 479 00:34:39,280 --> 00:34:43,909 >> Een ander nuttig instrument van Kimono al is kunt u naar Geavanceerde functies 480 00:34:43,909 --> 00:34:47,980 hier, ga naar Advanced en het zal je laten zien 481 00:34:47,980 --> 00:34:53,139 de afbraak van de unieke manier om de HTML 482 00:34:53,139 --> 00:34:54,909 tags die je wilt schrapen. 483 00:34:54,909 --> 00:35:01,450 Dus voor aanbiedingen, als je kijkt naar hier, Als u toegang div p overspanning bestrijken een, 484 00:35:01,450 --> 00:35:06,030 je kunt eigenlijk gewoon gebruik dit in uw Nokogiri code 485 00:35:06,030 --> 00:35:10,780 waarin voordat we hadden span.txt toegang tot elk van de aanbiedingen. 486 00:35:10,780 --> 00:35:13,270 Als ik de tekst wil gewoon binnen de lijsten, 487 00:35:13,270 --> 00:35:18,950 Ik kon ingang div ruimte p ruimte overspanning ruimte spanwijdte van een ruimte, 488 00:35:18,950 --> 00:35:21,570 en het zou hetzelfde effect te bereiken. 489 00:35:21,570 --> 00:35:26,320 En voor degenen onder u die geïnteresseerd zijn in het gebruik van reguliere expressies, 490 00:35:26,320 --> 00:35:31,670 het gebeurt ook geven u de regelmatige expressie soort touw om input 491 00:35:31,670 --> 00:35:34,900 om de dingen te vinden je probeert te vinden. 492 00:35:34,900 --> 00:35:44,130 >> Dus er is nog een leuke functie van Kimono, waar u kunt pagineren, 493 00:35:44,130 --> 00:35:47,780 die niet alleen ik schrapen de resultaten van deze pagina 494 00:35:47,780 --> 00:35:50,890 Ik kan u op dit kleine hier button, paginering, 495 00:35:50,890 --> 00:35:55,580 geef de knop die zou neem me naar de volgende pagina, 496 00:35:55,580 --> 00:35:59,500 en dan zal het gewoon weten dat het kan herhalen naar de volgende pagina, 497 00:35:59,500 --> 00:36:04,120 en dan al the-- zolang schrapen want het is het zelfde formaat van course-- 498 00:36:04,120 --> 00:36:06,110 scape al die banden ook. 499 00:36:06,110 --> 00:36:15,230 >> Dus omdat Kimono niet wil werken met Craigslist, wat we gedaan hebben 500 00:36:15,230 --> 00:36:19,790 is Ik heb Kimonofied de Harvard Crimson. 501 00:36:19,790 --> 00:36:29,380 Ik heb trok een aantal van de soort top aanbevolen artikelen, bevestig hier. 502 00:36:29,380 --> 00:36:33,090 Stel dat al deze. 503 00:36:33,090 --> 00:36:35,830 Ik heb deze API gecompileerd voor u van tevoren. 504 00:36:35,830 --> 00:36:38,990 Maar anders wat u zou doen is dat je zou gewoon op Gereed. 505 00:36:38,990 --> 00:36:40,940 Voer uw API details. 506 00:36:40,940 --> 00:36:45,260 Zet hem om ofwel automatische of handmatige kruipen. 507 00:36:45,260 --> 00:36:48,460 Dus je zou kunnen werken en uw gegevens elke 15 minuten, 508 00:36:48,460 --> 00:36:50,330 wekelijks, dagelijks, wat je wilt. 509 00:36:50,330 --> 00:36:51,160 Noem uw API. 510 00:36:51,160 --> 00:36:52,790 Maak de API. 511 00:36:52,790 --> 00:36:58,460 Voor uw voordeel, ik heb gemaakt van de Crimson voorpagina API al. 512 00:36:58,460 --> 00:37:02,480 >> Dus je gewoon zorgen voor een aanspreken op Kimono, en het 513 00:37:02,480 --> 00:37:06,240 zullen al uw API's voor u opslaan. 514 00:37:06,240 --> 00:37:10,330 Dus in wezen, dat is allemaal jouw aparte verschillende schaafwonden. 515 00:37:10,330 --> 00:37:18,250 >> Dus als we hier kijken, dit is de adviezen links die ik heb verzameld. 516 00:37:18,250 --> 00:37:21,290 Dit zijn de aanbevolen links die ik heb verzameld. 517 00:37:21,290 --> 00:37:24,090 En dit zijn de meest gelezen links die ik heb verzameld 518 00:37:24,090 --> 00:37:27,120 van deze meest recente API scape. 519 00:37:27,120 --> 00:37:30,790 >> Dus als je hier kunt zien, Deze zou de aanbevolen, 520 00:37:30,790 --> 00:37:34,130 deze zouden de adviezen, die in dit voorbeeld 521 00:37:34,130 --> 00:37:38,150 Ik heb ze allemaal gecombineerd in één collectie. 522 00:37:38,150 --> 00:37:42,780 Maar als je gewoon rond spelen met het een beetje, kunt u het opsplitsen 523 00:37:42,780 --> 00:37:45,090 en verdeel het op hoe u wilt zo lang 524 00:37:45,090 --> 00:37:47,520 zoals de opmaak is iets anders. 525 00:37:47,520 --> 00:37:51,320 >> Gewoon rond te spelen met deze, de crawl opgericht, een van de nadelen 526 00:37:51,320 --> 00:37:58,120 is kunt u alleen kruipen tot 25 pagina's tegelijk. 527 00:37:58,120 --> 00:38:00,430 Dat is één van de beperkende factoren. 528 00:38:00,430 --> 00:38:03,060 Maar hier, als u het handmatige kruipen, dit 529 00:38:03,060 --> 00:38:06,100 is hoe je het kan vertellen om uw gegevens bij te werken. 530 00:38:06,100 --> 00:38:11,010 En hier kunt u uw crawl geschiedenis zien van alles wat je hebt doorzocht. 531 00:38:11,010 --> 00:38:16,000 En jullie terug kunt gaan, aanmelden, spelen met alle verschillende manieren 532 00:38:16,000 --> 00:38:20,340 die u kunt aanpassen en gebruiken van uw gegevens. 533 00:38:20,340 --> 00:38:24,580 >> Kimono kan worden ingesteld om schrapen links binnen koppelingen. 534 00:38:24,580 --> 00:38:29,700 En zou je dat doen door eerst schrapen een lijst met links, 535 00:38:29,700 --> 00:38:35,390 en vervolgens met behulp van dat API als jump off point voor een andere API 536 00:38:35,390 --> 00:38:36,710 dat u het script te maken. 537 00:38:36,710 --> 00:38:42,040 Maar dat is ingewikkelder dan wat we gaan krijgen in vandaag. 538 00:38:42,040 --> 00:38:44,270 >> Dus dat is Kimono. 539 00:38:44,270 --> 00:38:46,980 We praten over de voors en tegens van Nokogiri en Kimono. 540 00:38:46,980 --> 00:38:50,380 >> Nokogiri, het is echt snel. 541 00:38:50,380 --> 00:38:51,640 Het is makkelijk om te testen. 542 00:38:51,640 --> 00:38:55,910 Je kunt gewoon zet iets te console, eenvoudig te configureren. 543 00:38:55,910 --> 00:39:00,400 U kunt zelf bepalen wat u wilt schrapen en op te slaan. 544 00:39:00,400 --> 00:39:02,060 Er zijn geen pagina grenzen. 545 00:39:02,060 --> 00:39:08,010 Ik heb eigenlijk gebruikte het te schrapen, zoals 1800 Zuid-Afrikaanse scholen websites 546 00:39:08,010 --> 00:39:10,870 voor e-mails voor een stage die ik deed. 547 00:39:10,870 --> 00:39:16,060 >> Dus dat is mogelijk, maar de beste praktijken zou zijn om te splitsen het script. 548 00:39:16,060 --> 00:39:19,310 Want als het niet lukt, dan je niets te krijgen. 549 00:39:19,310 --> 00:39:22,790 Maar als je een honderd, misschien 200 pagina's tegelijk, 550 00:39:22,790 --> 00:39:27,840 dan heb je een kans van ten minste krijgen van het stukje bij beetje, in het bijzonder 551 00:39:27,840 --> 00:39:30,280 als je slechte internet. 552 00:39:30,280 --> 00:39:32,720 >> Helaas kan alleen schrapen HTML. 553 00:39:32,720 --> 00:39:35,190 Dus als je dynamisch geladen pages-- 554 00:39:35,190 --> 00:39:39,480 en ik zal je een voorbeeld zien als Kayak in een second-- 555 00:39:39,480 --> 00:39:42,270 Nokogiri helaas kan niet schrapen dat. 556 00:39:42,270 --> 00:39:45,700 >> Kimono, maar is ook gemakkelijk te gebruiken. 557 00:39:45,700 --> 00:39:48,330 Zoals je zag, het is in wezen een punt en klik. 558 00:39:48,330 --> 00:39:50,260 Het kan schrapen JavaScript. 559 00:39:50,260 --> 00:39:53,790 Helaas, er is een maximum hoeveel pagina's u kunt schrapen. 560 00:39:53,790 --> 00:39:55,710 Soms is het een beetje moeilijk te configureren. 561 00:39:55,710 --> 00:39:57,240 Het wordt in de war. 562 00:39:57,240 --> 00:40:00,920 Maar het is zeker iets om te overwegen 563 00:40:00,920 --> 00:40:05,930 als je niet proberen om een ​​hebben super robuust onderhoudbaar schrapen. 564 00:40:05,930 --> 00:40:09,010 Als je gewoon wilt krijgen alles uit van een pagina snel, 565 00:40:09,010 --> 00:40:10,970 dan Kimono is een echt goed hulpmiddel om te gebruiken. 566 00:40:10,970 --> 00:40:16,490 En zoals ik al eerder zei, is er de geavanceerde functie van Kimono 567 00:40:16,490 --> 00:40:19,260 dat laat zien hoe u toegang tot unieke HTML 568 00:40:19,260 --> 00:40:24,210 element, die super handig zelfs als je werkt in Nokogiri. 569 00:40:24,210 --> 00:40:30,370 >> Dus als we naar de Kayak website, Zo kunt u daar zien is-- 570 00:40:30,370 --> 00:40:31,750 of misschien kun je niet zien. 571 00:40:31,750 --> 00:40:38,910 Maar als ik u de URL van Kayak, Dit is eigenlijk gewoon de bron URL. 572 00:40:38,910 --> 00:40:43,800 Dit is de URL alvorens te worden gewijzigd door wat JavaScript-scripts 573 00:40:43,800 --> 00:40:45,350 dat ze aan de hand. 574 00:40:45,350 --> 00:40:52,420 En het gaat er anders uitzien van het inspecteren van het element. 575 00:40:52,420 --> 00:40:55,940 >> Dus als je door te gaan en je overeenkomen met de Inspect Element 576 00:40:55,940 --> 00:41:00,340 code om de broncode, het is daadwerkelijk gaat om anders te zijn. 577 00:41:00,340 --> 00:41:05,640 En dit is in wezen de reden waarom Nokogiri kan niet schrapen dynamisch geladen sites. 578 00:41:05,640 --> 00:41:08,810 Omdat Nokogiri is schrapen de bron URL, 579 00:41:08,810 --> 00:41:16,310 terwijl Kimono is eigenlijk schrapen wat je in wezen bent 580 00:41:16,310 --> 00:41:18,260 seeing in Select Element. 581 00:41:18,260 --> 00:41:23,880 >> Dus als ik ga door en ik proberen en Kimonofy Kayak, 582 00:41:23,880 --> 00:41:26,600 Ik kan eigenlijk gaan door en selecteer de prijs. 583 00:41:26,600 --> 00:41:32,360 Het is een beetje moeilijker, en in dit geval is 584 00:41:32,360 --> 00:41:36,600 eigenlijk het zien van deze prijs als verschillend van deze. 585 00:41:36,600 --> 00:41:41,110 Dus terwijl u kunt configure-- of als dit niet dynamisch geladen, 586 00:41:41,110 --> 00:41:43,620 je zou Nokogiri configureren al deze items. 587 00:41:43,620 --> 00:41:48,230 >> Omdat de opmaak is iets verschillend voor deze aanbieding 588 00:41:48,230 --> 00:41:51,280 als het wordt vergeleken met de rest van hen, en je kunt hier zien 589 00:41:51,280 --> 00:41:54,830 het is eigenlijk verdwenen en geselecteerd alle prijzen van vluchten het. 590 00:41:54,830 --> 00:42:01,200 Misschien wil ik om te selecteren tijd van de vlucht ook. 591 00:42:01,200 --> 00:42:04,700 En ik kan gaan door en soort configureren dat. 592 00:42:04,700 --> 00:42:06,950 Ik wil dat niet. 593 00:42:06,950 --> 00:42:10,200 Ik wil gewoon de tijd van de volgende vlucht is. 594 00:42:10,200 --> 00:42:17,030 En dan na een paar van deze doormaakt, krijgt het beeld. 595 00:42:17,030 --> 00:42:19,080 Dus Kimono's behoorlijk slim. 596 00:42:19,080 --> 00:42:21,900 Het is gewoon niet zo robuust. 597 00:42:21,900 --> 00:42:26,710 >> Er zijn een aantal andere alternatieven die u kunt gebruiken. 598 00:42:26,710 --> 00:42:31,600 En ik zal je ze hier laten zien. 599 00:42:31,600 --> 00:42:35,790 Als u meer comfortabel in Python in plaats van Ruby misschien, 600 00:42:35,790 --> 00:42:39,290 er is een bibliotheek genaamd Beautiful Soup. 601 00:42:39,290 --> 00:42:40,430 U kunt gebruiken. 602 00:42:40,430 --> 00:42:42,270 Het is zeer vergelijkbaar met Nokogiri. 603 00:42:42,270 --> 00:42:44,620 Het heeft een paar meer functies. 604 00:42:44,620 --> 00:42:52,160 U kunt een HTML-tag te vinden en vervolgens omhoog of zijwaarts bewegen. 605 00:42:52,160 --> 00:42:54,690 >> Er is PyQt. 606 00:42:54,690 --> 00:42:57,820 Dit kan eigenlijk schrapen dynamische sites, want het is een soort van 607 00:42:57,820 --> 00:43:02,540 is een WebKit die pretendeert te zijn een browser zonder daadwerkelijk 608 00:43:02,540 --> 00:43:03,670 wordt een browser. 609 00:43:03,670 --> 00:43:07,490 Zo zou wachten tot alle JavaScript om eerst te laden, en dan 610 00:43:07,490 --> 00:43:09,560 gaan en probeer en schraap de site. 611 00:43:09,560 --> 00:43:13,560 >> Als je wilt aan de stok met Ruby, je kan een niveau uit Nokogiri gaan. 612 00:43:13,560 --> 00:43:17,650 U kunt Capybara gebruiken een Poltergeist wrapper. 613 00:43:17,650 --> 00:43:22,910 En dit kan eigenlijk in wezen hetzelfde doen 614 00:43:22,910 --> 00:43:26,610 als PyQt, dat is het een WebKit. 615 00:43:26,610 --> 00:43:29,610 Het wacht op de JavaScript om eerst te laden. 616 00:43:29,610 --> 00:43:33,340 Als je knoeien met het genoeg, je kunt zelfs krijgen om te klikken op de dingen. 617 00:43:33,340 --> 00:43:42,780 >> Dus als er een link die is niet een klassieke href waarbij 618 00:43:42,780 --> 00:43:46,350 het pad is gemakkelijk te bereiken, en het is wat JavaScript ding dat detecteert 619 00:43:46,350 --> 00:43:49,490 een klik, kun je eigenlijk doen. 620 00:43:49,490 --> 00:43:53,430 De meer populaire bibliotheek een gebruiker simuleren 621 00:43:53,430 --> 00:43:56,390 is in JavaScript, dat is PhantomJS. 622 00:43:56,390 --> 00:44:01,010 Dit kan uiteraard dynamische schrapen sites, omdat dit in wezen 623 00:44:01,010 --> 00:44:04,270 voorwenden om Chrome zonder dat de gebruikersinterface. 624 00:44:04,270 --> 00:44:09,970 >> En dan natuurlijk de meest robuuste, maar langzaamste optie, 625 00:44:09,970 --> 00:44:13,260 Selenium is een browser automatisering. 626 00:44:13,260 --> 00:44:15,550 En helaas, je bent niet van plan om 627 00:44:15,550 --> 00:44:19,770 in staat om dit te doen binnen uw CS50 IDE. 628 00:44:19,770 --> 00:44:24,140 Want in wezen wat het doet is het laarzen omhoog uw Chrome, 629 00:44:24,140 --> 00:44:27,090 Firefox, welke browser die u wilt gebruiken, 630 00:44:27,090 --> 00:44:32,570 en volgt misschien uw muis beweging, wat je typt, 631 00:44:32,570 --> 00:44:35,170 en het gewoon een soort van automatiseert dit proces. 632 00:44:35,170 --> 00:44:42,070 Zo werd ontwikkeld als een soort website automatisering testing tool. 633 00:44:42,070 --> 00:44:45,910 Maar veel mensen gebruiken Selenium om websites te schrapen 634 00:44:45,910 --> 00:44:49,990 dat zij anders een veel moeite schrapen 635 00:44:49,990 --> 00:44:53,700 met sommige andere, snellere gereedschappen. 636 00:44:53,700 --> 00:44:57,530 >> Dus dat is alles wat ik heb voor web schrapen. 637 00:44:57,530 --> 00:44:58,090 Plezier hebben. 638 00:44:58,090 --> 00:45:01,762 639 00:45:01,762 --> 00:45:02,680 >> Publiek: Vraag. 640 00:45:02,680 --> 00:45:04,016 >> ROBERT KRABEK: Ja. 641 00:45:04,016 --> 00:45:12,840 >> PUBLIEK: Is er een mechanisme om hash de website, zodat je kon eigenlijk 642 00:45:12,840 --> 00:45:14,207 gaan door het later op. 643 00:45:14,207 --> 00:45:15,040 ROBERT KRABEK: Ja. 644 00:45:15,040 --> 00:45:21,530 Dus hebben we de, in onze Bijvoorbeeld, voor beiden, 645 00:45:21,530 --> 00:45:24,980 we de hele website in doc. 646 00:45:24,980 --> 00:45:31,260 En dus zou je eigenlijk gewoon de variabele doc en schrijven naar een bestand. 647 00:45:31,260 --> 00:45:35,490 Dus als ik wilde, kon ik schrijf het uit als een HTML-bestand, 648 00:45:35,490 --> 00:45:39,280 en vervolgens in plaats van OpenURI en een cURL verzoek 649 00:45:39,280 --> 00:45:43,520 dan kon ik gewoon openstellen doc HTML en dan zoeken naar dat. 650 00:45:43,520 --> 00:45:47,960 >> Publiek: Maar kun je bewaren het soort van online ervaring 651 00:45:47,960 --> 00:45:48,930 terwijl je offline doen. 652 00:45:48,930 --> 00:45:51,013 Bijvoorbeeld. als je die enkele uren, 653 00:45:51,013 --> 00:45:54,070 Ik wil eigenlijk archief de hele website. [ONHOORBAAR] 654 00:45:54,070 --> 00:45:58,780 >> ROBERT KRABEK: Ja, dat is exactly-- dus letterlijk wat dit doet 655 00:45:58,780 --> 00:46:03,010 wordt het neemt alles dat zou op deze URL. 656 00:46:03,010 --> 00:46:11,280 Dus als we liepen krullen, het is het nemen van dit alles HTML, 657 00:46:11,280 --> 00:46:14,590 en het is op te slaan in het variabele document. 658 00:46:14,590 --> 00:46:17,290 Dus dan kun je doen wat je wilt doen met doc. 659 00:46:17,290 --> 00:46:18,575 U kan de uitgang naar een bestand. 660 00:46:18,575 --> 00:46:19,950 Publiek: Maar het is niet aan elkaar gekoppeld. 661 00:46:19,950 --> 00:46:20,780 Het is niet dynamisch. 662 00:46:20,780 --> 00:46:22,770 Het is niet recursief, toch? 663 00:46:22,770 --> 00:46:24,016 Zie je wat ik bedoel? 664 00:46:24,016 --> 00:46:28,359 Ik probeer in feite een soort van hash de hele website op mijn harde schijf 665 00:46:28,359 --> 00:46:31,150 zodat ik in principe zou kunnen doen enkele uren zonder internet. 666 00:46:31,150 --> 00:46:32,025 >> ROBERT KRABEK: Recht. 667 00:46:32,025 --> 00:46:37,140 Dus als ik had-- dus waar is mijn dossier I / O? 668 00:46:37,140 --> 00:46:47,766 Dus dit is het bestand I / O. Dus in plaats daarvan zeggen dit noem ik dit craigslist.html. 669 00:46:47,766 --> 00:46:52,620 670 00:46:52,620 --> 00:46:53,940 Ik zou openen dat op. 671 00:46:53,940 --> 00:46:59,020 Ik zou zet doc in. 672 00:46:59,020 --> 00:47:00,470 Ik sluit het bestand. 673 00:47:00,470 --> 00:47:05,410 En dan alleen omdat de CS50 IDE is op de wolk, dat is wat. 674 00:47:05,410 --> 00:47:07,710 Ik kan hier gaan. 675 00:47:07,710 --> 00:47:09,320 Ik kan het bestand te downloaden. 676 00:47:09,320 --> 00:47:11,830 En dan zou dat op mijn harde schijf. 677 00:47:11,830 --> 00:47:13,930 Dus je kunt het op die manier. 678 00:47:13,930 --> 00:47:18,830 Of als u thuis bent, niet met behulp van de CS50 IDE, zoals Sublime of iets, 679 00:47:18,830 --> 00:47:21,900 dit is nog eenvoudiger, omdat dit is allemaal lokaal beschikbaar, 680 00:47:21,900 --> 00:47:23,020 niet gebonden aan het internet. 681 00:47:23,020 --> 00:47:24,720 >> Publiek: Ik zie. 682 00:47:24,720 --> 00:47:26,580 Dit is een bijzonder probleem. 683 00:47:26,580 --> 00:47:30,410 Kun je het recursief te doen, zodat u ga meerdere lagen diep soort dingen? 684 00:47:30,410 --> 00:47:33,801 >> ROBERT KRABEK: Ik kan mappen downloaden zo goed, als dat is wat je vraagt. 685 00:47:33,801 --> 00:47:34,426 Publiek: 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