Tuesday, September 1, 2015

თავი12 (12,8 - 12,10)



12.8 Reading binary files using urllib


ზოგჯერ გინდა იპოვნო არა ტექსტური ფაილი, როგორიცაა სურათი ან ვიდეო ფაილი. ასეთი ფაილების მონაცემების ამობეჭდვა არც ისე სასარგებლოა, მაგრამ urllib-ის გამოყენებით შეგიძლია ადვილად დააკოპირო ლინკი მყარ დისკზე.
ნიმუშია ლინკის გახსნა და read-ის გამოყენებით დოკუმენტის მთლიანი შიგთავსის გადმოწერა სტრინგ ცვლადში(img) და შემდეგ ინფორმაციის ლოკალურ ფაილში ჩაწერა:

img = urllib.urlopen('http://www.py4inf.com/cover.jpg').read()
fhand = open('cover.jpg', 'w')
fhand.write(img)
fhand.close()

ეს პროგრამა კითხულობს მთლიან მონაცემებს, ამ მონაცემებს ათავსებს ცვლადში „img“ და ინახავს შენი კომპიუტერის ძირითად მეხსიერებაში, შემდეგ ხსნის ფაილს „cover.jpg“ და წერს მონაცემს დისკზე. ეს  იმუშავებს იმ შემთხვევაში თუ ფაილი უფრო პატარაა ვიდრე კომპიუტერის მეხსიერება.

დიდი აუდიო ან ვიდეო ფაილი თუა, პროგრამა შეიძლება აიქრეშოს ან ძალიან შენელდეს, როცა კომპიუტერს მეხსიერება ამოეწურება. ამის თავიდან ასარიდებლად ჩვენ ვიღებთ(we retrieve) მონაცემებს ბლოკებში (ან ბუფერებში) და შემდეგ ვწერთ ყოველ ბლოკს შენს დისკზე სანამ მივიღებთ შემდეგ ბლოკს. ამ მეთოდით პროგრამას შეუძლია წაიკითხოს ნებისმიერი ზომის ფაილი შენი კომპიუტერის მთლიანი მეხსიერების გამოყენების გარეშე.

import urllib

img = urllib.urlopen('http://www.py4inf.com/cover.jpg')
fhand = open('cover.jpg', 'w')
size = 0
while True:
info = img.read(100000)
if len(info) < 1 : break
size = size + len(info)
fhand.write(info)

print size,'characters copied.'
fhand.close()

ამ მაგალითში წავიკითხეთ მხოლოდ 100,000 სიმბოლო ერთ ჯერზე და შემდეგ ეს სიმბოლოები ჩავწერეთ cover.jpg-ში სანამ მივიღებდით შემდეგ 100,000 სიმბოლოს ვებიდან.

პროგრამა მუშაობს შემდეგნაირად:

python curl2.py
568248 characters copied.


Unix ან Macintosh კომპიუტერი თუ გაქვს, ოპერაციულ სისტემაში ალბათ არის ჩაშენებული ბრძანება რომელიც ასრულებს შემდეგ ოპერაციას:

curl -O http://www.py4inf.com/cover.jpg

ბრძანება curl არის შემოკლებული copy URL და ამ ორ მაგალითს მოხერხებულად ჰქვია curl1.py და curl2.py გვერდზე www.py4inf.com/code , რადგან ისინი ახორციელებენ მსგავს ფუნქციებს. ასევე არის curl3.py საჩვენებელი პროგრამა, რომელიც ამ დავალებას აკეთებს უფრო ეფექტურად იმ შემთხვევაში თუ ნამდვილად გინდა ნიმუშის გამოყენება პროგრამაში რომელსაც წერ.

12.9 ლექსიკონი


