სამეურვეო სამიტისგან: პითონის ვებ – გვერდები

ამას წინათ მოვინახულე KinoPoisk (IMDB- ის რუსული ვერსია) და აღმოვაჩინე, რომ წლების განმავლობაში მე შევძელი შევსებულიყავი 1000-ზე მეტ ფილმზე. ვფიქრობდი, რომ საინტერესო იქნება ამ მონაცემების უფრო დეტალური გამოკვლევა: შეიცვალა ჩემი ფილმის გემოვნება დროთა განმავლობაში? წლის რომელ სეზონზე უფრო მეტ ფილმს ვუყურებ?

მაგრამ სანამ გავაანალიზებთ და მშვენიერ გრაფიკას გავაკეთებთ, მონაცემები უნდა მივიღოთ. სამწუხაროდ, ბევრ სერვისს არ აქვს საჯარო API, ასე რომ, თქვენ უნდა ააწყოთ თქვენი ყდის ბალიშები და დაანახოთ html გვერდები.

ეს სტატია განკუთვნილია მათთვის, ვისაც ყოველთვის სურდა იმის სწავლა, თუ როგორ გამოიყენოს ვებ შეფუთვა, მაგრამ ხელი არ მიუღია, ან არ იცის სად უნდა დაეწყო.

დავალება

ჩვენი ამოცანაა ამონაწერი უკვე ნახული ფილმების შესახებ: ფილმის სათაური, ნახვის თარიღი და დრო, მომხმარებლის რეიტინგი.

სინამდვილეში, ჩვენი სამუშაო 2 ეტაპად მიმდინარეობს:

ეტაპი 1: ჩამოტვირთეთ და შეინახეთ html გვერდები

ეტაპი 2: parse html ფორმატში, რომელიც შესაფერისია შემდგომი ანალიზისთვის (csv, json, pandas dataframe და ა.შ.)

ინსტრუმენტები

უამრავი მოთხოვნაა python- ბიბლიოთეკა. ყველაზე ცნობილი და ძალიან მოსახერხებელია მოთხოვნები.

ასევე აუცილებელია ბიბლიოთეკის არჩევა html ანალიზისთვის.

BeatifulSoup, lxml

ეს არის ორი ყველაზე პოპულარული ბიბლიოთეკა pting html- ისთვის და მათგან ერთი არჩევა მხოლოდ პირადი უპირატესობაა. უფრო მეტიც, ეს ბიბლიოთეკები ერთმანეთთან მჭიდრო კავშირშია: BeautifulSoup– მა დაიწყო lxml– ის გამოყენება, როგორც შიდა პარსერი, აჩქარებისთვის, ხოლო lxml– ში დაემატა სუპერსტერული მოდული. მიდგომების შედარების მიზნით, მე დავყავებ მონაცემებს BeautifulSoup- ს და ვიყენებ XPath- ის ამომრჩევლებს მოდულში lxml.html.

მონაცემების ჩამოტვირთვა

დავიწყოთ მონაცემების ჩამოტვირთვა. პირველ რიგში, მოდით, უბრალოდ შევეცადოთ გვერდი url- ით მივიღოთ და შეინახოთ იგი ადგილობრივ ფაილზე.

ჩვენ ვხსნით შედეგს და ვხედავთ, რომ ეს არც ისე მარტივია: საიტი გვევლინება რობოტად და არ აჩვენებს მონაცემებს.

მოდით გავეცნოთ როგორ მუშაობს საიტი

ბრაუზერს არ აქვს პრობლემა საიტიდან ინფორმაციის მოპოვებაში. ვნახოთ, რამდენად უგზავნის ის თხოვნას. ამისათვის ჩვენ ვიყენებთ "ქსელის" პანელს ბრაუზერში "შემქმნელის ინსტრუმენტებში" (ამისათვის Firebug- ს ვიყენებ), ჩვეულებრივ, მოთხოვნა, რომელიც ყველაზე გრძელია, ყველაზე გრძელია.

როგორც ვხედავთ, ბრაუზერი ასევე აგზავნის თავებს UserAgent, cookie და პარამეტრების სხვა რაოდენობას. პირველი, ჩვენ მხოლოდ შევეცდებით გამოაგზავნოთ სწორი UserAgent ჰედერით.

ამჯერად ჩვენ წარმატებული ვართ, ახლა კი მოგვცეს საჭირო მონაცემები. აღსანიშნავია, რომ ზოგჯერ საიტი ასევე ამოწმებს cookie- ს მოქმედებას, ამ შემთხვევაში დაგეხმარებათ მოთხოვნები ბიბლიოთეკის სესიები.

ჩამოტვირთეთ ყველა განაკვეთი

ახლა ჩვენ შეგვიძლია ერთი გვერდის შენახვა განაკვეთებით. ჩვეულებრივ, მომხმარებელს აქვს ბევრი განაკვეთი, და მისი განმეორება აუცილებელია ყველა გვერდის საშუალებით. გვერდის ნომერი, რომელიც გვაინტერესებს, მარტივია გადასაცემად url.

მონაცემების შეგროვება HTML- დან

ახლა მოდით პირდაპირ html მონაცემების შეგროვებას შევუდგეთ. მარტივი მეთოდი იმის გაგება, თუ როგორ არის html გვერდის სტრუქტურა, არის ბრაუზერში "ინსპექტირების ელემენტის" ფუნქციის გამოყენებით. ამ შემთხვევაში, ყველაფერი საკმაოდ მარტივია: განაკვეთების მთელი ცხრილი მოცემულია ჩანართში. აირჩიეთ ეს კვანძი:

საწყისი bs4 იმპორტიდან BeautifulSoup

საწყისი lxml იმპორტიდან html

# ლამაზი წვნიანი

წვნიანი = BeautifulSoup (ტექსტი)

film_list = soup.find ('div', ('class': 'profileFilmsList'))

# lxml

ხე = html.fromstring (ტექსტი)

film_list_lxml = tree.xpath ('// div [@class =' 'profileFilmList' ']')]) [0]

მოდით გავიგოთ, თუ როგორ უნდა გამოვიტანოთ ფილმის რუსული სათაური და ბმული მოცემულია ფილმის გვერდზე (ასევე, როგორ მივიღოთ ტექსტი და ატრიბუტის მნიშვნელობა).

თუ გჭირდებათ ინგლისურის სახელის ამონაწერი, უბრალოდ შეცვალეთ "nameRus" - ში "nameEng".

შედეგები

ჩვენ შევიტყვეთ, თუ როგორ უნდა მოაწყოთ ვებსაიტები, გავეცანით ბიბლიოთეკების მოთხოვნებს, BeautifulSoup- ს და lxml- ს, ასევე მივიღეთ მონაცემები, რომელიც შესაფერისია KinoPoisk- ზე უკვე ნანახი ფილმების შემდგომი ანალიზისთვის.