[Música tocando] ROBERT KRABEK: Ola, persoal. O meu nome é Robert Krabek, e I estará ensinándolle caras como raspar a web con Nokogiri, que é unha biblioteca Ruby, e Kimono, que é unha extensión de Chrome. Entón, primeiro hai unha Algunhas cousas que pode facer se cadra fose facendo todas as Serie de exercicios ata agora eo seu espazo de traballo é quedando un pouco cheo. De feito, podemos só ir e crear un novo espazo de traballo para ti só para facer un novo proxecto no. Entón, se quere continuar traballando na identificación do modelo CS50 que ten actualmente, Sinto-se libre, e pode só instalar Nokogiri con CFLAGS gem equals-- instalar nokogiri. Pero por outra banda eu vou lle amosar como configurar un novo up. E entón que é, esencialmente, caendo máis rodas de formación. E está programando como se está só a codificación en Sublime ou algo así. Entón, se nós transferir-lo de novo. Entón, dicir que este é o seu actual CS 50 ID. Pode simplemente ir Cloud9 aquí. Pode ir ao seu panel. Debe traer guía espazos de traballo. E entón pode simplemente premer aquí, crear un novo espazo de traballo. Nome do seu novo espazo de traballo, quizais proba, ou rascado. E, a continuación, prema neste separador personalizado aquí, no canto da guía modelos CS50. E entón pode simplemente ir e crear un novo espazo de traballo. Eu xa creou un espazo de traballo aquí. Entón imos traballar con iso. E se creou un novo espazo de traballo cara á guía Personalizar, pode simplemente escribir gem install nokogiri, o que non está a suceder aquí. OK, é un pouco conxelado. Pero podes escribir gem install nokogiri. E iso debe ser o único que existe para a instalación. Como dixen antes, se aínda está traballando no seu CS50 modelo de ID, só precisa escribir CFLAGS é igual a Gem install nokogiri. E eu xa instalado Lo aquí para que eu non vou facer iso. Pero para os que seguen xunto, non dubide en facelo. Polo tanto, unha vez que teña o seu Nokogiri espazo de traballo ou biblioteca instalado, Vou dar-lle un pouco dun curso intensivo de sintaxe de Ruby Nokogiri porque é unha biblioteca Ruby. Entón ten que saber unha información básica Sintaxe Ruby para traballar con Nokogiri. Por iso, algunhas diferenzas básicas desde o que está acostumado a quizais se está a traballar ata agora en só C e PHP, declarar variables sen tipo. Non usa punto e coma, que é unha especie de alivio. Non hai agora aproximadamente parénteses for ou while loops, por exemplo. Só ten un bloque de código, e entón poñer fin a finais dese. Non hai plus plus ou menos de menos, entón só sabemos que para cando está facendo para loops, só iguais e menos iguais. E, no canto de haxix inclúen, vai empregar e despois esixir o que quere probar biblioteca para cargar no seu programa. Ruby non é unha linguaxe compilada. Entón, iso é outra vantaxe. É máis semellante ao PHP onde é unha linguaxe interpretada. Pode realizar calquera script Ruby que escribe con Ruby seguido co nome do seu guión ou programa. Para significar que é un programa Ruby, acaba de rematar con .rb en vez de .c. E hai variable matrices de tamaño en Ruby, que é super cómodo cando está rascado e quizais quere achegar datos que raspou nunha matriz. Non ten que malloc unha nova matriz e copiar a matriz antiga á nova matriz. Pode só engadir con os dous sinais de frecha. E non hai caracteres, non só a secuencias de letras individuais. De xeito que debe ser un pouco máis fácil. Entón imos dar-lle un exemplos dalgúns sintaxe básica Ruby. Entón, aquí podes ver que en vez de a barra barra, para opinar, en Ruby, só usar o sinal de libra. E declaración de variable, ten escriba as variables iguais o que quere a variable a ser. Poden ser strings. Pode que matriz, que encher cos valores. puts e estampas son semellantes. Para os nosos propósitos, o única diferenza é realmente que pon, que significa puts, só pon unha nova liña carácter en todo o que está imprimindo. Entón, se damos unha pequena demostración aquí, podemos realizar este com-- abrir unha nova terminal. Podes ver todos estes arquivos que están no meu terminal. E se eu simplemente executar Ruby, intro.rb Rubio, el pon a fóra cinco Ola Mather, Quincy, portador. Adams. Entón, iso é todo o que hai para matrices que declaran. Audiencia: Robert, pode facer A fonte tipográfica un pouco maior? ROBERT KRABEK: Si. E podo aumentar o zoom, porque non pode ampliar a fontes terminais aparentemente. Entón é así que imprime variables para o seu terminal. Tamén pode usar variables dentro dunha secuencia de carácteres. Entón, recentemente en PHP, podería ter aprendido que hai interpolación de cadea. Entón, se der un ollo aquí, se eu declarar tres variables, nome, biblioteca, e lingua, e eu puts, eu escribir corda, Ola meu nome é. E, a continuación, no canto de PHP versión de interpolación de cadea que parece un pouco máis guste isto, ten un sinal de libra, e, a continuación, unha chaveta, e, a continuación, o nome da variable. E é así que imprimir, digamos, calquera que sexa o nome da variable é. E entón tamén pode concatenar cadeas. Rubio fai super doado co sinal de máis. Só ten unha corda na parte esquerda, unha variable ou outra secuencia máis unha cadea. Entón, se eu imprimir esta fóra, que debería só dicir Hola, meu nome é Robert. I estará ensinándolle Nokogiri en Ruby. E imos só confirmar que que é de feito o ruby ​​introdución case--. Ola, meu nome é Robert. I estará ensinándolle Nokogiri en Ruby. Seguindo adiante, se else, é un pouco diferente desde o que se pode usar para se está a traballar C. Non precisa de parénteses. Non precisa as chaves. E en vez de outra persoa que, é un elsif concatenada. Entón, aquí, se eu tivera declarado x up aquí, como vemos, aínda x 5 é. Entón, se x é inferior a 3, que vai poñer pequena. De ser inferior a 7, medio, outra grande. Así, 5 é un número medio. E eu acabar este bloque de código con alta. Aquí está o meu loop for. E esa sintaxe é tamén lixeiramente diferente. O 0 a cinco só esencialmente é declarar un matrices de 0-5. Polo tanto, hai cinco slots na matriz. E, a continuación, para cada período de tempo en que array, eu vou estar incrementando i. Polo tanto, este debe imprimir 0-5, ou 0-4. E iso debe imprimir medio. E eu vou brillar a través. Vostedes terán acceso a este código máis tarde. Entón podedes realizar este vós. Polo tanto, este é o seu ciclo básico momento. Esta será só imprimir j, incrementando por 1 ata chegar 5. Super rápido curso intensivo de Ruby sobre como escribir unha función. En vez de, digamos, int factorial número, só temos def. E, esencialmente, está definindo unha función aquí. Este será o nome da función, e isto é todas as variables que quere pasar á función. Pode que se declaracións dentro. Pode voltar. Neste caso, estamos definición dunha forma recursiva función factorial aplicado. Entón, nós só chamar funcións en Ruby como este. Entón, se eu define iso, eu pode chamar factorial, pasar en 3, e, a continuación, 3 será a variable número que podo usar dentro da función. E este é só to_s transformando o valor dos factorial volver nunha cadea. Se non, este vai xogar un erro dicindo Oh, I Non se pode imprimir un string-- porque como se recorda, pon colócase string-- porque este factorial retornou un número. Así, podemos converter ese para unha cadea como tal. E, inversamente, tamén se pode converter unha cadea para un enteiro con to_i. Así, facer todo o super sinxelo, se eu comentar isto, gardar e executar a función factorial. Debemos ser capaces de ver que factorial de 3 a 6. E iso é verdade. Entón, ese é o seu curso intensivo en Ruby. E agora que sabe Ruby, podemos seguir ao Nokogiri básica rascado configurar. Esencialmente todo o que tes que facer é, en Ruby, esixir que as bibliotecas. E para os nosos propósitos estaremos utilizando o OpenURI biblioteca así como Nokogiri. E entón o que fazer-- e vai darlle a sintaxe para isto-- é de abrir un URL na medida faría unha proposta cURL, que significa C URL. Entón colle o URL o sitio en cuestión. Almacena-lo nunha variable. E entón pode buscar esa variable para etiquetas HTML orixinais empregando a orde CSS. E entón pode producir o contido para onde quere. Pode comezar nunha base de datos. Pode dar saída nun ficheiro ou mesmo só imprimir lo para a pantalla. Entón, imos amosar-lle un rasqueta de base. Entón, aquí podes ver, temos esixindo nokogiri, esixen open-uri. Súa configuración básica, imos chamalo documento ou doc, é igual a Nokogiri :: HTML aberto, que é o mando que nos é proporcionada pola OpenURI biblioteca. E nós imos estar á procura, para aqueles de vostede que podería estar vivindo no quad, para motos que están en Boston listada na sección de bicicleta Boston Craigslist sitio. Polo tanto, se non está familiarizado Con Onda, vou só amosar ben rápido o que vai facer cURL. Se eu quixese obter toda a URL de web Craigslist, se eu escribir onda, simplemente botan toda a URL dende o sitio web da bicicleta do Craigslist para o meu terminal. Isto non é particularmente útil, porque non facer quere ir manualmente a través de e atopar a cousa que eu estou buscando. Pero só para que poida ver que eu son realmente usando o código correcto, se ollar na URL para Craigslist en bikes-- por algún motivo non está. Se ollar para esta páxina e ollar para a URL, esta debe ser o mesmo que o solicitude cURL que eu acaba de enviar. E, de feito, é iso que está a ser almacenado na variable doc. Entón, cando volver ao noso código, nós Pode entón operar nesta variable doc usando css. Entón, digamos que eu quería ter todo as marcas que son span.txt, e todas as marcas de dentro desa etiqueta. E por que pode queremos facelo, eu escoito chorar? Se Inspect Element, dálle un análise de como a URL é estruturada. Se eu rolar para abaixo a través aquí, pode ver o que cada un deles distinto elementos representa. Entón, talvez eu queira acceder este elemento particular. Entón, eu estou usando creador Chrome ferramentas para Inspect Element. Podo ver aquí debaixo que este é unha unha reserva dentro dun intervalo tag cunha clase de txt. Entón iso queda para a nosa primeira operación que é doc.css extensión, que é a marca que Eu estou mirando para dentro de todo ese URL. E entón .txt funciona moi como CSS fai cando está só escribindo CSS nos seus arquivos HTML por especificando unha clase. Polo tanto, este operador específico será especificar unha etiqueta span coa clase de txt. E entón se eu deixar un espazo, este, entón, ir dentro desa etiqueta e, a continuación, atopar un unha etiqueta dentro desa. Entón, se eu só poñer isto para o terminal, que debería vexa esencialmente todo que está dentro deste intervalo de clase txt. Entón, imos dar un que vaia. Ruby craigslist-rasqueta. E, de feito, que nos dá toda a estes etiquetas das listas que Está na páxina Craigslist. Entón, se nós volver, podemos transformar esta en que un simple útil. Quizais queremos só as conexións. Porque dentro desa etiqueta, eu tamén vou ter o hyperlink do camiño que vai a esta páxina. Entón, se ollar para este código aquí, o que vou facer é no canto de CSS, Podo ir at_css. E iso só vai conseguir o primeiro elemento de todas estas cousas. Entón, se eu fose facelo ata o Só código anteriormente demostrado, en vez de devolver todo deste, sería só voltar o primeiro deles. Entón é así que o operador at_css funciona. Por iso, queremos almacenar o camiño de toda a primeira unha reserva. E por un vai darnos um-- entón aínda estamos indo a usar CSS. Pero por que isto vai dar- nos de volta unha matriz enteira de etiquetas, imos para o acceso o primeiro elemento. Polo tanto, esta é outra forma que pode acceder calquera elemento particular teñen unha serie de elementos que é devolto, porque pode tratar calquera cousa que retorno .css como unha matriz, esencialmente. E entón nós estamos indo para acceder ao atributo de referencia de hipertexto deste. Entón, se der un ollo, se vostede parecía moi preto de aquí, se só esencialmente teña en conta a barra de URL, este é o camiño que vai ser raspando. Entón, se nós só facer iso de novo, e comproba se que salvo-lo. Podes comprobar na casa. Isto realmente combina con esta conexión. Entón, por que pode queremos usar isto? Se quere raspar a páxina e ten unha páxina de ligazóns como Craigslist fai, Pode querer ir logo en cada un destes enlaces e, a continuación, a raspar contido de que, a cal é o que imos facer. Polo tanto, xa que ten como un camiño variable, eu xa non realmente se preocupan imprimir lo. Eu só teño almacena-lo como unha variable. E entón eu podo acceder outro A páxina do mesmo xeito que acceder doc en primeiro lugar. Excepto co URL, imos usar interpolación de cadea como eu estaba describindo en Rubio anteriormente para anexar o camiño para a extremo da raíz. Entón, o que iso vai facer é iso vai poñer no camiño que raspei anteriormente e despois transformar esa nun novo elemento, o que quere chamar ele-- first_listing, por exemplo. Pero eu vou deixar Lo no artigo, por agora, porque iso é o que está a usar aquí. Entón, digamos que eu quería ter a descrición da primeira mensaxe no Craigslist. Así, quere ir para abaixo aquí. Quere prema Inspect Element de novo, porque esta é a descrición. Eu ía para abaixo aquí e mira se podo atopar como eu podería poder buscar para esta etiqueta única. E neste caso, ten un ID, o que nos leva para a nosa próxima forma de buscar Tag, que está cunha hashtag. Así, para as clases, pode usar o operador punto. Entón .txt é especificar unha clase de txt, Tendo en conta que o hash especifica un ID. Polo tanto, neste caso, a etiqueta é sección, eo ID é postingbody. Entón, iso vai e encontra- o first-- porque somos usando at_css-- este vai e considera que o primeiro elemento xorde coa tag de sección eo ID de postingbody. E entón podes acceder ao elemento de texto dese elemento volveu con .text. E entón podemos almacenar que na descrición. Polo tanto, agora que temos un descrición da variable, poderemos ser capaces de facer, por exemplo, ficheiro I / O. Entón ficheiro I / O en Ruby é moi semellante ao arquivo E / en C, onde abrimos un arquivo. Poderiamos escribir para el. E entón nós imos pechar o ficheiro. Entón, aquí, nós estamos só nomear o arquivo, algunha variable arbitraria. Tamén poderiamos ter só poñer isto aquí. Temos unha variable que estamos almacenando o ficheiro aberto como con File.open. E nós estamos escribindo para este ficheiro, por iso, abre-o co operador w. E entón poñemos na cadea ficheiro co operador .puts. E entón poñemos a variable que quere escribir no ficheiro dentro desa. E entón nós só peche o ficheiro. Entón, se nós ir adiante e executar ese, Isto debe producir un documento con description.txt que esta descrición ten dentro del. Entón, se eu executar ele-- non. É producido un arquivo de texto con, esperanza, o mesmo. Entón pode haber unha nova mensaxe que veu mentres eu estiven falando. E, de feito, parece que houbo. Entón, se imos a este moto clásica, 1962-1966, que parece corresponder. E alí vai vostede. Entón, iso é o máis básico función de rascado. Poderiamos ter, no canto de só escribir para este ficheiro, podemos engadir cousas a unha matriz. Entón, se eu declarar tres matrices, título, prezo e descrición. E estamos operando baixo doc agora. Podemos pasar e atopar todas as span.txt. E lembre, este volve unha matriz de todos os elementos que atopa. E entón, en Ruby, pode só usar .Cada Para percorrer todos os elementos da matriz. E, a continuación, para cada elemento, Eu só vou chamalo un enlace, porque iso esencialmente o que é. Entón, se eu poñer cada a.hdrlnk link.css punto, este está realmente indo para a ligazón e atopar dentro desa conexión outro Elemento HTML e clase correspondente. Polo tanto, se recordamos que este foi, a span.txt, pode ver- déixeme volver quick-- real dentro span.txt temos unha morea de outras clases. Entón, dentro span.txt, nós estamos a buscar para un un tag cun hdrlnk clase. Entón deixe-me pensar que para vós rapidinho. Así pode ver aquí, esta é unha marca que está dentro do rango de clase txt que ten a hdrlnk clase. E iso é realmente o que estamos tentando conseguir. Entón, estamos agora a tratar de almacenar todos destes enlaces no título. E entón nós estamos indo para imprimir cada un destes enlaces. Non, desculpe. Estamos indo para imprimir o prezo de cada un deles. Entón, imos realizar este realmente rápida e ver o que fai. Polo tanto, este foi basicamente só a través de cada un dos enlaces á súa vez, acceder a marca en cuestión, e, a continuación, tirou o prezo. E o fixo porque despois tes todo o título, nós só almacenado título alí. Temos só almacenado na ligazón no interior da matriz do título. E no presente para operación en punto, onde en vez de ir a a.hdrlnk, nós estamos mirando para unha span.price. Entón, se eu só podo realmente atopar rapidamente o prezo, se inspeccionar o elemento, vai ver que é unha extensión coa clase de prezo. E iso é, esencialmente, como estamos empezando o prezo alí. Entón esa é a verdade caso base de rascado. É así que comeza todo os elementos dunha páxina que, por exemplo, xa sabe o URL. Polo tanto, se queremos obter un pouco máis en profundidade, podemos raspar páxinas dentro de páxinas. E para este exemplo, eu vou ser a saída a un ficheiro CSV. Entón, eu estou esixindo CSV-se aquí porque Ruby non fai, en si, ten a función só para saída arquivos CSV. Entón, iso é super sinxelo. Déixeme só ir ao seguinte. Cubrimos ficheiro I / O. Polo tanto, este é semellante á forma como é en C. E antes de pasar para Kimono, Eu só vou lle amosar como realmente rápido para raspar sitios de puntos turísticos. Entón, nós xa aprendeu para declarar matrices en Ruby. Entón, eu só estou declarando unha banda de matrices arbitrarias que estará almacenando datos dentro. doc está funcionando igual como fixo no arquivo anterior. Imos entrar, atopar cada un dos span.txt de. Xa sabemos que. Iso é o recipiente no cal cada ligazón ten todos os datos que queremos. Entón, aquí o que estamos facendo é para cada conexión de span class txt, nós estamos indo en e estamos atopando a un tag, atopar o primeiro elemento de que. Lembre, css retorna unha matriz, para que non pode simplemente acceder a ela como é. Nós imos atopar o primeiro elemento. Aínda que sexa unha matriz de un elemento, tes que usar esa sintaxe, e logo tire o atributo href. Entón nós fixemos iso antes. Polo tanto, este debe parecer familiar. E entón agora temos unha matriz chamadas de camiños de todas as nosas conexións que imos querer usar. Entón, se temos esa matriz de todo dos camiños que queremos usar, Podemos, entón, crear un elemento de cada destas páxinas cando abrimos esta páxina. Así como vimos tamén en A sintaxe antes, onde facendo interpolación de cadea co camiño aquí, entón a sintaxe é só para o camiño. E eu podería citar este variable calquera nome arbitrario. Esta é a máis importante. Esta é a matriz que vai ter acceso a cada elemento. Pero cando di para o camiño en camiños, isto significa que para cada elemento en camiños, chamalo camiño, e usar isto. Esta é, esencialmente, como cando facer un loop e usa int i. Así, pode considerar o camiño como a variable que está incrementando. E, a continuación, para cada un destes, entrar en cada un destes enlaces. Porque estamos almacenando o en páxina elemento, polo que estamos creando unha nova páxina cada vez nós acceder a ela. E, a continuación, dentro desta nova páxina, atope span.postingtitletext, span.price, e, a continuación, sección # postingbody. Xa cubertos sección # postingbody cando miramos para a descrición. Así, podemos ir ver no post Craigslist, se está só mirando para o título, Pode velo aquí enriba, extensión postingtitletext. E é por iso que está alí. E, a continuación, para o prezo, pode acceder a ela con span class de prezo. Así tamén nós, se cadra, podería quere almacenar o URL. Entón imos realizar este de novo, almacena-lo nunha matriz, porque se está a buscar no Craigslist, é probablemente vai querer un xeito de se ve algo que lle interesa, volver a ese sitio. Entón só quere gardar a URL para referencias causa. Este é só esencialmente outra sintaxe ao loop. Eu só podería facer no canto paths.each por camiño en camiños con índice. E esa sintaxe é o Ruby for-- camiño é o que fixemos ata aquí, declarar unha variable para cada elemento. E índice compórtase como o i na C para loops. Así, pode manter o control que o índice é. Entón aquí é só un pouca cousa conveniente para cando está executando rasqueta. Se está raspando centos de páxinas, para asegurarse de que non está colgado, Ela só vai saída, Estou acceder a esta páxina, e asegurarse de que aínda está continuando. Pero para os nosos propósitos, porque hai cen elementos, Eu estou indo a acceder só tres deles de xeito que non quedar sen tempo aquí. Pero antes de chegar a iso, eu son só vai amosar-lle moi rápido, I será emitir o título, prezo, descrición e URL de cada un dos enlaces que raspados. E entón este é só o sintaxe para a biblioteca CSV. Abre un ficheiro CSV. Isto é o que eu vou chamalo. Abre o con gravación do. E, a continuación, CSV será o arquivo que está introducindo todo. Este é só unha proba de sanidade para me saber que está en execución. E este é o meu exame de sanidade para saber que está rematada. Entón, eu estou poñendo título nunha liña en CSV, prezo, url, descrición, todo en liñas no CSV. Entón, se nós ir e executar este agora-- e eu só que seguro que eu teño gardado ele-- vez de só mostrando o seu contido para o terminal, debemos ter un CSV ficheiro que se produce. Entón, aquí podemos ver o CSV ficheiro que foi producido. Esta é a saída do Scape que só execute. Como podes ver aquí, Acceder á páxina 0, 1, 2, 3. Estes son os títulos, prezos, descricións. E se miramos para este CSV arquivo que xeramos, podes ver a súa transmitido aquí. Este non é o Excel, polo que non é formato en liñas e columnas. Pero pode imaxinar como pode ser formatado. CSV significa valores separados por comas. Entón podes imaxinar que pode ser unha liña. E cada coma faría indican unha columna separada. Só unha palabra de notas precaución ás veces está raspando as cousas con moita comas. Entón, se está a saída lo a un arquivo CSV, Pode non saída do xeito que podería pensar. Entón, iso é esencialmente todo o que hai para rascado HTML básico páxinas con Nokogiri. Así, o ser Internet innovador, pois chegou a ser cun máis automatizado e GUI versión, aínda que de forma menos robusta versión de rascado varios sitios. E para os nosos obxectivos Eu vou estar demostrando unha extensión de Chrome chamado quimono. E todo o que tes que facer é ir á páxina que quere raspar. Fai clic en un campo de interese. Vostede calibrar os campos, porque automaticamente detectar o que pensa quere ser rascado, e entón só crear unha API. Entón, se tivésemos de demostralo lo Craigslist, realmente non ía funcionar. E iso é o que eu ía volver dicindo sobre el non ser tan robusto. Ten problemas para crear a API. Senón como unha demostración do que faría, se instalar a extensión Chrome, todo o que fai é premer nel. El Kimonofies a páxina, e entón clic sobre as cousas que quere guión. Entón, se eu fose para premer en iso, quere destacar o que pensa que quero ser raspar esta páxina. Entón, talvez eu chamo esta listaxe. Esta é cantos elementos eu seleccionei. E eu só podo confirmar ou negar algúns das outras listas suxeridas para obtelo para engadir á o que será raspada. Entón agora podemos ver que hai cen elementos seleccionados. Se quero ter outro campo que eu tamén raspar o relacionado con esta, dicir que quero raspar o prezo ben, entón eu podo facer o mesmo. Entón aquí está unha demostración de como se moito menos robusta, porque agora é incorporarse á cidade no canto de só o prezo que quero. E agora é pego 200 cousas. Pode volver e borrar. Pode tentar de novo. Pero non hai garantías. Esta é a forma como funciona isto, ás veces. Como podes ver aquí, agora di que 96 aquí enriba. É colleu a maioría dos enlaces que pretende raspar, pero non necesariamente todos eles. Outra ferramenta útil de Kimono aínda é que pode ir Recursos Avanzados aquí, vai a Avanzado, e que vai te amosar o colapso do único xeito de acceder ao HTML tags que quere. raspar Así, para anuncios, se ollar para aquí, se acceder div p abranguen unha extensión, realmente pode usar só esta no seu código Nokogiri, onde antes tiñamos span.txt para acceder cada unha das listas. Se eu quere só o texto dentro das listas, Eu podía entrada espazo div p espazo espazo espazo espazo espazo un, e permitiría alcanzar o mesmo efecto. E para aqueles de vostedes que están interesados no uso de expresións regulares isto ocorre para tamén darlle o habitual expresión de clasificación da secuencia de caracteres para entrada para atopar as cousas está intentando atopar. Polo tanto, non hai outro recurso legal de Kimono, onde pode paz, o que non só podo raspar Os resultados desta páxina, Podo facer clic neste pequeno botón aquí, paxinación, especificar que o botón leve-me para a seguinte páxina, e, a continuación, ela só vai saber que pode facer unha iteración á seguinte páxina, e, a continuación, raspar todo as-- sempre como é o mesmo formato de course-- Scape todos estes enlaces tamén. ¿Como Kimono non quere traballar con Craigslist, o que fixemos é que eu Kimonofied o Crimson de Harvard. Eu tirado para fóra algún tipo de top artigos destacados, confirme aquí. Diga todo isto. Eu compilar esta API para ti antes de tempo. Pero se non, o que faría é só clic Feito. Introduce os teus datos API. Configuralo para calquera seguimento automático ou manual. Así, pode actualizar o seu datos cada 15 minutos, semanalmente, a diario, o que quere. Nome do seu API. Crear a API. Para o seu beneficio, eu creei o Carmesim páxina API fronte xa. Entón acaba de crear unha conta en quimono, e vai almacenar todas as súas APIs para ti. Entón, basicamente iso é todo o arañazos diferentes separadas. Polo tanto, se miramos aquí, esta é a opinións enlaces que eu percibir. Estes son os destacados ligazóns que eu percibir. E estes son os máis lidos ligazóns que eu percibir dende este último escapo API. Entón, se pode ver aquí, estes serían o destaque, estas serían as opinións, que neste exemplo, Eu xa combinado todos eles nunha colección. Pero se simplemente xogar con el un pouco, podes división lo e división lo con todo quere, sempre como o formato é lixeiramente diferente. Só para xogar con iso, o exploración configurado, unha das desvantaxes é que só se pode rastexaren 25 páxinas de cada vez. Ese é un dos factores limitantes. Pero aquí, se define-lo Para rastrexar o manual, este É así que pode dicir que para actualizar os seus datos. E aquí podes ver o seu historial de seguimento de todo o que arrastrou. E vostedes poden volver, rexistrar, xogar con todas as formas diferentes que pode modificar e utilizar os seus datos. Quimono pode ser configurado para raspar ligazóns dentro de ligazóns. E ía facelo en primeiro lugar raspando unha lista de ligazóns, e, a continuación, usar esta API como un ir fóra do punto a outro API que crear o script. Pero iso é máis complicado do que o que nós estamos indo a entrar hoxe. Entón, iso é Kimono. Imos falar sobre os pros e contras de Nokogiri e quimono. Nokogiri, é moi rápido. É doado de probar. Pode só pon algo para consola, fácil de configurar. Pode decidir o que quere raspar e tenda. Non hai límites de páxina. I realmente é utilizado para raspar como 1800 sitios escolares sudafricano para correos electrónicos para un estadio que eu fixen. Entón, iso é posible, aínda que as mellores prácticas sería a de dividir o guión. Porque se falla, a continuación, non gaña nada. Pero se fai cen, quizais 200 páxinas por vez, entón tes algunha posibilidade de, polo menos, comeza-lo aos poucos, especialmente se ten mal internet. Desafortunadamente el só pode raspar HTML. Entón se ten pages-- cargado dinamicamente e eu vou amosar-lle un exemplo como Educativas nun second-- Nokogiri desgraza non pode raspar que. Pero Kimono tamén é fácil de usar. Como viu, é, esencialmente, un punto e prema. Pode raspar Javascript. Desafortunadamente, hai unha máxima de cantas páxinas podes raspar. Ás veces é un pouco difícil de configurar. El está confuso. Pero é sempre algo a considerar se non está tentando ter un raspar sostible super-robusto. Se só quere estar todo fora dunha páxina rapidamente, entón é realmente un Kimono boa ferramenta para usar. E como eu mencionen antes, hai o recurso avanzado de Kimono que lle como mostra o único acceso HTML elemento, que é super útil mesmo se está a traballar en Nokogiri. Entón, se nós ir ao sitio web do Kayak, para exemplo, podes ver que hai é-- ou que non pode ver. Pero se eu lle amosar a URL para Kayak, este, de feito, é só a URL de orixe. Este é o URL antes de ser modificada por calquera scripts JavaScript que ten en curso. E iso vai ollar diferente de inspeccionar o elemento. Entón, se pasar e igualar-se o elemento Inspecionar código ao código fonte, é realmente vai ser diferente. E este é, esencialmente, por que Nokogiri non pode raspar locais cargados dinamicamente. Por Nokogiri raspando a URL de orixe, Tendo en conta que é, en realidade Kimono raspando o que é, esencialmente, vendo en Seleccionar elemento. Entón, se eu pasar e eu tentar Kimonofy Kayak, Podo realmente pasar por e seleccione o prezo. É un pouco máis difícil, e, neste caso, é realmente navegando neste prezo como distintos destes. Así, mentres que pode ou configure-- Se así non fose cargado dinamicamente, podería configurar Nokogiri para todos estes. Porque o formato é lixeiramente diferente para esta listaxe como é comparado co resto un deles, e podes ver aquí é realmente ir e seleccionados todos os prezos de voos. Poida que eu queira seleccionar tempo de voo tamén. E podo pasar e tipo de configurar isto. Non quero iso. Eu só quero que o tempo do próximo voo. E, despois de un par destes pasando, atópase a imaxe. Entón Kimono moi intelixente. É só non é tan robusto. Existen algúns outros alternativas que pode usar. E eu vou amosar-lle-los aquí. Se está máis cómodo en Python, no canto do Ruby quizais existe unha biblioteca chamada Beautiful Soup. Podes usar isto. É moi semellante ao Nokogiri. Ten máis algunhas funcionalidades. Pode atopar unha etiqueta HTML e a continuación, subir ou mover lateralmente. Hai PyQt. Este feito pode raspar dinámica locais, xa que é unha especie de é un WebKit que finxe ser un navegador sen que realmente ser un navegador. Por iso, sería esperar por toda a JavaScript para cargar primeiro, e despois entrar e probar raspar o sitio. Se quere ir con Ruby, vostede pode ir un nivel por riba do Nokogiri. Podes usar con Capybara un invólucro de Poltergeist. E isto pode realmente esencialmente facer o mesmo como PyQt, o que é que é un WebKit. El agarda o JavaScript para cargar en primeiro lugar. Se xogar con ela o suficiente, pode incluso facelo premer sobre as cousas. Polo tanto, se hai un enlace que non é a href clásico onde o camiño é de fácil acceso, e é algo JavaScript que detecta un clic, pode realmente facer iso. A biblioteca máis populares para simular un usuario está JavaScript, que é PhantomJS. Isto, obviamente, pode raspar dinámica sitios, porque este é esencialmente finxindo ser Chrome sen a interface de usuario. E entón, por suposto, o máis robusto, pero máis lento opción, é un navegador de automatización selenio. E, por desgraza, non está indo a ser capaz de facelo dentro do seu IDE CS50. Debido esencialmente o que fai é el inicia o seu Chrome, Firefox, calquera que sexa navegador que quere empregar, e é posible que controla o rato movemento, o que quere que escribe, e é só unha especie de automatizar este proceso. Por iso, foi desenvolvido como unha especie de web ferramenta de proba de automatización. Pero unha morea de persoas usan Selenium para raspar sitios que doutra forma ter un moita dificultade rascado con algunhas destas outras ferramentas, máis rápidos. Entón, iso é todo o que eu teño para web scraping. Divírtete. Audiencia: Pregunta. ROBERT KRABEK: Si. Audiencia: Existe un mecanismo de hash o sitio para que podería basicamente pasar por iso máis tarde. ROBERT KRABEK: Yeah. Entón poñemos o, na nosa exemplo, para ambos, poñemos todo o sitio web en doc. E así que realmente pode só tomar o doc variable e gravala-lo nun arquivo. Entón, se eu quixese, podería gravala-lo como un arquivo HTML, e, a continuación, en vez de usar OpenURI e unha proposta cURL, entón eu podería simplemente abrir doc HTML e, a continuación, buscar iso. Audiencia: Pero pode preservar o tipo de experiencia en liña mentres fai fóra de liña. Por exemplo. cando está voando por varias horas, Quero basicamente arquivo todo o sitio. [Inaudível] ROBERT KRABEK: Si, iso é exactly-- así literalmente o que iso está facendo é que está tomando todo que sería neste URL. Entón, se nós funcionamos cURL, é Levando todo isto en HTML, e está armazenando- dentro do doc variable. Entón podes facer o que quere facer doc. Pode saída a un ficheiro. Audiencia: Pero non está conectado. Non é dinámica. Non é recursiva, non? Ve o que quero dicir? Estou intentando basicamente tipo de un hash todo o sitio no meu disco duro para que eu puidese facelo, basicamente, durante varias horas sen Internet. ROBERT KRABEK: Correcto. Entón, se eu had-- entón onde está o meu arquivo E /? Polo tanto, este é o ficheiro I / O. Entón diga vez a iso, eu chamo iso de craigslist.html. Abrir iso. Eu tiña puts doc para el. Eu peche o ficheiro. E despois é só porque o CS50 IDE é a nube, que é o que quere. Podo ir aquí. Podo descargar o arquivo. E, a continuación, que sería no meu disco duro. Así, pode facelo dese xeito. Ou se está na casa, non usar o CS50 IDE, como Sublime ou algo así, iso é aínda máis fácil, porque isto é todo dispoñible localmente, non ligada á internet. Audiencia: Entendo. Este é un problema particular para. Pode facelo de forma recursiva para que ir varias capas de profundidade tipo de cousas? ROBERT KRABEK: podo baixar carpetas ben, se é iso que está preguntando. Audiencia: É. ROBERT KRABEK: Cool.