BeautifulSoup: პითონის ბიბლიოთეკა HTML დოკუმენტის გასარჩევად და HTML დოკუმენტიდან მონაცემების ამოსაღებად, რომელიც HTML-ში ანაზღაურებს ნაკლოვანებების უმეტესობას, რასაც ბრაუზერი ჩვეულებრივ აიგნორებს.
port: ციფრი, რომელიც მიუთითებს რომელ აპლიკაციას ეკონტაქტები როცა სოკეტით უკავშირდები სერვერს. მაგალითად, ვებ ტრაფიკი(მოძრაობა) ჩვეულებრივ იყენებს მეოთხმოცე პორტს, როცა მეილი იყენებს ოცდამეხუთე  პორტს.
scrape: როცა პროგრამა სიმულირებს ვებ ბრაუზერს, იღებს ვებ გვერდს და იყურება შიგთავსში. ხშირად პროგრამები მიყვებიან ერთ გვერდზე არსებულ ლინკებს სხვა გვერდების საპოვნელად და ასე შეუძლიათ მთელი ქსელის მოცვა.
socket: ორ აპლიკაციას შორის ქსელის კავშირი, სადაც აპლიკაციებს შეუძლია გაგზავნოს და მიიღოს მონაცემები ორივე მიმართულებით.
spider: საძიებო სისტემის მიერ ვებ გვერდის პოვნა, შემდეგ ამ გვერდზე დალინკული სხვა გვერდების პოვნა და ა.შ. სანამ არ მოიცავს ყველა გვერდს, რომელიც ამ საძიებო ინდექსით არის გაკეთებული.


12.10 სავარჯიშოები


სავარჯიშო 12.1 შეცვალე სოკეტ პროგრამა socket1.py ისე, რომ მომხმარებელს მოსთხოვოს ლინკი, რომლითაც წაიკითხავს ვებ გვერდს. შეგიძლია გამოიყენო split(’/’) ლინკის ნაწილებად გასახლეჩად, რათა შეძლო ჰოსტის სახელის ამოღება სოკეტისთვის connect -ის გამოსაძახებლად. დაამატე შეცდომაზე შემოწმება try და except გამოყენებით იმ პრობლემებთან გასამკლავლებალად, რომელსაც მომხმარებელი გამოიწვევს არასწორად ფორმატირებულ ან არარსებულ ლინკს შეყვანისას.

სავარჯიშო 12.2 შეცვალე შენი სოკეტ პროგრამა ისე, რომ შეეძლოს ნაპოვნის სიმბოლოების რაოდენობის დათვლა და შეწყვიტოს ტექსტის ჩვენება მას შემდეგ, რაც უკვე აჩვენებს 3000 სიმბოლოს. პროგრამამ უნდა იპოვნოს მთლიანი დოკუმენტი, დაითვალოს სიმბოლოების მთლიანი რაოდენობა და დოკუმენტის ბოლოს ამობეჭდოს დათვლილი რაოდენობა.

სავარჯიშო 12.3 გამოიყენე urllib წინა სავარჯიშოს დასაკოპირებლად (1) მოცემულ ლინკზე დოკუმენტის საპოვნელად, (2) 3000 სიმბოლოს საჩვენებლად და (3) ყველა სიმბოლოს დასათვლელად. „სათაურებზე“ არ იღელვო, მარტივად აჩვენე დოკუმენტის შიგთავსის პირველი 3000 სიმბოლო.

სავარჯიშო 12.4 შეცვალე urllinks.py პროგრამა ისე, რომ ამოიღო და დათვალო პარაგრაფის (p) ტეგები ნაპოვნ HTML დოკუმენტში და აჩვენო დათვლილი პარაგრაფების როგორც პროგრამის ამონაბეჭდი. არ აჩვენო მთლიანი პარაგრაფი. მარტო დათვალე. შეამოწმე შენი პროგრამა სხვა და სხვა გვერდებზე.

სავარჯიშო 12.5 შეცვალე სოკეტ პროგრამა ისე, რომ მას შემდეგ რაც მიიღებს სათაურებს და ცარიელ ხაზებს, აჩვენოს მხოლოდ მონაცემები. დაიმახსოვრე რომ recv არის სიმბოლოების მიღება (ახალი ხაზების და ყველასი) - არა ხაზების.