[მუსიკის დაკვრა] ROBERT KRABEK: Hello, ბიჭები. ჩემი სახელია რობერტ Krabek და მე იქნება სწავლების თქვენ ბიჭები როგორ ძლივს ვებ Nokogiri, რომელიც Ruby ბიბლიოთეკა, და Kimono, რომელიც არის Chrome გაფართოება. ასე რომ, პირველი არ არის რამდენიმე რამ, რომ თქვენ შეგიძლიათ გააკეთოთ, თუ შესაძლოა თქვენ უკვე აკეთებს ყველა psets ჯერჯერობით და თქვენი სამუშაო გარემოს მიღების ცოტა სავსე. ჩვენ შეგვიძლია რეალურად მხოლოდ წასვლა და შევქმნათ ახალი სამუშაო გარემოს თქვენთვის უბრალოდ ახალი პროექტი. ასე რომ, თუ გვინდა, რომ გაგრძელდება მომუშავე CS50 თარგი ID რომ თქვენ გაკეთებული აქვს, მოგერიდებათ, და თქვენ შეგიძლიათ მხოლოდ ინსტალაცია Nokogiri ერთად CFLAGS equals-- gem დააყენოთ nokogiri. მაგრამ სხვაგვარად მე გაჩვენებთ როგორ უნდა შეიქმნას ახალი up. და შემდეგ ეს არსებითად მითუმეტეს უფრო სასწავლო დისკები. და თქვენ კოდირება, როგორც თუ იყო უბრალოდ კოდირების Sublime ან რამე. ასე რომ, თუ გადავწევთ. ასე რომ ვთქვათ, ეს არის თქვენი მიმდინარე CS 50 ID. თქვენ არ შეგიძლიათ უბრალოდ წასვლა Cloud9 აქ. თქვენ შეგიძლიათ წავიდეს თქვენი დაფა. ეს უნდა აღზარდონ Workspaces tab. და მაშინ თქვენ შეგიძლიათ უბრალოდ დააჭირეთ აქ, შექმნა ახალი სამუშაო გარემოს. სახელი თქვენი ახალი სამუშაო გარემოს, იქნებ ტესტი, ან ჩაშლის. და შემდეგ დააჭირეთ ამ საბაჟო tab აქ, ნაცვლად CS50 თარგები tab. და მაშინ თქვენ შეგიძლიათ უბრალოდ წასვლა და შექმნას ახალი სამუშაო გარემოს. მე უკვე შეიქმნა სამუშაო გარემოს აქ. ასე რომ, ჩვენ უნდა მუშაობა ამ. და თუ შეიქმნა ახალი სამუშაო გარემოს ასე Custom tab, შეგიძლიათ უბრალოდ აკრიფოთ gem ინსტალაცია nokogiri, რომელიც არ აპირებს. OK, ეს ცოტა გაყინული. მაგრამ თქვენ შეგიძლიათ აკრიფოთ gem დააყენოთ nokogiri. და რომ უნდა იყოს, რომ ყველა არ არის ინსტალაცია. როგორც ვთქვი, თუ თქვენ ჯერ კიდევ სამუშაო თქვენს CS50 თარგი ID, თქვენ უბრალოდ უნდა აკრიფოთ CFLAGS უდრის gem დააყენოთ nokogiri. და მე უკვე დაყენებული აქ მე არ გაგვაჩნია. მაგრამ მათთვის შემდეგ ერთად, შეგიძლიათ ამის გაკეთება. ასე რომ, კიდევ მაქვს თქვენი Nokogiri სამუშაო გარემოს ან ბიბლიოთეკაში დამონტაჟდა, მე ვაპირებ მოგცემთ ცოტა ავარიის კურსი Ruby სინტაქსი იმიტომ, რომ Nokogiri არის Ruby ბიბლიოთეკა. ასე რომ თქვენ უნდა იცოდეთ ზოგიერთი ძირითადი Ruby სინტაქსი მუშაობის Nokogiri. ასე რომ, ზოგიერთი ძირითადი განსხვავებები ის, რაც თქვენ გამოიყენება ალბათ, თუ თქვენ უკვე მუშაობს ჯერჯერობით მხოლოდ C და PHP, განაცხადოს ცვლადები არ ტიპის. თქვენ არ გამოიყენონ semicolons, რომელიც არის ერთგვარი რელიეფის. არ არის ფრჩხილებში ახლა გარშემო ან ხოლო მარყუჟების, მაგალითად. თქვენ უბრალოდ უნდა ბლოკი კოდი და მაშინ დააყენა ბოლოს ბოლოს, რომ. არ არსებობს plus plus ან მინუს მინუს, ასე რომ მხოლოდ ვიცი, რომ როდესაც თქვენ აკეთებთ მარყუჟების, უბრალოდ პლუს შეადგენს და მინუს შეადგენს. და ნაცვლად hash მოიცავს, თქვენ გამოიყენოთ მოითხოვს და შემდეგ რასაც ბიბლიოთეკა ცდილობს ჩატვირთვა თქვენი პროგრამა. Ruby არ არის შედგენილი ენაზე. ასე რომ კიდევ ერთი რელიეფური. ეს უფრო ჰგავს PHP, სადაც ეს გაგებული ენის. თქვენ შეგიძლიათ აწარმოებს ნებისმიერი Ruby სკრიპტი, რომელიც თქვენ წერა Ruby მოჰყვა მიერ სახელით თქვენი სკრიპტი ან პროგრამა. უნდა ნიშნავდეს, რომ ის Ruby პროგრამა, თქვენ უბრალოდ დასრულდება ეს .rb ნაცვლად გ. და არსებობს ცვლადი ზომის კოლექტორები Ruby, რომელიც არის სუპერ მოსახერხებელი როდესაც თქვენ გაუქმების და ალბათ გვინდა დამატება მონაცემები, რომ თქვენ scraped მასივი. თქვენ არ გაქვთ malloc ახალი მასივი და კოპირება ძველი მასივი შევიდა ახალი მასივი. შეგიძლიათ უბრალოდ დამატება ერთად ორი ისარი ნიშნები. და არ არსებობს სიმბოლო, არსებობს მხოლოდ ერთი წერილი სიმები. ასე რომ, უნდა იყოს ცოტა უფრო ადვილი. ასე რომ, ჩვენ მხოლოდ გაძლევთ მაგალითები ზოგიერთი ძირითადი Ruby სინტაქსი. ასე რომ, აქ თქვენ შეგიძლიათ ნახოთ, რომ ნაცვლად ირიბის ხაზი, კომენტარს Ruby, უბრალოდ გამოიყენოთ ფუნტი ნიშანი. და ცვლადის დეკლარაცია, თქვენ მხოლოდ ჩაწერეთ ცვლადი ტოლობის რაც გაგიხარდებათ ცვლადი უნდა იყოს. ისინი შეიძლება სტრიქონები. თქვენ შეგიძლიათ მასივი, რომელიც თქვენ მოეყვანა ფასეულობებით. აყენებს და ბეჭდავს მსგავსია. ჩვენი მიზნებისთვის, განსხვავება მხოლოდ ის არის ნამდვილად რომ აყენებს, რომელიც დგას აყენებს, უბრალოდ აყენებს ახალი ხაზი ხასიათი რასაც თქვენ ბეჭდვა. ასე რომ, თუ ჩვენ მისცეს პატარა მიტინგი აქ, ჩვენ შეგვიძლია აწარმოებს ამ with-- გახსნა ახალ ტერმინალში. თქვენ შეგიძლიათ ნახოთ ყველა ამ ფაილი, რომელიც არის ჩემი ტერმინალის. და თუ უბრალოდ გაუშვით Ruby, ლალი intro.rb, ეს აყენებს ხუთ გაუმარჯოს Mather, Quincy, Carrier. Adams. ასე რომ, ეს ყველაფერი არ არის რომ გამოცხადების მასივები. აუდიტორია: რობერტ შეგიძლია შრიფტის ცოტა დიდია? ROBERT KRABEK: დიახ. და შემიძლია მიუახლოვდით იმიტომ, რომ თქვენ არ შეუძლია გასადიდებლად ტერმინალი ფონტები როგორც ჩანს. ასე რომ, ის, თუ როგორ ბეჭდვა ცვლადები რომ თქვენი ტერმინალში. თქვენ ასევე შეგიძლიათ გამოიყენოთ ცვლადები შიგნით სიმებიანი. ასე რომ, ცოტა ხნის წინ, PHP, თქვენ არ ვისწავლეთ რომ არ სიმებიანი ინტერპოლაცია. ასე რომ, თუ თქვენ შეხედეთ აქ, თუ მე აცხადებენ, სამი ცვლადის სახელი, გვარი, ბიბლიოთეკა, ენა, და მე აყენებს, მე დაწერა ტექსტი, hello ჩემი სახელი არის. და მაშინ ნაცვლად PHP მობილური სიმებიანი ინტერპოლაცია რომელიც გამოიყურება ცოტა უფრო მოსწონს, თქვენ გაქვთ ფუნტი ნიშანი, და მაშინ Curly გაუწიოს, და შემდეგ სახელი ცვლადი. და ასე ნეტავ ბეჭდვა, ვთქვათ, რაც არ უნდა ცვლადის სახელი. და შემდეგ ასევე შეგიძლიათ concatenate სიმები. Ruby ხდის სუპერ ადვილი პლუს ნიშანი. თქვენ უბრალოდ უნდა ერთი სიმებიანი მარცხენა პლუს ცვლადი ან სხვა სიმებიანი პლუს სიმებიანი. ასე რომ, თუ მე ბეჭდვა ეს, მას უნდა უბრალოდ, ვამბობთ Hello, ჩემი სახელია რობერტ. მე იქნება სწავლების შენ nokogiri Ruby. და მოდით უბრალოდ ადასტურებენ, რომ მართლაც case-- ruby ​​intro. Hello, ჩემი სახელია რობერტ. მე იქნება სწავლების შენ nokogiri Ruby. მოძრავი, თუ სხვაგან განცხადებებს, ეს ცოტა განსხვავებული ის, რაც თქვენ შეიძლება გამოყენებულ იქნას თუ თქვენ უკვე მუშაობს C. თქვენ არ უნდა ფრჩხილებში. თქვენ არ გჭირდებათ Curly braces. და ნაცვლად სხვაგან, თუ ეს არის concatenated elsif. ასე რომ, აქ, თუ მე განაცხადა x up აქ, როგორც ვხედავთ, x კვლავ 5. ასე რომ, თუ x ნაკლებია 3, ამას მცირე. თუ ეს არანაკლებ 7, საშუალო, სხვა დიდი. 5 არის საშუალო ნომერი. და მე დასრულდება ამ ბლოკის კოდი და ბოლოს. აქ არის ჩემი for loop. ეს სინტაქსისიც ოდნავ განსხვავებული. 0 ხუთ მხოლოდ არსებითად არის გამოცხადების მასივები 0-დან 5. ასე რომ, არსებობს ხუთი slots მასივი. და მაშინ თითოეული სლოტი, რომ მასივი, მე ვიქნები დამატება i. ასე რომ, ეს უნდა ამობეჭდოთ 0-დან 5 ან 0-დან 4. და ეს უნდა ბეჭდვა საშუალო. და მე მხოლოდ Blaze მეშვეობით. თქვენ ბიჭები ექნება დაშვება ეს კოდი მოგვიანებით. ასე რომ, შენ შეიძლება აწარმოებს ამ თქუენგან. ასე რომ, ეს არის თქვენი ძირითადი ხოლო loop. ეს იქნება მხოლოდ ბეჭდვის j, დამატება 1, სანამ ჩვენ მოხვდა 5. სწრაფად Ruby ავარიის კურსი როგორ დავწეროთ ფუნქცია. იმის ნაცვლად, რომ ვთქვათ, int ფაქტორიალი ნომერი, ჩვენ უბრალოდ უნდა დაცვა. და არსებითად თქვენ განსაზღვრის ფუნქცია აქ. ეს იქნება სახელი ფუნქცია, და ეს არის ნებისმიერი ცვლადები, რომ თქვენ გსურთ გაივლის შევიდა ფუნქცია. თქვენ შეგიძლიათ, თუ განცხადებები ფარგლებში. თქვენ შეგიძლიათ მისი დაბრუნება. ამ შემთხვევაში, ჩვენ განსაზღვრის რეკურსიული განხორციელებული factorial ფუნქცია. ასე რომ, ჩვენ უბრალოდ ვუწოდებთ ფუნქციები ამ Ruby მოსწონს ეს. ასე რომ, თუ მე განისაზღვრება, მე შეგიძლიათ დარეკოთ factorial, გაივლის 3, და მაშინ 3 იქნება, ცვლადი რომ შემიძლია ფარგლებში ფუნქცია. ეს to_s მხოლოდ გარდამტეხი დაბრუნების ღირებულება factorial შევიდა სიმებიანი. წინააღმდეგ შემთხვევაში ეს იქნება ჩააგდოს შეცდომა ვამბობ რა, მე ვერ ბეჭდვა სიმებიანი იმიტომ, რომ, როგორც გახსოვთ, აყენებს დააყენა სიმებიანი იმიტომ, რომ ეს ფაქტორიალი დაბრუნდა ნომერი. ასე რომ ჩვენ შეგვიძლია გარდაქმნას, სიმებიანი, როგორც ასეთი. და პირიქით, ასევე შეგიძლიათ გადაიყვანოთ სიმებიანი რიცხვი ერთად to_i. ასე რომ, რაც ყველაფერს სუპერ მარტივი, თუ უბრალოდ განვიხილოთ ეს out, შენახვა და აწარმოებს factorial ფუნქცია. ჩვენ უნდა ნახოს რომ factorial 3 არის 6. და რომ მართლაც ასეა. ასე რომ, თქვენი ავარიის კურსი Ruby. და ახლა, რომ თქვენ იცით, Ruby, ჩვენ შეგვიძლია წავიდეთ ძირითადი Nokogiri ჩაშლის შეიქმნა. არსებითად ყველა თქვენ უნდა გააკეთოთ, Ruby, მოითხოვს ბიბლიოთეკები. და ჩვენი მიზნებისთვის, ჩვენ უნდა გამოყენებით ბიბლიოთეკა OpenURI აგრეთვე Nokogiri. და მერე რა გააკეთოს და ეს კიდე გაძლევთ სინტაქსი ამას არის თუ არა გახსნა URL ბევრი როგორც თქვენ ამას Curl მოთხოვნით, რომელიც დგას C URL. ასე, რომ თქვენ მიიღოს URL of ნახვა საკითხს. თქვენ ჩაწეროთ იგი ცვლადი. და მაშინ ძებნის მეშვეობით, რომელიც ცვლადი უნიკალური HTML tags გამოყენებით .css ბრძანება. და მაშინ შეიძლება დაბეჭდავს შინაარსის, სადაც გსურთ. თქვენ შეგიძლიათ დაიწყოს მონაცემთა ბაზაში. თქვენ შეგიძლიათ გამომავალი ფაილი, ან მაშინაც კი, უბრალოდ ამობეჭდოთ ეკრანზე. ასე რომ, ჩვენ გაჩვენებთ ძირითადი scraper. ასე რომ, აქ თქვენ შეგიძლიათ ნახოთ გვაქვს მოითხოვს nokogiri, მოითხოვს ღია-ური. თქვენი ძირითადი კომპლექტი up, მოდით ეძახით დოკუმენტი ან doc, უდრის Nokogiri :: HTML ღია, რაც არის ბრძანება ჩვენს მიერ OpenURI ბიბლიოთეკა. და ჩვენ უნდა ეძებს, იმ თქვენ ვინ შეიძლება მცხოვრები quad, ველოსიპედი, რომლებიც Boston ჩამოთვლილი შესახებ Boston Craigslist bike განყოფილებაში საიტზე. ასე რომ, თუ თქვენ ხართ უცხო ერთად Curl, მე მხოლოდ გაჩვენებთ რეალური სწრაფი რა Curl გააკეთებს. თუ მინდოდა ყველა URL საწყისი Craigslist საიტი, თუ მე აკრიფოთ curl, ეს მხოლოდ dumps ყველა URL საწყისი Craigslist კატავი საიტი გადატანა ჩემი ტერმინალში. ეს არ არის განსაკუთრებით სასარგებლო იმიტომ, რომ მე არ გსურთ ხელით გაიაროს და იპოვოს რამ ვეძებ. მაგრამ ასე რომ თქვენ შეუძლია ვხედავ, რომ მე რეალურად გამოყენების უფლება კოდი, თუ გადავხედავთ იმ URL for Craigslist in bikes-- რატომღაც ეს არ არის ნაპოვნი. თუ გადავხედავთ ამ გვერდზე და გადავხედავთ URL, ეს უნდა იყოს იდენტური Curl თხოვნით, რომ მე უბრალოდ გამოგვიგზავნეთ. და მართლაც, რომ ის, რაც უკვე შენახული doc ცვლადი. ასე რომ, როდესაც თქვენ დავუბრუნდეთ კოდი, ჩვენ შეიძლება მაშინ მოქმედებს ამ doc ცვლადი გამოყენებით .css. ასე ვთქვათ, მე მინდოდა, რომ ყველა იარლიყზე, რომლებიც span.txt, და ყველა ერთი tags ფარგლებში, რომ აქვს. და რატომ შეიძლება ჩვენ გვინდა ამისათვის, მე მესმის თქვენ ტირილი? თუ ჩვენ შეამოწმოს ელემენტის, ეს გაძლევთ ავარია როგორ URL სტრუქტურა. თუ მე გადახვევა ქვემოთ მეშვეობით აქ, თქვენ ხედავთ, რა თითოეული ეს სხვადასხვა ელემენტები წარმოადგენს. იქნებ მე გინდათ ამ კონკრეტულ ელემენტს. ამიტომ მე გამოყენებით Chrome დეველოპერი ინსტრუმენტები შეამოწმოს ელემენტს. მე ვხედავ ქვემოთ აქ, რომ ეს არის ტეგით ფარგლებში span tag ერთად კლასის txt. ასე რომ, ეს იღებს ჩვენი პირველი ოპერაცია, რომელიც არის doc.css span, რომელიც აქვს, რომ ვეძებ ფარგლებში ყველა ამ URL. და მაშინ .txt მოქმედებს ჰგავს CSS ასეა, როდესაც თქვენ მხოლოდ წერა CSS თქვენს HTML ფაილი მიერ სასურველი კლასი. ასე რომ, ამ კონკრეტულ ოპერატორი მიუთითოთ span tag ერთად კლასში txt. და მაშინ, თუ დავტოვო სივრცეში, ეს მერე შიგნით რომ ტეგით და შემდეგ მოვძებნოთ ტეგით ფარგლებში. ასე რომ, თუ მე უბრალოდ დააყენა ეს ტერმინალში, მე უნდა უნდა ნახოს არსებითად ყველაფერი რომ არის შიგნით ამ span კლასის txt. ამიტომ, ჩვენ მივცემ, რომ წავიდეს. ლალი craigslist-scraper. და მართლაც, რომ გვაძლევს ყველა ამ tags სხვადასხვა განცხადების, რომ არიან Craigslist გვერდზე. ასე რომ, თუ ჩვენ დავუბრუნდებით, ჩვენ შევძლებთ ამ რაღაც ცოტა უფრო სასარგებლოა. შესაძლოა, ჩვენ გვინდა მხოლოდ ბმულებს. იმის გამო, რომ ამ tag, მე ასევე აქვს ჰიპერბმულის გზას რომ ამ გვერდზე მიდის. ასე რომ, თუ გადავხედავთ ამ კოდი აქ, რა მე ამის ნაცვლად .css, შემიძლია წასვლა at_css. და ეს იქნება უბრალოდ პირველი ელემენტის ყველა იმ რამ. ასე რომ, თუ მე უნდა გავაკეთოთ, რომ წელს კოდი უბრალოდ ადრე აჩვენა, დაბრუნების ნაცვლად ყველა , ეს უბრალოდ დაბრუნებას პირველი ერთი იმ. ასე რომ, თუ როგორ at_css ოპერატორი მუშაობს. ასე რომ ჩვენ გვინდა შესანახად გზაზე ყველა პირველი ტეგით. და რადგან მოგვცემს a-- ასე რომ, ჩვენ ჯერ კიდევ აპირებს გამოიყენოს .css. იმის გამო, რომ ამ აპირებს ჩვენს უკან მთელი მასივი tags, ჩვენ ვაპირებთ, რომ ხელმისაწვდომობის პირველ ელემენტს. ასე რომ, ეს არის კიდევ ერთი გზა, რომ თქვენ შედიხართ რომელიმე კონკრეტული ელემენტის თუ აქვს მასივი ელემენტები რომ დაბრუნდა, იმიტომ, რომ თქვენ შეიძლება მკურნალობა, რომ არაფერი .css ბრუნდება მასივი, არსებითად. და მაშინ ჩვენ ვაპირებთ, რათა შეამოწმონ ჰიპერტექსტის მითითება ატრიბუტი ამ. ასე რომ, თუ თქვენ შეხედეთ, თუ თქვენ ჩანდა ძალიან ახლოს აქ, თუ უბრალოდ არსებითად შევხედოთ URL ბარი, ეს არის გზა, რომელიც თქვენ აპირებს უნდა scraping. ასე რომ, თუ ჩვენ მხოლოდ აწარმოებს ეს კიდევ ერთხელ, და დარწმუნდით ჩვენ გადაარჩინა იგი. თქვენ შეგიძლიათ შეამოწმოთ სახლში. ეს რეალურად შეესაბამება ამ ბმულზე. რატომ შეიძლება ჩვენ გვინდა, რომ გამოიყენოს ეს? თუ გსურთ ძლივს გვერდზე და მას აქვს გვერდი ბმულები მოსწონს Craigslist ასეა, თქვენ დაგვჭირდება წასვლა მაშინ ყოველი იმ კავშირების და მაშინ ძლივს შინაარსი, რომ, რომელიც არის ზუსტად ის, რასაც ჩვენ ვაპირებთ გავაკეთოთ. ასე რომ, კიდევ გაქვთ გზა, როგორც ცვლადი, მე აღარ მართლაც აინტერესებს ბეჭდვის ის. მე უბრალოდ უნდა ჩაწეროთ იგი როგორც ცვლადი. და მაშინ მე შეუძლიათ სხვა გვერდი ანალოგიურად შევდივარ doc, პირველ რიგში. გარდა URL, ჩვენ ვაპირებთ უნდა გამოიყენოს სიმებიანი ინტერპოლაცია როგორიც მე აღწერილია Ruby ადრე დამატება გეზი ბოლომდე root. ასე რომ, თუ რას აპირებს არის ეს ხდება იმისათვის, რომ გზაზე რომ მე scraped ადრე და მერე, რომ ახალი ნივთი, რაც გაგიხარდებათ მოვუწოდებთ მას first_listing, მაგალითად. მაგრამ მე ვაპირებ დატოვოს ეს ნივთი არის, იმიტომ, რომ არის ის, რაც მე გამოყენებით აქ. ასე ვთქვათ, მე მინდოდა აღწერა პირველი განთავსებას Craigslist. ასე რომ, მე ქვევით აქ. მე დააწკაპუნეთ შეამოწმოს Element ერთხელ, რადგან ეს არის აღწერა. მე ქვევით აქ და ვნახოთ თუ ვიპოვი, თუ როგორ შეიძლება, შეძლებთ მოძებნოთ ამ უნიკალური აქვს. და ამ შემთხვევაში, მას აქვს პირადობის მოწმობა, რომელსაც მივყავართ ჩვენი მომავალი გზა ეძებს tags, რომელიც ერთად hashtag. ასე რომ, კლასების, შეგიძლიათ გამოიყენოთ dot ოპერატორი. ასე რომ, .txt არის განსაზღვრული კლასის txt, იმის გამო, რომ hash განსაზღვრავს ID. ასე რომ, ამ შემთხვევაში, აქვს არის სექცია, და ID არის postingbody. ასე რომ, ეს მიდის და აღმოაჩენს , პირველი იმიტომ, რომ ჩვენ გამოყენებით at_css-- ეს მიდის და აღმოაჩენს პირველი ელემენტი, რომელიც მოდის ერთად tag მონაკვეთზე და პირადობის postingbody. და შემდეგ შეგიძლიათ ტექსტში ელემენტი რომ პუნქტის დაბრუნდა ტექსტის. და მაშინ ჩვენ შეგვიძლია შესანახად რომ აღწერილობა. ასე რომ, ახლა, რომ ჩვენ გვაქვს ცვლადი აღწერა, ჩვენ შეიძლება ამის გაკეთება, ვთქვათ, ფაილის I / O. ასე რომ, ფაილის I / O Ruby ძალიან ჰგავს ფაილის I / O დო, სადაც ჩვენ გახსნა ფაილი. ჩვენ შეიძლება დაწეროს მას. და მაშინ ჩვენ დახუროს, რომ ფაილი. ასე რომ, აქ, ჩვენ უბრალოდ დასახელებისგან შეიტანოს, ზოგიერთი თვითნებური ცვლადი. ჩვენ ასევე შეეძლოთ უბრალოდ დააყენა აქ. ჩვენ გვყავს ცვლადი, რომ ჩვენ შენახვის ღია ფაილი, როგორც File.open. და ჩვენ წერილობით ამ ფაილს, ასე რომ, ჩვენ გახსნა იგი w ოპერატორი. და მაშინ ჩვენ დააყენა სიმებიანი შევიდა წარუდგინოს .აყენებს ოპერატორი. და მაშინ ჩვენ დააყენოს ცვლადი, რომ ჩვენ გსურთ დაწეროთ ფაილი ფარგლებში. და შემდეგ ჩვენ უბრალოდ დახურეთ ფაილი. ასე რომ, თუ ჩვენ წავიდეთ წინ და აწარმოებს ამ, ეს უნდა აწარმოოს დოკუმენტი ერთად description.txt რომელიც აქვს ეს აღწერა ფარგლებში. ასე რომ, თუ მე აწარმოებს it-- არსებობს. ის წარმოებული ტექსტური ფაილი, იმედია, იგივე. ასე რომ, შესაძლოა, ახალი გამოქვეყნება რომ ამუშავება, ხოლო მე უკვე საუბარი. და მართლაც, ეს ჰგავს ყოფილა. ასე რომ, თუ ჩვენ ამ კლასიკური bike, 1962 1966 წელს, რომელიც, როგორც ჩანს, ემთხვევა. და იქ წასვლა. ასე რომ, ყველაზე ძირითადი ფუნქციონალური ჩაშლის. ჩვენ შეგვეძლო ნაცვლად უბრალოდ წერა ამ ფაილს, ჩვენ შეგიძლიათ დაამატოთ რამ მასივი. ასე რომ, თუ მე ვაცხადებ, სამი მასივები, სათაური, ფასი, და აღწერა. და ჩვენ ფუნქციონირებს doc ნივთი არის. ჩვენ შეგვიძლია გავლა და მოვძებნოთ ყველა span.txt. და მახსოვს, ეს ბრუნდება მასივი ყველა საკითხი, რომ იგი აღმოაჩენს. და მაშინ Ruby, შეგიძლიათ გამოიყენოთ თითოეული iterate მეშვეობით ყველა ნივთი მასივი. და მაშინ თითოეული პუნქტის, მე უბრალოდ აპირებს ეძახით ლინკები, იმიტომ, რომ ის არსებითად, რა არის. ასე რომ, თუ ყოველი link.css dot a.hdrlnk, ეს არის რეალურად აპირებს ბმული და მოძიებაში ფარგლებში ბმული სხვა ელემენტი და შესაბამისი კლასის. ასე რომ, თუ ჩვენ გვახსოვს, რა ეს იყო, span.txt, თქვენ შეგიძლიათ see- ნება მომეცით დაბრუნდეს რეალური quick-- ფარგლებში span.txt ჩვენ გვაქვს ბევრი სხვა კლასებს. ასე რომ შიგნით span.txt, ჩვენ ვეძებთ ამისთვის tag რომელზეც კლასის hdrlnk. ნება მომეცით ნახავთ, რომ თქვენ ბიჭები რეალური სწრაფი. ასე რომ თქვენ ხედავთ აქ, ეს არის ტეგით რომ ფარგლებში span კლასის txt რომ აქვს კლასი hdrlnk. და ეს მართლაც, რა ჩვენ ვცდილობთ, რომ მიიღოს. ასე რომ, ჩვენ ახლა ცდილობს შესანახად ყველა იმ კავშირების შიგნით სათაური. და მაშინ ჩვენ ვაპირებთ ბეჭდვა თითოეული იმ კავშირების. არა, ბოდიში. ჩვენ ვაპირებთ, რომ ამობეჭდოთ ფასი თითოეული იმ. მოდით აწარმოებს ამ მართლაც სწრაფი და ნახოთ, თუ რას აკეთებს. ასე რომ, ეს უბრალოდ ძირითადად წავიდა მეშვეობით თითოეული ბმულები თავის მხრივ, ხელმისაწვდომი tag კითხვა, და შემდეგ გაყვანილია ფასი. ეს მოხდა, რომ რადგან მას შემდეგ, თქვენ გაქვთ ყველაფერი სათაური, ჩვენ უბრალოდ ინახება სათაური არსებობს. ჩვენ უბრალოდ ინახება ბმული ფარგლებში მასივი სათაური. და ამ loop ოპერაცია, სადაც ნაცვლად აპირებს a.hdrlnk, ჩვენ ვეძებთ span.price. ასე რომ, თუ მე შემიძლია უბრალოდ ძალიან სწრაფად იპოვოს ფასი, თუ შეამოწმოს ელემენტს, თქვენ ნახავთ, რომ ეს არის span კლასი ფასი. და რომ არსებითად, ჩვენ ვიღებთ ფასი არსებობს. ასე რომ, ეს მართლაც ძირითად შემთხვევაში ჩაშლის. აი, როგორ უნდა მიიღოს ყველა ელემენტები გვერდი რომ, ვთქვათ, თქვენ უკვე იცით URL of. ასე რომ, თუ ჩვენ გვინდა, რომ ცოტა უფრო სიღრმისეული, ჩვენ შეგვიძლია ძლივს გვერდები გვერდებზე. და ეს, მაგალითად, მე იქნება outputting CSV ფაილი. ასე რომ, მე მოითხოვს csv აქ იმიტომ, Ruby არ, შიგნით თავად, ფუნქციონალური უბრალოდ დაბეჭდავს CSV ფაილი. ასე რომ, სუპერ მარტივია. ნება მომეცით, უბრალოდ წასვლა მომდევნო. ჩვენ დაფარული ფაილი I / O. ასე რომ, ეს მსგავსია, როგორ არის C. და სანამ ჩვენ გადაადგილება Kimono, მე უბრალოდ გაჩვენებთ მართლაც სწრაფი, თუ როგორ ძლივს საიტები ფარგლებში სანახაობები. ასე რომ, ჩვენ უკვე ვისწავლეთ განაცხადოს კოლექტორები Ruby. ასე რომ, მე უბრალოდ გამოცხადების რამოდენიმე თვითნებური კოლექტორები რომ მე იქნება შენახვის მონაცემები. doc ფუნქციონირებს იგივე გზა როგორც ეს წინა ფაილი. ჩვენ ვაპირებთ, in, გამოვლენა თითოეული span.txt ს. ჩვენ უკვე ვიცით, რომ. ეს არის კონტეინერი, რომლის ფარგლებშიც თითოეული ლინკები ყველა მონაცემები, რომ ჩვენ გვინდა. ასე რომ, აქ, რასაც ჩვენ ვაკეთებთ თითოეული რგოლი span class txt, ჩვენ ვაპირებთ ამ და ჩვენ მოძიებაში tag, მოძიებაში პირველ ელემენტს რომ. გახსოვდეთ, .css ბრუნდება მასივი, ასე რომ თქვენ არ შეგიძლიათ უბრალოდ თქვათ, როგორც არის. ჩვენ ვაპირებთ, რომ პირველად ელემენტს. მაშინაც კი, თუ ეს მასივი ერთი ნივთი, თქვენ უნდა გამოიყენოთ ეს სინტაქსი, და შემდეგ გაიყვანოს href ატრიბუტის. ასე რომ, ჩვენ ეს გავაკეთეთ ადრე. ასე რომ, ეს უნდა გამოიყურებოდეს ნაცნობი. ასე რომ, ახლა ჩვენ გვაქვს მასივი მოუწოდა ბილიკები ყველა ჩვენი ბმულები ჩვენ ვაპირებთ, რომ გსურთ გამოიყენოთ. ასე რომ, თუ ჩვენ გვაქვს ეს მასივი ყველა ბილიკები, რომ ჩვენ გვინდა გამოვიყენოთ, ჩვენ შეგვიძლია შემდეგ შექმნა პუნქტის თითოეული იმ გვერდებზე, როდესაც ჩვენ გახსნა, რომ გვერდზე. ასე რომ, როგორც ჩვენ ასევე დაინახა სინტაქსი ადრე, სადაც აკეთებს სიმებიანი ინტერპოლაცია გეზი აქ, ასე რომ სინტაქსი არის მხოლოდ გზაზე. და მე ვერ დავასახელებ ამ ცვლადი ნებისმიერი თვითნებური სახელი. ეს არის მნიშვნელოვანი. ეს არის მასივი, რომ თქვენ უნდა წვდომის თითოეულ ელემენტს. მაგრამ როდესაც თქვენ ვთქვა გზა ბილიკები, ეს იმას ნიშნავს, თითოეული ელემენტი ბილიკები, ეძახით გზას, და გამოვიყენოთ რომ. ეს არის არსებითად, როდესაც თქვენ გავაკეთოთ ამისთვის მარყუჟის და გამოიყენოს int i. ასე, რომ თქვენ შეიძლება მკურნალობა გზაზე, როგორც ცვლადი რომ ზრდა. და მაშინ თითოეული იმ, წასვლას თითოეული იმ კავშირები. იმიტომ, რომ ჩვენ შენახვის იგი ნივთი გვერდი, ასე რომ, ჩვენ შექმნა ახალი გვერდი, ყოველ ჯერზე ჩვენ ვებგვერდზე. და შემდეგ შიგნით რომ ახალი გვერდი, იპოვოს span.postingtitletext, span.price, და შემდეგ სექცია # postingbody. ჩვენ უკვე დაფარული განყოფილებიანი # postingbody როდესაც ჩვენ შევხედე აღწერილობა. ასე რომ, ჩვენ შეგვიძლია წავიდეთ ვხედავთ Craigslist ჩანაწერი, თუ თქვენ მხოლოდ ეძებს სათაური, თქვენ ხედავთ, რომ აქ, span postingtitletext. ამიტომაც არის, რომ ეს არ არსებობს. და მაშინ ფასი, შეგიძლიათ წვდომის იგი span class ფასი. ასე რომ, ჩვენ, ალბათ, შეიძლება გსურთ შეინახოთ URL. ასე რომ, ჩვენ უბრალოდ გაუშვით ეს ერთხელ, ჩაწეროთ იგი მასივი, იმიტომ, რომ თუ თქვენ ვეძებთ Craigslist, თქვენ ალბათ აპირებს მინდა გზა, თუ ხედავთ რაიმე, რომ ინტერესების თქვენ დაბრუნდეს, რომ საიტზე. ასე რომ, თქვენ უბრალოდ უნდა ჩაწეროთ URL, ცნობას გულისთვის. ეს არის მხოლოდ არსებითად სხვა სინტაქსი ამისთვის loop. მე ვერ უბრალოდ არ paths.each ნაცვლად იმ გზას ბილიკები ინდექსი. ეს სინტაქსი Ruby for-- გზა არის ის, რაც ჩვენ გავაკეთეთ აქ, გამოცხადების ცვლადი თითოეული პუნქტის. და ინდექსი იქცევა ი დო მარყუჟების. ასე, რომ თქვენ შეგიძლიათ შეინახოთ სიმღერა რა მაჩვენებელი. ასე რომ, აქ არის მხოლოდ პატარა მოსახერხებელი რამ როცა თქვენ გაშვებული scraper. თუ თქვენ scraping ასობით გვერდების, დარწმუნდით, რომ ეს არ არის დაკიდებული, ეს იქნება მხოლოდ გამომავალი, მე წვდომის ამ გვერდზე, და მიღების დარწმუნებული ვარ, რომ ის ჯერ კიდევ გრძელდება. მაგრამ ჩვენი მიზნებისთვის, რადგან იქ ასი ნივთები, მე ვაპირებ თქვათ მხოლოდ სამი მათგანი ასე, რომ ჩვენ არ ამოიწურა დრო აქ. მაგრამ სანამ არ მივიღებთ, რომ, მე მხოლოდ აპირებს აჩვენებს, თუ მართლაც სწრაფი, მე იქნება outputting სათაური, ფასი, აღწერა და URL თითოეული ბმულები, რომ მე scraped. და შემდეგ ეს მხოლოდ სინტაქსი CSV ბიბლიოთეკა. თქვენ გახსნა CSV. ეს არის ის, რაც მე ვაპირებ მოვუწოდო მას. გახსენით ის ჩაწერის do. და მაშინ CSV იქნება ფაილი, რომელიც თქვენ შესაყვანი ყველაფერი. ეს არის მხოლოდ საღი აზრის გამშვები მე ვიცი, რომ ის გაშვებული. და ეს არის ჩემი საღი აზრის გამშვები ვიცი, რომ ეს დასრულდა. ასე რომ, მე აყენებს ტიტული ზედიზედ იმ CSV, ფასი, url, აღწერა, ყველა შევიდა რიგები CSV. ასე რომ, თუ ჩვენ წავიდეთ და პერსპექტივაში ეს, ახლა და მე უბრალოდ დარწმუნდით, რომ მე გადაარჩინა it-- ნაცვლად მხოლოდ outputting ის ტერმინალში, ჩვენ უნდა ჰქონდეს CSV ფაილი რომ წარმოებული. ასე რომ, აქ ჩვენ ვხედავთ CSV ფაილი, რომელიც უკვე მზადდება. ეს არის გამოშვება ზოგადი, რომ მე უბრალოდ გაიქცა. როგორც ხედავთ აქ, წვდომის გვერდი 0, 1, 2, 3. ეს არის სათაურები, ფასები, აღწერილობა. და თუ დავაკვირდებით ამ CSV ფაილი, რომელიც ჩვენ გამომუშავებული, ხედავთ მის outputted აქ. ეს არ არის Excel, ასე რომ არ არის ფორმატირებული რიგები და სვეტები. მაგრამ თქვენ წარმოიდგინეთ, რამდენად ეს შეიძლება იყოს ფორმატირებული. CSV დგას მძიმით გამოყოფილი მნიშვნელობები. ასე რომ, თქვენ წარმოიდგინეთ, ეს შეიძლება იყოს ზედიზედ. და თითოეული მძიმით რომ მიუთითებს, ცალკე სვეტში. უბრალოდ სიტყვა caution-- ზოგჯერ თქვენ ცვეთის რამ ბევრი მძიმეები. ასე რომ, თუ თქვენ outputting მას CSV ფაილი, ეს შეიძლება არ დაბეჭდავს გზა თქვენ ალბათ ფიქრობთ. ასე რომ, არსებითად ყველა არ არის, რომ ცვეთის ძირითადი HTML გვერდები Nokogiri. ასე რომ, ინტერნეტ ყოფნა ინოვაციური ამუშავება უფრო ავტომატური და GUI მობილური, თუმცა ნაკლებად ძლიერი მობილური ცვეთის სხვადასხვა საიტებზე. და ჩვენი მიზნებისთვის მე დემონსტრირებას Chrome გაფართოება მოუწოდა kimono. და ყველა თქვენ უნდა გააკეთოთ თქვენ ნავიგაცია გვერდზე რომ გსურთ ძლივს. ვაწვებით სფეროში ინტერესი. თქვენ დააკალიბროს სფეროებში, იმიტომ, რომ ეს ავტომატურად აღმოაჩინოს, თუ რას ფიქრობს გსურთ იყოს გაუქმების, და მაშინ უბრალოდ შექმნათ API. ასე რომ, თუ ჩვენ უნდა ვაჩვენოთ, ეს Craigslist, ის რეალურად არ იმუშავებს. და ეს არის ის, რაც მე ბრუნდება ამბობენ ამის შესახებ არ მიმდინარეობს, როგორც ძლიერი. მას აქვს პრობლემები ქმნის API. მაგრამ როგორც დემონსტრირება ის, რაც ყველაფერს გააკეთებს, თუ თქვენ დააყენეთ Chrome გაფართოება, ყველა აკეთებთ თქვენ დაწკაპეთ იგი. ეს Kimonofies გვერდზე, და მაშინ დააკლიკეთ რამ გსურთ სკრიპტი. ასე რომ, თუ მე დააკლიკეთ ის, რომ იგი ხაზს უსვამს რას ფიქრობს მინდა იყოს გაუქმების off რომ გვერდზე. ასე რომ, შესაძლოა მოვუწოდებ ამ განცხადების. ეს არის, თუ რამდენი რამ მე შევარჩიეთ. და მე შემიძლია მხოლოდ დაადასტუროს ან უარყოს ზოგიერთი სხვა შესთავაზა განცხადების მიიღოს ეს რჩეულებში რა იქნება scraped. ასე რომ, ახლა ჩვენ ვხედავთ, რომ იქ ასი ნივთები შერჩეული. თუ მინდა, რომ სხვა სფეროში, რომელიც მე ასევე ძლივს, რომელიც დაკავშირებულია ამ, ვთქვათ მე მინდა ძლივს ფასი ასევე, მაშინ შემიძლია იგივე. ასე რომ, აქ დემონსტრირება, თუ როგორ ეს გაცილებით ნაკლებია ძლიერი, რადგან ახლა ეს კრეფა up ქალაქის ნაცვლად მხოლოდ ფასი, რომ მინდა. და ახლა ის აიყვანეს 200 რამ. თქვენ შეგიძლიათ უკან დაბრუნება და წაშლა. შეგიძლიათ ცადოთ. მაგრამ არსებობს გარანტიები. ეს არის, როგორ მუშაობს ეს ზოგჯერ. როგორც ხედავთ, აქ, ახლა იგი აცხადებს, რომ 96-მდე აქ. ის აიყვანეს ყველაზე ბმულები რომ გსურთ ძლივს, მაგრამ არა აუცილებლად ყველა მათგანი. კიდევ ერთი სასარგებლო ინსტრუმენტი Kimono იმისა, თქვენ შეგიძლიათ წასვლა დამატებითი თვისებები აქ, გადადით Advanced, და ის, თუ ავარია უნიკალური გზა, რათა შეამოწმონ HTML tags, რომ გსურთ ძლივს. ასე რომ, განცხადების, თუ გადავხედავთ, აქ, თუ თქვენ შედიხართ div p span საქმე ეხება, თქვენ შეგიძლიათ რეალურად უბრალოდ გამოიყენოთ ამ თქვენს Nokogiri კოდი, სადაც ადრე გვქონდა span.txt წვდომის თითოეული განცხადების. თუ მინდა ტექსტში ფარგლებში განცხადების, შემეძლო შეყვანის div სივრცეში p სივრცეში span სივრცეში span სივრცეში, და ეს იქნებოდა მისაღწევად იგივე ეფექტი. და იმ თქვენ, რომლებიც დაინტერესებულნი არიან ამ რეგულარული გამოთქმების გამოყენებით, ეს ხდება, რომ ასევე გაძლევთ რეგულარული გამოხატვის ერთგვარი სიმებიანი შეყვანის რათა იპოვოს ნივთები თქვენ ცდილობს იპოვოს. ასე რომ კიდევ ერთი მაგარი თვისება საქართველოს Kimono სადაც შეგიძლიათ paginate, რომელიც არ არის მხოლოდ შემიძლია ძლივს შედეგების გვერდი, შემიძლია დააჭირეთ ამ პატარა ღილაკს აქ, Pagination, განსაზღვროს ღილაკს რომ მიიღოს ჩემთვის მომდევნო გვერდზე და მაშინ უბრალოდ ვიცი, რომ მას შეუძლია iterate შემდეგი გვერდი, და მაშინ ძლივს ყველა the-- მანამ, როგორც ეს არის იგივე ფორმატის course-- ზოგადი ყველა იმ კავშირების, ასევე. ასე რომ, რადგან კიმონო არ სურს მუშაობა Craigslist, რაც ჩვენ გავაკეთეთ არის მე Kimonofied ჰარვარდის Crimson. მე გამოყვანილია გარკვეული სახის დაბრუნება გამორჩეული სტატიები, ადასტურებენ აქ. ამბობენ, რომ ეს ყველაფერი. მე შედგენილი ამ API თქვენ ვადამდე. მაგრამ სხვაგვარად, თუ რას გააკეთებდა არის თქვენ უბრალოდ დააჭირეთ შესრულებულია. შეიყვანეთ თქვენი API დეტალები. უცნობია, ან ავტომატური ან მექანიკური სეირნობისას. ასე რომ თქვენ ვერ განაახლოთ თქვენი მონაცემები ყოველ 15 წუთში, ყოველკვირეული, ყოველდღიური, რაც თქვენ გინდათ. სახელი თქვენი API. შექმნა API. თქვენს სასარგებლოდ, მე შექმნა Crimson წინა გვერდი API უკვე. ასე, რომ თქვენ უბრალოდ შექმნათ ანგარიშზე Kimono, და ეს შესანახად ყველა თქვენი APIs თქვენთვის. ასე რომ, არსებითად, რომ ყველა თქვენი ცალკე სხვადასხვა scrapes. ასე რომ, თუ გადავხედავთ აქ, ეს არის მოსაზრებები ბმულები, რომ მე შეგროვებული. ეს არის რჩეული კავშირები, რომ მე შეგროვებული. და ეს ყველაზე წაკითხული კავშირები, რომ მე შეგროვებული ამ უახლესი API ზოგადი. ასე რომ, თუ ხედავთ აქ, ეს იქნება გამორჩეული, ეს იქნება მოსაზრებები, რომელიც ამ მაგალითად, მე კომბინირებული მათ ყველა ერთ კოლექცია. მაგრამ თუ უბრალოდ ითამაშოს გარშემო ცოტა, თქვენ შეგიძლიათ გაყოფილი up და ყოფს მას, თუმცა ის გსურთ, ხანგრძლივი როგორც გაფორმებით ოდნავ განსხვავებული. უბრალოდ უნდა ითამაშოს გარშემო ამ, crawl შეიქმნა, ერთი ნაკლი არის, თქვენ შეგიძლიათ მხოლოდ სეირნობისას up 25 გვერდები დროს. ეს არის ერთ-ერთი შეზღუდვის ფაქტორი. მაგრამ აქ, თუ თქვენ მას სახელმძღვანელო crawl, ამ არის, თუ როგორ შემიძლია გითხრათ, რომ განაახლოთ თქვენი მონაცემები. აქ თქვენ შეგიძლიათ ნახოთ თქვენი crawl ისტორია ყველაფერი, რაც თქვენ crawled. და შენ შეიძლება დაბრუნდეს, დარეგისტრირდით, ითამაშოს გარშემო ყველა სხვადასხვა გზით რომ თქვენ შეგიძლიათ შეცვალოთ და გამოიყენოთ თქვენი მონაცემები. Kimono შეიძლება შეიქმნას ძლივს კავშირების ფარგლებში კავშირები. და თქვენ ამის გაკეთება პირველი ცვეთის ბმულების სია, და მაშინ იყენებს, რომ API როგორც ხტომა off წერტილი სხვა API რომ თქვენ შექმნათ სცენარი. თუმცა, ეს უფრო რთული, ვიდრე რასაც ჩვენ ვაპირებთ, რომ მიიღოთ დღეს. ასე რომ, kimono. ჩვენ ვსაუბრობთ დადებითი და cons of Nokogiri და kimono. Nokogiri, ეს მართლაც სწრაფი. ეს არის მარტივი ტესტი. შეგიძლიათ უბრალოდ აყენებს არაფერი კონსოლი, მარტივი კონფიგურაცია. თქვენ შეგიძლიათ გადაწყვიტოს ზუსტად რა გსურთ ძლივს და მაღაზია. არ არის გვერდი ფარგლებს გარეთ. მე რეალურად გამოიყენება მას ძლივს მოსწონს 1800 სამხრეთ აფრიკის სკოლა საიტები ელ სტაჟირებას, რომ მე. ასე რომ, შესაძლებელია, თუმცა საუკეთესო პრაქტიკის იქნება გაყოფილი სკრიპტი. იმიტომ, რომ თუ ეს ვერ მოხერხდა, მაშინ თქვენ არ მიიღოთ არაფერი. მაგრამ თუ ასი, იქნებ 200 გვერდები დროს, მაშინ თქვენ გაქვთ გარკვეული შანსი მინიმუმ მიღების მცირედი, განსაკუთრებით თუ თქვენ გაქვთ ცუდი ინტერნეტით. სამწუხაროდ, მას შეუძლია მხოლოდ ძლივს HTML. ასე რომ, თუ თქვენ გაქვთ დინამიურად დატვირთული pages-- და მე გაჩვენებთ მაგალითად ისევე როგორც Kayak ამ მეორე Nokogiri სამწუხაროდ ვერ ძლივს რომ. მაგრამ Kimono ასევე მარტივი. როგორც თქვენ ნახეთ, ეს არსებითად წერტილი და დაჭერით. ეს შეიძლება ძლივს JavaScript. სამწუხაროდ, არ მაქსიმუმ რამდენი გვერდებზე შეგიძლიათ ძლივს. ზოგჯერ ეს პატარა რთული კონფიგურაცია. იგი იღებს დაბნეული. მაგრამ ეს ნამდვილად რაღაც განიხილოს თუ თქვენ არ ცდილობს სუპერ ძლიერი maintainable scrape. თუ თქვენ უბრალოდ გვინდა ყველაფერი off გვერდზე სწრაფად, მაშინ Kimono არის ნამდვილად კარგი ინსტრუმენტი გამოიყენოს. და როგორც ვთქვი ადრე, იქ მოწინავე თვისება Kimono რომელიც აჩვენებს, თუ როგორ უნდა წვდომის უნიკალური HTML ელემენტს, რომელიც სუპერ სასარგებლო კი თუ მუშაობენ Nokogiri. ასე რომ, თუ ჩვენ წასვლა Kayak საიტი, მაგალითად, ხედავთ is-- ან იქნებ ვერ ვხედავ. მაგრამ თუ მე გაჩვენებთ URL for Kayak, ეს რეალურად არის მხოლოდ წყაროს URL. ეს არის URL ადრე მიმდინარეობს შეცვლილია რასაც JavaScript სკრიპტები რომ ისინი არ ხდება. და ის აპირებს გამოიყურებოდეს სხვადასხვა შემოწმების ელემენტს. ასე რომ, თუ თქვენ გავლა და თქვენ ემთხვევა up შეამოწმოს Element კოდი კოდის, ეს რეალურად იქნება განსხვავებული. და ეს არის, ძირითადად, რატომ Nokogiri ვერ ძლივს დინამიურად დატვირთული საიტები. იმის გამო, რომ Nokogiri არის ცვეთის წყარო URL, ხოლო Kimono ფაქტიურად ცვეთის, რაც თქვენ არსებითად ხედავს აირჩიეთ Element. ასე რომ, თუ მე გავლა და მე ცდილობენ და Kimonofy Kayak, მე შეიძლება რეალურად გაიაროს და აირჩიეთ ფასი. ეს ცოტა რთული, და ამ შემთხვევაში, ეს რეალურად ხედავს ამ ფასად განსხვავებული ამ. ასე რომ, მაშინ შეგიძლიათ configure-- ან თუ ეს არ იყო დინამიურად დატვირთული, შეგიძლიათ დააკონფიგურიროთ Nokogiri მისაღებად ყველა ამ. იმის გამო, რომ გაფორმებით ოდნავ განსხვავებული ამ ჩამონათვალი რადგან ის შედარებით დანარჩენი მათ, და თქვენ შეგიძლიათ ნახოთ აქ ეს რეალურად წავიდა და შერჩეულ ყველა ფრენის ფასები. იქნებ მე უნდა აირჩიოთ დრო ფრენის ისევე. და შემიძლია გავლა და ერთგვარი კონფიგურაციის რომ. მე არ მინდა, რომ. მე უბრალოდ მინდა შემდეგი ფრენის დროს. და შემდეგ რამდენიმე ამ გადის, ის იღებს სურათს. ასე რომ, Kimono საკმაოდ ჭკვიანი. ეს უბრალოდ არ არის საკმაოდ ძლიერი. არსებობს რამდენიმე სხვა ალტერნატივა, რომ შეგიძლიათ გამოიყენოთ. და მე გაჩვენებთ მათ აქ. თუ თქვენ უფრო კომფორტული Python ნაცვლად Ruby, შესაძლოა, არ არის ბიბლიოთეკაში მოუწოდა Beautiful წვნიანი. თქვენ შეგიძლიათ გამოიყენოთ, რომ. ეს ძალიან ჰგავს Nokogiri. მას აქვს რამდენიმე სხვა ფუნქციები. შეგიძლია HTML tag და მაშინ გადატანა ან გადაადგილება sideways. არსებობს PyQt. ეს შეიძლება რეალურად ძლივს დინამიური საიტები, იმიტომ, რომ ეს არის ერთგვარი არის WebKit რომ პრეტენზია უნდა იყოს ბრაუზერის გარეშე არ არსებობს, ფაქტობრივად, როგორც ბრაუზერის. ასე რომ, დაველოდოთ ყველა JavaScript რათა ჩატვირთოს პირველი და შემდეგ წავიდეს და ცდილობენ და ძლივს საიტზე. თუ თქვენ გსურთ გამყარებაში Ruby, თქვენ შეიძლება ერთი დონის მდე Nokogiri. თქვენ შეგიძლიათ გამოიყენოთ capybara ერთად Poltergeist გადატანა. და ეს რეალურად არსებითად გააკეთოს იგივე როგორც PyQt, რომელიც ეს არის WebKit. მას ელოდება JavaScript ჩატვირთვა პირველი. თუ გიკავია გარშემო საკმარისი, თქვენ შეგიძლიათ კიდევ მას დააჭირეთ რამ. ასე რომ, თუ არის ბმული, რომელიც არ არის კლასიკური href სადაც გზა არის ადვილად ხელმისაწვდომი, და ეს რამდენიმე JavaScript, რაც გამოავლენს დაჭერით, თქვენ შეგიძლიათ რეალურად გაგვაჩნია. უფრო პოპულარული ბიბლიოთეკა სიმულაცია შესახებ არის, JavaScript, რომელიც PhantomJS. ეს, შეიძლება ითქვას, ძლივს დინამიური საიტები, რადგან ეს არის, ძირითადად, pretending to be Chrome გარეშე ინტერფეისი. და მაშინ, რა თქმა უნდა, ყველაზე ძლიერი, მაგრამ ნელი ვარიანტი, არის სელენი ბრაუზერის ავტომატიზაცია. და სამწუხაროდ, თქვენ არ იქნება შეუძლია ამის გაკეთება თქვენი CS50 IDE. იმის გამო, რომ, ძირითადად, ის, რაც არ არის ეს ჩექმები თქვენი Chrome, Firefox, რასაც ბრაუზერის რომ გსურთ გამოიყენოთ, და ტრეკები იქნებ თქვენი მაუსის მოძრაობა, რასაც თქვენ აკრიფოთ, და ეს მხოლოდ ერთგვარი automates ამ პროცესში. ასე რომ, ეს იყო შემუშავებული, როგორც ერთგვარი ნახვა ავტომატიზაციის ტესტირება ინსტრუმენტი. მაგრამ ბევრი ადამიანი გამოიყენებს სელენი ძლივს ვებ რომ ისინი სხვაგვარად აქვს ბევრი სირთულის scraping ერთად ზოგიერთი სხვა, უფრო სწრაფად ინსტრუმენტები. ასე რომ, ყველა მაქვს ვებ scraping. გაერთე. აუდიტორია: კითხვა. ROBERT KRABEK: დიახ. აუდიტორია: არის მექანიზმი, რომელიც hash ნახვა, ასე რომ თქვენ შეიძლება ძირითადად გაიაროს ეს მოგვიანებით. ROBERT KRABEK: ჰო. ამიტომ, ჩვენ დააყენა, ჩვენი მაგალითად, ორივე მათგანი, ჩვენ დააყენა მთელი საიტი შევიდა doc. ასე რომ, თქვენ შეიძლება რეალურად უბრალოდ მიიღოს ცვლადი doc და წერს, რომ ეს ფაილი. ასე რომ, თუ მინდოდა, მე ვერ დაწერა ის, როგორც HTML ფაილი, და შემდეგ ნაცვლად გამოყენებით OpenURI და Curl მოთხოვნით, მაშინ მე ვერ უბრალოდ გახსენით doc HTML და შემდეგ ვეძებოთ, რომ. აუდიტორია: მაგრამ შეგიძლიათ შეინარჩუნოს ერთგვარი ონლაინ გამოცდილება ხოლო თქვენ ფორუმზე. მაგალითად. როდესაც თქვენ საფრენი რამდენიმე საათის განმავლობაში, მინდა ძირითადად არქივი მთელი ვებგვერდზე. [INAUDIBLE] ROBERT KRABEK: ჰო,, ზუსტად ასე რომ, ფაქტიურად, თუ რას აკეთებს არის ის აღების ყველაფერი რომ იქნება ამ URL. ასე რომ, თუ ჩვენ გაიქცა curl, ეს აღების ყველა ამ HTML, და ის შენახვის შიგნით ცვლადი doc. ასე რომ, შეგიძლიათ გააკეთოთ რაც თქვენ გსურთ, რომ doc. თქვენ შეგიძლიათ გამომავალი, რომ ეს ფაილი. აუდიტორია: მაგრამ ეს არ უკავშირდება. ეს არ არის დინამიური. ეს არ არის რეკურსიული, არა? ხედავთ რას ვგულისხმობ? ვცდილობ ძირითადად ერთგვარი hash მთელი ნახვა ჩემს მყარ დისკზე ასე რომ მე ვერ ძირითადად ამის გაკეთება რამდენიმე საათის განმავლობაში ინტერნეტის გარეშე. ROBERT KRABEK: მარჯვენა. ასე რომ, თუ მე had-- ასე რომ, სადაც არის ჩემი ფაილი I / O? ასე რომ, ეს არის ფაილი, I / O. ასე რომ ვთქვათ, ნაცვლად ამ, მოვუწოდებ ამ craigslist.html. მე გახსნა რომ. მე მინდა აყენებს doc შევიდა. მე დახურეთ ფაილი. და მაშინ მხოლოდ იმიტომ, რომ CS50 IDE არის ღრუბელი, რომ რაც არ უნდა. მე შეიძლება აქ. მე შეგიძლიათ ჩამოტვირთოთ ფაილი. და მაშინ ეს იქნება ჩემს მყარ დისკზე. ასე რომ, თქვენ შეგიძლიათ ამის გაკეთება, რომ გზა. ან თუ თქვენ სახლში, არ იყენებთ CS50 IDE, როგორც Sublime ან რამე, ეს კი ადვილია, იმიტომ, რომ ეს არის ყველა არსებული ადგილობრივად, არ არის მიბმული ინტერნეტში. აუდიტორია: მე ვერ ვხედავ. ეს არის ერთ-ერთი კონკრეტული პრობლემა. შეგიძლიათ ამის გაკეთება რეკურსიული ასე რომ თქვენ წასვლა რამდენიმე ფენა ღრმა ასეთი რამ? ROBERT KRABEK: მე შეგიძლიათ ჩამოტვირთოთ ფოლდერები ასევე, თუ ის, რაც თქვენ გეკითხებით. აუდიტორია: Yeah. ROBERT KRABEK ზემოთ.