[Bermain muzik] ROBERT KRABEK: Hello, guys. Nama saya Robert Krabek, dan Saya akan mengajar anda semua bagaimana untuk mengikis web dengan Nokogiri, yang merupakan perpustakaan Ruby, dan Kimono, yang merupakan lanjutan Chrome. Jadi pertama ada beberapa perkara yang anda boleh lakukan jika mungkin anda telah melakukan semua psets setakat ini dan ruang kerja anda mendapat sedikit penuh. Kita boleh sebenarnya hanya pergi dan mewujudkan ruang kerja yang baru untuk anda untuk hanya melakukan satu projek baru dalam. Jadi, jika anda mahu terus bekerja di ID template CS50 bahawa anda kini mempunyai, berasa bebas, dan anda boleh hanya memasang Nokogiri dengan CFLAGS permata equals-- memasang nokogiri. Tetapi jika tidak, saya akan menunjukkan kepada anda bagaimana untuk menubuhkan yang baru satu. Dan maka ini adalah pada dasarnya menjatuhkan lebih roda latihan. Dan anda pengekodan seolah-olah anda hanya pengekodan dalam Sublime atau sesuatu. Jadi, jika kita beralih ke atas. Jadi mengatakan ini adalah terkini CS 50 ID anda. Anda hanya boleh pergi ke Cloud9 sini. Anda boleh pergi ke papan pemuka anda. Ia harus membawa tab Ruang kerja. Dan kemudian anda hanya boleh klik di sini, Buat Ruang Kerja Baru. Nama ruang kerja baru anda, mungkin ujian, atau mengikis. Dan kemudian klik tab adat ini di sini, bukannya tab template CS50. Dan kemudian anda hanya boleh pergi dan mewujudkan ruang kerja yang baru. Saya telah mencipta ruang kerja di sini. Oleh itu, kita akan bekerja dengan ini. Dan jika anda buat yang baru ruang kerja jadi dengan tab Tersuai, anda hanya boleh menaip permata memasang nokogiri, yang tidak akan di sini. OK, ia sedikit beku. Tetapi anda boleh menaip permata memasang nokogiri. Dan yang harus semua yang ada untuk pemasangan. Seperti yang saya katakan sebelum ini, jika anda masih bekerja dalam template ID CS50 anda, anda hanya perlu menaip CFLAGS sama permata memasang nokogiri. Dan saya telah memasang di sini, jadi saya tidak akan berbuat demikian. Tetapi bagi mereka yang mengikuti bersama-sama, berasa bebas untuk berbuat demikian. Jadi apabila anda telah mendapat Nokogiri anda ruang kerja atau perpustakaan dipasang, Saya akan memberikan anda sedikit daripada kursus kemalangan dalam Ruby sintaks kerana Nokogiri sebuah perpustakaan Ruby. Jadi, anda perlu tahu beberapa asas Ruby sintaks untuk bekerja dengan Nokogiri. Jadi beberapa perbezaan asas daripada apa yang anda digunakan untuk mungkin jika anda telah bekerja setakat ini hanya dalam C dan PHP, anda mengisytiharkan pembolehubah tanpa jenis. Anda tidak menggunakan koma bertitik, yang jenis melegakan. Tidak ada kurungan kini sekitar untuk atau semasa gelung, sebagai contoh. Anda hanya perlu satu blok kod, dan maka anda menamatkan pada akhir itu. Tidak ada plus plus atau tolak tolak, jadi hanya tahu bahawa apabila yang anda lakukan untuk gelung, hanya setaraf tambah dan tolak sama. Dan bukannya hash termasuk, anda akan menggunakan perlukan dan kemudian apa sahaja yang cuba perpustakaan untuk memuatkan ke dalam program anda. Ruby bukan bahasa yang disusun. Jadi itulah bantuan lain. Ia adalah lebih serupa dengan PHP mana ia adalah bahasa yang ditafsirkan. Anda boleh menjalankan mana-mana skrip Ruby yang anda menulis dengan Ruby diikuti dengan nama skrip atau program anda. Untuk menunjukkan bahawa ia adalah satu program Ruby, anda hanya berakhir dengan .rb bukannya .c. Dan ada berubah-ubah tatasusunan bersaiz Ruby, yang super mudah apabila anda berada mengikis dan mungkin mahu menambah data yang anda telah dikikis ke dalam array. Anda tidak perlu malloc pelbagai baru dan menyalin array lama ke lokasi yang baru. Anda hanya boleh menambah dengan kedua-dua anak panah tanda-tanda. Dan tiada aksara, terdapat hanya rentetan huruf. Jadi yang perlu menjadi sedikit lebih mudah. Oleh itu, kita hanya akan memberikan anda beberapa contoh beberapa Ruby asas sintaksis. Jadi di sini anda boleh melihat bahawa bukan slash slash, mengulas secara Ruby, anda hanya menggunakan tanda pound. Dan pengisytiharan pembolehubah, anda hanya menaip sama setaraf berubah-ubah apa sahaja yang anda mahu berubah untuk menjadi. Mereka boleh menjadi tali. Anda boleh mempunyai array, yang anda mengisi dengan nilai-nilai. meletakkan dan cetakan adalah sama. Untuk tujuan kita, Satu-satunya perbezaan adalah benar-benar yang meletakkan, yang bermaksud meletakkan, hanya meletakkan baris baru perkataan pada apa sahaja yang anda mencetak. Jadi, jika kita memberikan kecil demonstrasi di sini, kita boleh menjalankan ini with-- membuka sebuah terminal baru. Anda boleh melihat semua ini fail yang di terminal saya. Dan jika saya hanya menjalankan Ruby, intro.rb delima, ia meletakkan keluar lima Hello Mather, Quincy, Carrier. Adams. Jadi, itu semua ada untuk mengisytiharkan tatasusunan. PENONTON: Robert, anda boleh membuat font anda sedikit lebih besar? ROBERT KRABEK: Ya. Dan saya boleh zum kerana anda tidak boleh zum masuk ke fon terminal nampaknya. Jadi itulah bagaimana anda mencetak pembolehubah untuk terminal anda. Anda juga boleh menggunakan pembolehubah dalam rentetan. Jadi baru-baru dalam PHP, anda mungkin telah belajar bahawa terdapat rentetan interpolasi. Jadi, jika anda lihat di sini, jika saya mengisytiharkan tiga pembolehubah, nama, perpustakaan, dan bahasa, dan saya meletakkan, saya menulis rentetan, hello nama saya. Dan ketika itu dan bukannya PHP versi rentetan interpolasi yang kelihatan lebih kecil seperti ini, anda mempunyai tanda pound, dan kemudian pendakap kerinting, dan kemudian nama pembolehubah. Dan itulah bagaimana anda hendak mencetak, berkata, apa jua nama yang berubah-ubah adalah. Dan kemudian anda boleh juga menyatukan tali. Ruby menjadikannya sangat mudah dengan tanda tambah. Anda hanya perlu satu rentetan di sebelah kiri ditambah pembolehubah atau tali satu lagi ditambah rentetan. Jadi, jika saya mencetak ini keluar, ia perlu hanya mengatakan Hello, nama saya adalah Robert. Saya akan mengajar anda nokogiri di Ruby. Dan mari kita hanya mengesahkan bahawa yang memang ruby ​​intro case--. Hello, nama saya adalah Robert. Saya akan mengajar anda nokogiri di Ruby. Beralih, jika kenyataan yang lain, ia sedikit berbeza daripada apa yang anda mungkin digunakan untuk jika anda telah bekerja di C. Anda tidak perlu kurungan. Anda tidak perlu pendakap kerinting. Dan bukannya lagi jika, ia adalah satu elsif concatenated. Jadi di sini, jika saya telah diisytiharkan x up di sini, seperti yang kita lihat, masih x 5. Jadi, jika x kurang daripada 3, ia akan meletakkan kecil. Jika ia kurang dari 7, sederhana, lagi yang besar. Jadi 5 adalah nombor sederhana. Dan saya mengakhiri blok kod ini dengan akhir. Berikut adalah saya untuk gelung. Dan sintaks ini juga sedikit berbeza. The 0 hingga lima hanya pada dasarnya yang mengisytiharkan tatasusunan 0-5. Jadi ada lima slot dalam array. Dan kemudian untuk setiap slot dalam bahawa lokasi, saya akan menokok i. Jadi ini perlu mencetak 0-5, atau 0-4. Dan ini perlu mencetak sederhana. Dan saya hanya akan pergi mengikut melalui. Kalian akan mempunyai akses untuk kod ini di kemudian hari. Jadi anda semua boleh menjalankan diri ini. Jadi ini adalah gelung sementara asas anda. Ini hanya akan mencetak j, menokok oleh 1 sehingga kita mencapai 5. Super cepat Ruby kursus kemalangan bagaimana untuk menulis fungsi. Sebaliknya, katakan, int faktorial nombor, kita hanya perlu def. Dan pada dasarnya anda mentakrifkan satu majlis di sini. Ini akan menjadi yang menamakan fungsi, dan ini adalah apa-apa pembolehubah yang anda mahu masuk ke dalam majlis itu. Anda boleh mempunyai jika kenyataan dalam. Anda boleh kembali. Dalam kes ini, kami mentakrifkan secara rekursif melaksanakan fungsi faktorial. Oleh itu, kita hanya fungsi panggilan di Ruby seperti ini. Jadi, jika saya telah ditakrifkan ini, saya boleh memanggil faktorial, lulus dalam 3, dan kemudian 3 akan menjadi bilangan pembolehubah yang boleh saya gunakan dalam majlis itu. Dan to_s ini hanya memutar kembali nilai faktorial ke dalam rentetan. Jika tidak ini akan membuang ralat yang mengatakan oh, saya tidak boleh mencetak rentetan yang kerana seperti yang anda ingat, meletakkan diletakkan rentetan kerana ini faktorial telah kembali nombor. Oleh itu, kita boleh menukar yang untuk rentetan seperti itu. Dan sebaliknya, anda juga boleh menukar rentetan kepada integer dengan to_i. Jadi membuat segala-galanya super mudah, jika saya hanya komen ini keluar, kecuali dan menjalankan fungsi faktorial. Kita harus dapat melihat yang faktorial 3 adalah 6. Dan itulah yang benar. Jadi itulah kursus kemalangan anda di Ruby. Dan sekarang anda tahu Ruby, kita boleh pergi kepada Nokogiri asas mengikis ditubuhkan. Pada dasarnya semua yang anda perlu lakukan adalah, di Ruby, menghendaki perpustakaan. Dan untuk keperluan kita, kita akan menggunakan perpustakaan OpenURI serta Nokogiri. Dan kemudian apa yang anda do-- dan ia akan memberikan anda sintaks untuk this-- adalah anda buka URL banyak yang anda lakukan di permintaan Curl, yang bermaksud C URL. Jadi, anda mengambil URL laman web dalam soalan. Anda menyimpannya dalam pembolehubah. Dan kemudian anda boleh mencari melalui yang berubah-ubah untuk tag HTML unik menggunakan perintah Css. Dan kemudian anda boleh mengeluarkan kandungan ke mana sahaja yang anda mahu. Anda boleh bermula di pangkalan data. Anda boleh mengeluarkan dalam fail, atau walaupun hanya mencetak ke skrin. Oleh itu, kita akan menunjukkan kepada anda pengikis asas. Jadi di sini anda boleh melihat kita mempunyai memerlukan nokogiri, memerlukan terbuka uri. Set asas anda, mari kita memanggilnya dokumen atau doc, sama Nokogiri :: HTML terbuka, yang merupakan arahan yang diberikan kepada kami oleh OpenURI perpustakaan. Dan kita akan dapat mencari, bagi orang-orang yang mungkin tinggal di quad, untuk basikal yang disenaraikan di Boston pada bahagian basikal Boston Craigslist tapak. Jadi, jika anda tidak biasa dengan Curl, saya akan hanya menunjukkan sebenar cepat apa Curl akan lakukan. Jika saya mahu mendapatkan semua URL dari laman web Craigslist, jika saya menaip curl, ia hanya tempat pembuangan sampah semua URL yang dari tapak basikal Craigslist ke terminal saya. Bukan itu terutamanya berguna kerana saya tidak mahu pergi secara manual melalui dan mencari perkara yang saya cari. Tetapi hanya supaya anda boleh melihat bahawa saya sebenarnya menggunakan kod yang betul, jika anda melihat penggunaan di URL untuk Craigslist dalam bikes-- atas sebab tertentu ia tidak dijumpai. Jika anda melihat halaman ini dan anda melihat URL, ini harus sama dengan permintaan Curl bahawa saya hanya menghantar. Dan sesungguhnya, itulah apa yang menjadi disimpan dalam doc pembolehubah. Oleh itu, apabila anda kembali kepada kod kami, kami kemudian boleh beroperasi pada doc ini berubah-ubah dengan menggunakan Css. Jadi mengatakan saya mahu mendapatkan semua tag yang span.txt, dan semua yang tag dalam tag itu. Dan mengapa kita mungkin mahu melakukan ini, saya mendengar anda menangis? Jika kita Memeriksa Element, ia memberikan anda pecahan bagaimana URL yang distrukturkan. Jika saya skrol ke bawah di sini, anda boleh melihat apa yang masing-masing berbeza unsur-unsur yang diwakilinya. Jadi mungkin saya mahu untuk mengakses ini elemen tertentu. Jadi, saya menggunakan pemaju Chrome alat untuk Memeriksa Element. Saya boleh melihat ke bawah di sini bahawa ini adalah tag dalam jangka masa yang tag dengan kelas txt. Jadi ini mendapat untuk kami operasi pertama yang adalah span doc.css, yang tag yang Saya sedang mencari dalam semua URL ini. Dan kemudian .txt beroperasi sama seperti CSS tidak apabila anda hanya menulis CSS dalam fail HTML anda dengan menyatakan kelas. Jadi pengendali khusus ini akan menentukan tag span dengan kelas txt. Dan kemudian jika saya meninggalkan ruang, ini maka akan pergi dalam tag yang dan kemudian mencari satu tag dalamnya. Jadi, jika saya hanya meletakkan ini kepada terminal, saya perlu dapat melihat dasarnya semua yang terletak dalam jangka ini kelas txt. Oleh itu, kita akan memberikan yang pergi. ruby Craigslist-pengikis. Dan sesungguhnya yang memberikan kita semua ini tag daripada pelbagai penyenaraian yang berada di halaman Craigslist itu. Jadi, jika kita kembali, kita boleh menjadikan ini ke dalam sesuatu yang lebih berguna. Mungkin kita mahu hanya pautan. Kerana dalam tag ini, saya juga akan mempunyai mempunyai pautan jalan bahawa halaman ini pergi ke. Jadi, jika anda melihat kod ini di sini, apa yang saya akan lakukan ialah bukannya Css, Saya boleh pergi at_css. Dan ini hanya akan mendapatkan pertama unsur semua perkara-perkara. Jadi jika saya berbuat demikian sehingga dalam kod saya hanya ditunjukkan sebelum ini, bukannya kembali semua itu, ia akan hanya kembali yang pertama daripada mereka. Jadi itulah bagaimana pengendali at_css berfungsi. Oleh itu, kita mahu untuk menyimpan jalan semua pertama tag a. Dan kerana yang akan memberi kita a-- jadi kita masih akan menggunakan Css. Tetapi oleh kerana ini akan memberi kita kembali pelbagai keseluruhan tag, kita akan akses unsur pertama. Jadi ini adalah satu lagi cara yang anda boleh mengakses mana-mana elemen tertentu jika anda mempunyai pelbagai unsur-unsur yang dikembalikan, kerana anda boleh merawat apa-apa yang pulangan Css sebagai array, pada asasnya. Dan kemudian kita akan mengakses sifat rujukan hiperteks ini. Jadi, jika anda mengambil melihat, jika anda kelihatan benar-benar dekat sini, jika anda hanya dasarnya melihat bar URL, ini adalah jalan yang anda akan dapat mengikis. Jadi, jika kita hanya menjalankan ini lagi, dan pastikan kita telah menyimpan ia. Anda boleh menyemak di rumah. Ini sebenarnya perlawanan dengan pautan ini. Jadi mengapa kita mungkin mahu menggunakan ini? Jika anda ingin mengikis halaman ini dan ia mempunyai halaman pautan seperti Craigslist tidak, anda mungkin mahu pergi maka ke dalam setiap pautan dan kemudian mengikis Kandungan itu, yang adalah apa yang kita akan lakukan. Jadi apabila anda mempunyai laluan sebagai berubah-ubah, saya tidak lagi benar-benar mengambil berat tentang mencetak ia keluar. Saya hanya perlu menyimpan ia sebagai pembolehubah. Dan kemudian saya boleh mengakses lain halaman dengan cara yang sama saya mengakses doc di tempat pertama. Kecuali dengan URL, kita akan menggunakan rentetan interpolasi seperti saya telah menerangkan secara Ruby awal-awal untuk menambah jalan ke akhir akar. Jadi apa ini akan lakukan ialah ini akan meletakkan di atas jalan bahawa saya dikikis sebelum ini dan kemudian menghidupkan yang ke dalam item baru, apa sahaja yang anda mahu memanggil kitab itu first_listing, sebagai contoh. Tetapi saya akan meninggalkan pada item untuk sekarang, kerana itulah yang saya gunakan di sini. Jadi mengatakan saya mahu mendapatkan keterangan pengeposan pertama di Craigslist. Jadi saya akan turun di sini. Saya akan klik pada Memeriksa Unsur lagi, kerana ini adalah keterangan. Saya pergi ke sini dan melihat jika saya boleh mencari bagaimana aku dapat dapat mencari tag yang unik ini. Dan dalam kes ini, ia mempunyai ID, yang membawa kita cara kita seterusnya mencari tag, yang dengan hashtag. Jadi untuk kelas, anda boleh menggunakan operator titik. Jadi .txt sedang menentukan kelas txt, sedangkan hash menentukan ID. Jadi dalam kes ini, tag adalah seksyen, dan ID adalah postingbody. Jadi ini pergi dan mendapati first-- kerana kami menggunakan at_css-- ini pergi dan mendapati elemen pertama yang datang dengan tag seksyen dan ID postingbody. Dan kemudian anda boleh mengakses elemen teks item yang kembali dengan .text. Dan kemudian kita boleh menyimpan bahawa dalam keterangan. Jadi sekarang kita mempunyai Huraian berubah-ubah, kita mungkin dapat lakukan, katakan, memfailkan I / O. Jadi memfailkan I / O di Ruby hampir sama dengan fail I / O dalam C di mana kita membuka fail. Kita boleh menulis kepadanya. Dan kemudian kita akan menutup fail itu. Jadi di sini, kami hanya menamakan fail, beberapa pembolehubah sewenang-wenangnya. Kita boleh juga hanya meletakkan ini di sini. Kami mempunyai pembolehubah bahawa kita menyimpan fail terbuka seperti dengan File.open. Dan kita menulis ke fail ini, jadi kami membukanya dengan pengendali w. Dan kemudian kita meletakkan tali ke dalam memfailkan dengan pengendali .puts itu. Dan kemudian kita meletakkan pembolehubah yang kita mahu menulis ke fail di dalamnya. Dan kemudian kita hanya menutup fail. Jadi, jika kita pergi ke hadapan dan menjalankan ini, ini perlu mengemukakan sesuatu dokumen dengan yang description.txt akan mempunyai penerangan ini di dalamnya. Jadi, jika saya menjalankan kitab itu tidak. Ia dihasilkan fail teks dengan, mudah-mudahan, perkara yang sama. Jadi mungkin ada posting baru yang yang datang semasa saya telah bercakap. Dan sesungguhnya ia kelihatan seperti terdapat. Jadi, jika kita pergi ke basikal klasik ini, 1962-1966, yang seolah-olah untuk perlawanan. Dan di sana anda pergi. Jadi itulah yang paling asas fungsi mengikis. Kita boleh mempunyai bukan hanya menulis ke fail ini, kita boleh menambah perkara yang pelbagai. Jadi, jika saya mengisytiharkan tiga tatasusunan, tajuk, harga, dan penerangan. Dan kami beroperasi pada item doc sekarang. Kita boleh pergi melalui dan semua span.txt itu. Dan ingat, ini mengembalikan array semua barang-barang yang didapati. Dan kemudian di Ruby, anda hanya boleh menggunakan .Setiap untuk melelar melalui setiap item array. Dan kemudian untuk setiap item, Saya hanya akan memanggilnya pautan, kerana itulah pada dasarnya apa yang ada. Jadi, jika saya meletakkan setiap a.hdrlnk link.css dot, ini sebenarnya akan link dan mencari dalam pautan lain Elemen HTML dan kelas sepadan. Jadi, jika kita ingat apa yang ini adalah, span.txt itu, anda boleh see- biar saya kembali quick-- sebenar dalam span.txt kami mempunyai banyak kelas lain. Jadi di dalam span.txt, kami tidak sabar- dengan tag dengan hdrlnk kelas. Jadi biarlah saya mendapati bahawa untuk anda semua sangat cepat. Jadi, anda boleh lihat di sini, ini adalah satu tanda itu dalam tempoh kelas txt yang mempunyai hdrlnk kelas. Dan itu memang apa kami cuba untuk mendapatkan. Oleh itu, kita sedang cuba untuk menyimpan semua mereka pautan di dalam tajuk. Dan kemudian kita akan mencetak di setiap pautan. Tiada maaf. Kami akan mencetak harga setiap daripada mereka. Jadi mari kita menjalankan ini benar-benar cepat dan melihat apa yang dilakukan. Jadi ini hanya pada dasarnya pergi melalui setiap satu pautan seterusnya, diakses tag yang berkenaan, dan kemudian menarik diri daripada harga. Dan ia berbuat demikian kerana selepas anda mempunyai semua dalam tajuk, kita baru sahaja disimpan tajuk di sana. Kami baru sahaja disimpan link dalam tajuk array. Dan dalam hal ini untuk operasi gelung, mana daripada pergi ke a.hdrlnk, yang kami cari span.price a. Jadi, jika saya boleh hanya benar-benar mencari dengan cepat harga, jika anda memeriksa unsur, anda akan melihat bahawa ia adalah tempoh masa yang dengan kelas harga. Dan itu asasnya bagaimana kita mendapat harga di sana. Jadi itulah yang benar-benar kes asas mengikis. Itulah bagaimana anda mendapatkan semua elemen pada halaman bahawa, berkata, anda sudah tahu URL. Jadi, jika kita ingin mendapatkan sedikit lebih mendalam, kita boleh mengikis halaman dalam halaman. Dan untuk contoh ini, saya akan menjadi keluarkan ke fail CSV. Jadi saya memerlukan csv di sini kerana Ruby tidak, dalam dirinya sendiri, mempunyai fungsi yang kepada output hanya fail CSV. Jadi, itu sangat mudah. Biar saya pergi ke depan. Kami meliputi fail I / O. Jadi ini adalah sama dengan bagaimana ia adalah di C. Dan sebelum kita beralih kepada Kimono, Saya hanya akan menunjukkan kepada anda benar-benar cepat bagaimana untuk mengikis tapak dalam pemandangan. Oleh itu, kita telah belajar bagaimana mengisytiharkan tatasusunan di Ruby. Jadi saya hanya mengisytiharkan sekumpulan tatasusunan sewenang-wenangnya bahawa saya akan menyimpan data dalam. doc beroperasi dengan cara yang sama seperti yang berlaku dalam fail sebelumnya. Kami masuk ke dalam, mencari tempat setiap satu daripada span.txt ini. Kita sudah tahu bahawa. Itulah bekas dalam mana setiap pautan mempunyai semua data yang kami mahu. Jadi di sini apa yang kita lakukan adalah untuk setiap link span class txt, kita akan dalam dan kami sentiasa mencari tag yang, mencari elemen pertama itu. Ingat, Css mengembalikan array, supaya anda tidak boleh hanya mengaksesnya sebagai adalah. Kita akan mencari elemen yang pertama. Walaupun ia adalah pelbagai satu perkara, anda perlu menggunakan sintaks ini, dan kemudian tarik keluar atribut href. Oleh itu, kita melakukan ini lebih awal. Jadi ini harus kelihatan biasa. Dan sekarang kita mempunyai array dipanggil laluan semua pautan kami bahawa kita akan ingin gunakan. Jadi, jika kita mempunyai pelbagai ini semua daripada laluan yang kita ingin gunakan, kita boleh membuat item bagi setiap halaman tersebut apabila kita membuka laman tersebut. Jadi seperti yang kita juga melihat pada sintaks sebelum ini, di mana melakukan rentetan interpolasi dengan jalan yang di sini, jadi sintaksis adalah hanya untuk jalan. Dan saya dapat nama ini berubah-ubah apa-apa nama sewenang-wenangnya. Ini adalah salah satu yang penting. Ini adalah pelbagai bahawa anda akan menjadi mengakses setiap elemen. Tetapi apabila anda mengatakan dengan jalan-jalan yang, ini bermakna untuk setiap elemen dalam laluan, memanggilnya jalan, dan menggunakan itu. Ini pada asasnya seperti apabila anda lakukan untuk gelung dan anda menggunakan int i. Jadi, anda boleh merawat jalan sebagai berubah-ubah yang yang menokok. Kemudian bagi setiap daripada mereka, pergi ke setiap pautan. Kerana kita menyimpannya di halaman ruang, jadi kita membuat halaman baru setiap masa kita mengaksesnya. Dan kemudian dalam halaman yang baru, mencari span.postingtitletext, span.price, dan maka seksyen # postingbody. Kami telah dilindungi seksyen # postingbody apabila kita melihat keterangan. Oleh itu, kita boleh pergi melihat dalam jawatan Craigslist itu, jika anda hanya melihat tajuk, anda boleh melihatnya di sini, span postingtitletext. Dan sebab itulah ianya ada. Dan kemudian untuk harga, anda boleh mengaksesnya dengan span class harga. Oleh itu, kita juga mungkin mungkin mahu menyimpan URL. Oleh itu, kita hanya akan menjalankan ini sekali lagi, menyimpannya di dalam array, kerana jika anda sedang mencari di Craigslist, anda mungkin akan mahu cara untuk, jika anda melihat sesuatu yang menarik bagi anda, kembali ke laman web itu. Jadi anda hanya mahu menyimpan URL demi rujukan. Ini hanyalah pada dasarnya lain sintaks untuk untuk gelung. Saya hanya boleh melakukan paths.each sebaliknya daripada untuk jalan-jalan dengan indeks. Dan sintaks ini adalah Ruby bagi- jalan adalah apa yang kita lakukan di sini, mengisytiharkan pembolehubah untuk setiap item. Dan indeks berkelakuan seperti i dalam C untuk gelung. Jadi, anda boleh menjejaki apa indeks adalah. Jadi di sini adalah hanya perkara yang mudah sedikit apabila anda menjalankan pengikis. Jika anda mengikis beratus-ratus muka surat, memastikan bahawa ia tidak tergantung, ia akan hanya output, Saya mengakses laman ini, dan memastikan bahawa ia masih berterusan. Tetapi untuk tujuan kita, kerana ada seratus item, Saya akan mengakses hanya tiga daripada mereka supaya kita tidak kehabisan masa di sini. Tetapi sebelum kita dapat itu, saya hanya akan menunjukkan kepada anda benar-benar cepat, Saya akan keluarkan tajuk, harga, penerangan, dan URL setiap satu pautan yang saya telah dikikis. Dan kemudian ini hanyalah sintaks untuk perpustakaan CSV. Anda membuka CSV. Ini adalah apa yang saya akan memanggilnya. Membukanya dengan menulis do. Dan kemudian CSV akan menjadi fail yang anda memasukkan semua ke dalam. Ini hanyalah cek kewarasan untuk saya tahu bahawa ia berjalan. Dan ini adalah cek kewarasan saya tahu bahawa ia selesai. Jadi, saya meletakkan tajuk ke dalam berturut-turut dalam CSV, harga, url, penerangan, semua ke dalam baris dalam CSV. Jadi, jika kita pergi dan menjalankan sekarang-- ini dan saya hanya memastikan bahawa saya telah menyimpan kitab itu dan bukannya hanya keluarkan ia ke terminal, kita harus mempunyai CSV fail yang yang dihasilkan. Jadi di sini kita dapat melihat CSV fail yang sudah dihasilkan. Ini adalah output Pandangan bahawa saya hanya berlari. Seperti yang anda boleh lihat di sini, pengaksesan halaman 0, 1, 2, 3. Ini adalah tajuk, harga, penerangan. Dan jika kita melihat CSV ini fail yang kami telah dihasilkan, anda boleh melihat yang outputted sini. Ini bukan Excel, jadi ia bukan diformat dalam baris dan lajur. Tetapi anda boleh bayangkan bagaimana ia mungkin akan diformat. CSV bermaksud nilai dipisahkan koma. Jadi anda boleh bayangkan ini mungkin berturut-turut. Dan setiap koma akan menunjukkan ruang yang berasingan. Hanya satu perkataan caution-- kadang-kadang anda berada mengikis perkara dengan banyak tanda koma. Jadi, jika anda keluarkan ke fail CSV, ia mungkin tidak output cara yang anda mungkin berfikir. Jadi, itu pada dasarnya semua ada untuk mengikis asas HTML muka surat dengan Nokogiri. Jadi makhluk internet inovatif kerana ia telah datang dengan lebih automatik dan GUI versi, walaupun kurang mantap versi mengikis pelbagai laman web. Dan untuk tujuan kami Saya akan menunjukkan sambungan Chrome dipanggil Kimono. Dan semua yang anda perlu lakukan adalah anda menavigasi ke halaman yang anda mahu untuk mengikis. Anda klik pada bidang yang diminati. Anda menentukurkan bidang, kerana ia akan secara automatik mengesan difikirkannya anda mahu mengikis, dan kemudian anda hanya membuat API. Jadi jika kita untuk menunjukkan pada Craigslist, ia sebenarnya tidak akan berfungsi. Dan ini adalah apa yang saya akan kembali ke berkata mengenainya yang bukan sebagai yang teguh. Ia mempunyai masalah mewujudkan API. Tetapi sebagai demonstrasi daripada apa yang ia akan lakukan, jika anda memasang pelanjutan Chrome, semua yang anda lakukan adalah anda klik di atasnya. Ia Kimonofies halaman, dan kemudian anda klik pada perkara yang anda mahu untuk skrip. Jadi jika saya klik pada itu, ia akan mengetengahkan apa yang difikirkannya Saya hendak menjadi mengikis off laman tersebut. Jadi mungkin saya panggil penyenaraian ini. Ini adalah berapa banyak perkara yang saya pilih. Dan saya hanya boleh mengesahkan atau menafikan beberapa daripada penyenaraian lain yang disyorkan untuk mendapatkannya untuk menambah apa yang akan dikikis. Oleh sebab itu kita dapat lihat ada seratus barangan terpilih. Jika saya mahu mempunyai ladang lain yang saya juga mengikis yang berkaitan dengan ini, mengatakan saya mahu mengikis harga juga, maka saya boleh melakukan perkara yang sama. Jadi di sini adalah satu demonstrasi bagaimana ia lebih kurang mantap, kerana sekarang ia mengambil bandar dan bukannya hanya harga yang saya mahu. Dan kini ia meningkat 200 perkara. Anda boleh kembali dan memadam. Anda boleh cuba lagi. Tetapi tidak ada jaminan. Ini adalah bagaimana kerja-kerja ini kadang-kadang. Seperti yang anda lihat di sini, kini ia berkata 96 di sini. Ia mengambil sebahagian besar daripada pautan yang anda mahu untuk mengikis, tetapi tidak semestinya semua daripada mereka. Satu lagi alat yang berguna Kimono walaupun adalah anda boleh pergi ke Ciri-ciri Advanced di sini, pergi ke Advanced, dan ia akan menunjukkan kepada anda pecahan yang unik cara untuk mengakses HTML tag yang anda mahu untuk mengikis. Jadi untuk penyenaraian, jika anda melihat penggunaan di sini, jika anda mengakses div p span span, anda sebenarnya hanya menggunakan ini dalam kod Nokogiri anda, di mana sebelum kita telah span.txt untuk mengakses setiap satu daripada senarai. Jika saya hanya mahu teks dalam senarai, Saya dapat input ruang div p span ruang ruang span ruang, dan ia akan mencapai kesan yang sama. Dan bagi anda yang berminat dalam menggunakan ungkapan biasa, ia berlaku juga memberi anda biasa semacam ungkapan tali untuk input untuk mencari perkara-perkara anda cuba untuk mencari. Jadi ada satu lagi ciri sejuk daripada Kimono di mana anda boleh nombor pd halaman buku, yang bukan sahaja boleh saya mengikis keputusan halaman ini, Saya boleh klik pada ini sedikit butang sini, penomboran, menentukan butang yang akan membawa saya ke halaman seterusnya, dan kemudian ia hanya akan tahu bahawa ia boleh melelar ke halaman seterusnya, dan kemudian mengikis semua the-- selagi kerana ia adalah format yang sama course-- Pandangan semua link juga. Jadi kerana Kimono tidak mahu bekerja dengan Craigslist, apa yang kita lakukan adalah saya Kimonofied Crimson Harvard. Saya telah ditarik keluar beberapa jenis bahagian dipaparkan artikel, mengesahkan di sini. Mengatakan semua ini. Saya telah menyusun API ini untuk anda terlebih dahulu. Tetapi jika tidak, apa yang akan anda lakukan adalah anda akan hanya klik Selesai. Masukkan butir-butir API anda. Tetapkan untuk memuat merangkak automatik atau manual. Jadi, anda boleh mengemas kini data setiap 15 minit, mingguan, harian, apa sahaja yang anda mahu. Nama API anda. Buat API. Untuk kamu, saya telah menciptakan Lembayung depan API halaman sudah. Jadi anda hanya membuat akaun di Kimono, dan ia akan menyimpan semua API anda untuk anda. Jadi pada asasnya itu sahaja anda scrapes yang berbeza berasingan. Jadi, jika kita lihat di sini, ini adalah pendapat pautan yang saya telah dikumpulkan. Inilah yang dipaparkan pautan yang saya telah dikumpulkan. Dan ini yang paling banyak dibaca pautan yang saya telah mengumpul Pandangan dari API paling baru-baru ini. Jadi jika anda boleh lihat di sini, ini akan menjadi yang dipaparkan, ini akan menjadi pendapat, yang dalam contoh ini, Saya telah digabungkan mereka semua ke dalam satu koleksi. Tetapi jika anda hanya bermain-main dengannya sedikit, anda boleh berpecah dan dibahagikan sehingga bagaimanapun anda mahu selagi sebagai pemformatan adalah sedikit berbeza. Hanya untuk bermain-main dengan ini, merangkak ditubuhkan, salah satu daripada kelemahan adalah anda hanya boleh merangkak naik 25 muka surat pada satu masa. Itulah salah satu faktor menghadkan. Tetapi di sini, tidak meletakkanya merangkak manual, ini adalah bagaimana anda boleh memberitahu ia untuk mengemas kini data anda. Dan di sini anda boleh melihat sejarah merangkak anda segala-galanya yang anda telah merangkak. Dan anda semua boleh kembali, mendaftar, bermain-main dengan semua cara yang berbeza bahawa anda boleh mengubah suai dan menggunakan data anda. Kimono boleh ditetapkan sehingga mengikis pautan dalam pautan. Dan anda akan berbuat demikian dengan terlebih dahulu mengikis senarai pautan, dan kemudian menggunakan API bahawa sebagai melompat dari mata untuk API lain yang anda buat skrip. Tetapi itu lebih rumit daripada apa yang kita akan masuk ke dalam hari ini. Jadi itulah Kimono. Kami akan bercakap tentang kebaikan dan keburukan Nokogiri dan Kimono. Nokogiri, ia benar-benar cepat. Ia mudah untuk menguji. Anda hanya boleh meletakkan apa-apa untuk konsol, mudah untuk mengkonfigurasi. Anda boleh membuat keputusan apa yang anda mahu untuk mengikis dan kedai. Tiada had halaman. Saya benar-benar digunakan untuk mengikis seperti 1800 Afrika Selatan laman web sekolah untuk e-mel untuk magang yang saya lakukan. Jadi, itu mungkin, walaupun amalan terbaik akan berpecah skrip. Kerana jika ia gagal, maka anda tidak mendapat apa-apa. Maka jika kamu tidak seratus, mungkin 200 muka surat pada satu masa, maka anda mempunyai beberapa peluang sekurang-kurangnya mendapatkan itu sedikit demi sedikit, terutamanya jika anda mempunyai internet yang buruk. Malangnya ia hanya boleh mengikis HTML. Jadi jika anda mempunyai pages-- dinamik dimuatkan dan saya akan menunjukkan kepada anda contoh seperti Kayak dalam second-- Nokogiri malangnya tidak boleh mengikis itu. Tetapi Kimono juga mudah untuk digunakan. Seperti yang anda lihat, ia pada dasarnya titik dan klik. Ia boleh mengikis JavaScript. Malangnya, tidak maksimum berapa banyak halaman yang anda boleh mengikis. Kadang-kadang ia sedikit sukar untuk mengkonfigurasi. Ia mendapat keliru. Tetapi ia pasti sesuatu yang perlu dipertimbangkan jika anda tidak cuba untuk mempunyai mengikis dikekalkan super mantap. Jika anda hanya mahu untuk mendapatkan segala-galanya kira halaman dengan cepat, kemudian Kimono adalah benar-benar alat yang baik untuk digunakan. Dan seperti yang saya nyatakan sebelum ini, ada ciri maju Kimono yang menunjukkan anda bagaimana untuk mengakses HTML unik elemen, yang super berguna walaupun jika anda bekerja di Nokogiri. Jadi, jika kita pergi ke laman web Kayak, untuk Contohnya, anda boleh lihat di sana is-- atau mungkin anda tidak dapat melihat. Tetapi jika saya menunjukkan kepada anda URL untuk Kayak, ini sebenarnya hanya URL sumber itu. Ini adalah URL yang sebelum menjadi diubahsuai dengan apa jua JavaScript skrip bahawa mereka telah berlaku. Dan ia akan kelihatan berbeza dari memeriksa unsur. Jadi, jika anda pergi melalui dan anda perlawanan sehingga Element Memeriksa kod kepada kod sumber, ia adalah sebenarnya akan berbeza. Dan ini adalah pada dasarnya mengapa Nokogiri tidak boleh mengikis laman dinamik dimuatkan. Kerana Nokogiri adalah mengikis URL sumber, sedangkan Kimono sebenarnya mengikis apa yang anda dasarnya lihat di Pilih Element. Jadi, jika saya pergi melalui dan saya cuba Kimonofy Kayak, Saya benar-benar boleh pergi melalui dan pilih harga. Ia sedikit lebih keras, dan dalam kes ini, ia adalah benar-benar melihat harga ini berbeza daripada ini. Jadi sedangkan anda boleh configure-- atau jika ini tidak dinamik dimuatkan, anda boleh mengkonfigurasi Nokogiri untuk mendapatkan semua ini. Kerana pemformatan sedikit berbeza untuk penyenaraian ini kerana ia dibandingkan dengan yang lain daripada mereka, dan anda boleh lihat di sini ia sebenarnya hilang dan semua harga tiket dipilih. Mungkin saya mahu untuk memilih masa penerbangan juga. Dan saya boleh pergi melalui dan semacam mengkonfigurasi itu. Saya tidak mahu itu. Saya hanya mahu masa penerbangan depan. Dan kemudian selepas beberapa ini melalui, ia mendapat gambar. Jadi ini Kimono cukup bijak. Ia hanya tidak cukup mantap. Terdapat beberapa yang lain alternatif yang boleh anda gunakan. Dan saya akan menunjukkan kepada anda di sini. Sekiranya anda lebih selesa di Python bukannya Ruby mungkin, terdapat perpustakaan dipanggil Sup indah. Anda boleh menggunakan itu. Ia hampir sama dengan Nokogiri. Ia mempunyai beberapa lagi ciri-ciri. Anda boleh mencari tag HTML dan kemudian bergerak ke atas atau bergerak ke tepi. Ada PyQt. Ini sebenarnya boleh mengikis dinamik laman web, kerana ia adalah jenis adalah WebKit yang berpura-pura menjadi pelayar tanpa ada sebenarnya sebagai pelayar. Oleh itu, ia akan menunggu untuk semua JavaScript untuk memuatkan pertama, dan kemudian masuk dan cuba mengikis laman web ini. Jika anda mahu melekat dengan Ruby, anda boleh pergi satu tahap dari Nokogiri. Anda boleh menggunakan Capybara dengan pembungkus Poltergeist. Dan ini boleh sebenarnya asasnya melakukan perkara yang sama sebagai PyQt, iaitu ia adalah WebKit a. Ia menunggu untuk JavaScript untuk memuatkan pertama. Jika anda biola main dengan cukup, anda juga boleh mendapatkannya untuk klik pada sesuatu. Jadi, jika ada link yang bukan href klasik di mana jalan yang mudah diakses, dan ia adalah beberapa perkara JavaScript yang mengesan klik, anda sebenarnya boleh melakukannya. Perpustakaan lebih popular untuk mensimulasikan pengguna adalah dalam JavaScript, iaitu PhantomJS. Ini jelas boleh mengikis dinamik laman web kerana ini adalah pada dasarnya berpura-pura menjadi Chrome tanpa antara muka pengguna. Dan kemudian, sudah tentu yang paling , pilihan yang teguh tetapi perlahan, ialah automasi pelayar Selenium. Dan malangnya, anda tidak akan menjadi dapat melakukan ini dalam IDE CS50 anda. Kerana pada dasarnya apa yang ia merupakan ia but Chrome anda, Firefox, apa sahaja pelayar yang anda ingin gunakan, dan ia menjejaki mungkin tetikus anda pergerakan, apa sahaja yang anda taip, dan ia hanya jenis mengautomasikan proses ini. Oleh itu, ia telah dibangunkan sebagai satu bentuk Laman web alat ujian automasi. Tetapi banyak orang menggunakan Selenium untuk mengikis laman web jika tidak mereka mempunyai banyak kesukaran mengikis dengan sesetengah yang lain, alat-alat yang lebih cepat. Jadi itu sahaja yang saya ada untuk web mengikis. Berseronok. PENONTON: Soalan. ROBERT KRABEK: Ya. PENONTON: Adakah terdapat mekanisme untuk hash laman web supaya anda boleh pada dasarnya melaluinya kemudian hari. ROBERT KRABEK: Ya. Oleh itu, kita meletakkan, dalam kita Sebagai contoh, bagi kedua-dua mereka, kita meletakkan seluruh laman web ke dalam doc. Dan supaya anda boleh sebenarnya hanya mengambil doc berubah-ubah dan menulis ke fail. Jadi, jika saya mahu, saya boleh menulisnya sebagai fail HTML, dan kemudian daripada menggunakan OpenURI dan permintaan Curl, kemudian saya hanya boleh membuka doc HTML dan kemudian mencari untuk itu. PENONTON: Tetapi boleh anda mengekalkan jenis pengalaman dalam talian semasa anda melakukan di luar talian. Contohnya. apabila anda berada terbang selama beberapa jam, Saya hendak dasarnya arkib seluruh laman web. [Didengar] ROBERT KRABEK: Ya, itu exactly-- jadi betul-betul apa ini melakukan adalah ia mengambil segala-galanya yang akan menjadi di URL ini. Jadi, jika kita berlari Curl, ia mengambil semua HTML ini, dan ia menyimpannya dalam doc berubah-ubah. Oleh itu, maka anda boleh melakukan apa anda mahu lakukan dengan doc. Anda boleh output ke fail. PENONTON: Tetapi ia tidak dikaitkan. Ia tidak dinamik. Ia bukan rekursi, bukan? Anda lihat apa yang saya maksudkan? Saya cuba untuk pada dasarnya jenis hash seluruh laman web pada cakera keras saya supaya saya pada dasarnya boleh melakukannya selama beberapa jam tanpa internet. ROBERT KRABEK: Betul. Jadi, jika saya had-- jadi di mana yang fail saya I / O? Jadi ini adalah fail I / O. Jadi mengatakan sebaliknya ini, saya menyeru craigslist.html ini. Saya membuka bahawa sehingga. Saya hendak meletakkan doc ke dalamnya. Saya menutup fail. Dan kemudian hanya kerana IDE CS50 adalah pada awan, itu apa sahaja. Saya boleh pergi di sini. Saya boleh memuat turun fail. Dan kemudian yang akan berada di cakera keras saya. Jadi, anda boleh melakukannya dengan cara itu. Atau jika anda berada di rumah, tidak menggunakan CS50 IDE, seperti Sublime atau sesuatu, ini adalah lebih mudah, kerana ini semua di dalam negara, tidak terikat kepada internet. PENONTON: saya lihat. Ini adalah untuk satu masalah. Bolehkah anda melakukannya secara berulang supaya anda pergi beberapa lapisan jenis mendalam perkara? ROBERT KRABEK: saya boleh memuat turun folder juga, jika itu yang anda meminta. PENONTON: Ya. ROBERT KRABEK: Cool.