ინტერნეტში სეირნობა პითონით და სკრაპიით

ბლოგი

ინტერნეტში სეირნობა პითონით და სკრაპიით

ინტერნეტში სეირნობა პითონით და სკრაპიით

შესავალი

ვებ – სკრიპინგი, რომელსაც ხშირად უწოდებენ ვებ – გვერდის გადახვევას ან ვებ – სპაიდინგს, ან პროგრამულად ვებ გვერდების კრებულს და მონაცემების მოპოვებას, არის მძლავრი ინსტრუმენტი ინტერნეტში არსებულ მონაცემებთან მუშაობისთვის.



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

ამ გაკვეთილში თქვენ გაეცნობით scraping და spidering პროცესის საფუძვლებს, როდესაც შეისწავლით მხიარულ მონაცემთა ნაკრებებს. ჩვენ გამოვიყენებთ BrickSet , საზოგადოების მიერ მართული საიტი, რომელიც შეიცავს ინფორმაციას LEGO კომპლექტების შესახებ. ამ გაკვეთილის ბოლოს თქვენ გექნებათ სრულად ფუნქციონალური პითონის ვებ – სკაპერი, რომელიც დადის Brickset– ის მთელ რიგ გვერდებზე და ამოიღებს მონაცემებს LEGO კომპლექტების შესახებ თითოეული გვერდიდან, აჩვენებს მონაცემებს თქვენს ეკრანზე.



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

ნაბიჯი 1 - ძირითადი სკრაპერის შექმნა

გაფუჭება ორსაფეხურიანი პროცესია:



  1. სისტემატურად პოულობთ და ჩამოტვირთავთ ვებ გვერდებს.
  2. თქვენ იღებთ იმ ვებ გვერდებს და ამოიღებთ მათგან ინფორმაციას.

ორივე ეს ნაბიჯი მრავალგვარად შეიძლება განხორციელდეს მრავალ ენაზე.

თქვენ შეგიძლიათ ააწყოთ სკრაპერი ნულიდან თქვენი პროგრამირების ენით მოწოდებული მოდულების ან ბიბლიოთეკების გამოყენებით, მაგრამ შემდეგ თქვენ უნდა გაუმკლავდეთ პოტენციურ თავის ტკივილს, რადგან თქვენი საფხეკი უფრო რთული გახდება. მაგალითად, თქვენ უნდა გაუმკლავდეთ თანხმობას, ასე რომ თქვენ შეგიძლიათ ერთდროულად დაათვალიეროთ ერთზე მეტი გვერდი. თქვენ ალბათ გინდათ გაერკვნენ, თუ როგორ გადააქციოთ თქვენი გაფუჭებული მონაცემები სხვადასხვა ფორმატში, როგორიცაა CSV, XML ან JSON. ზოგჯერ თქვენ მოგიწევთ გაუმკლავდეთ საიტებს, რომლებიც საჭიროებენ სპეციფიკურ პარამეტრებს და წვდომის შაბლონებს.

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

Scrapy არის ერთ -ერთი ყველაზე პოპულარული და მძლავრი პითონის სკრაპინგის ბიბლიოთეკა; იგი იღებს ბატარეების ჩათრევას მიდგომასთან დაკავშირებით, რაც იმას ნიშნავს, რომ ის ახორციელებს ბევრ საერთო ფუნქციონირებას, რაც ყველა საფხეკს სჭირდება, რათა დეველოპერებს არ მოუწიონ ყოველ ჯერზე საჭის ხელახალი გამოგონება. ეს გახდის გაფუჭებას სწრაფ და სახალისო პროცესს!

Scrapy, ისევე როგორც პითონის პაკეტების უმეტესობა, არის PyPI– ზე (ასევე ცნობილია როგორც | _+_ |). PyPI, პითონის პაკეტის ინდექსი, არის საზოგადოების საკუთრებაში არსებული ყველა გამოქვეყნებული პითონის პროგრამული უზრუნველყოფის საცავი.

თუ თქვენ გაქვთ პითონის ინსტალაცია, როგორიც ამ სახელმძღვანელოს წინაპირობაშია აღწერილი, თქვენ უკვე გაქვთ | _+_ | დაინსტალირებული თქვენს აპარატზე, ასე რომ თქვენ შეგიძლიათ დააინსტალიროთ Scrapy შემდეგი ბრძანებით:

pip

თუ ინსტალაციასთან დაკავშირებით რაიმე პრობლემა შეგექმნათ, ან გსურთ Scrapy– ის დაყენება | _+_ | გამოყენების გარეშე, გადახედეთ ოფიციალური სამონტაჟო დოკუმენტები რა

დრო ახალი ბანკის კრიპტო

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

pip

ახლა გადადით თქვენს მიერ შექმნილ ახალ დირექტორიაში:

pip install scrapy

შემდეგ შექმენით პითონის ახალი ფაილი ჩვენი სკრაპერისთვის სახელწოდებით | _+_ |. ჩვენ ჩავდებთ მთელ ჩვენს კოდს ამ ფაილში ამ გაკვეთილისთვის. თქვენ შეგიძლიათ შექმნათ ეს ფაილი ტერმინალში | _++| ბრძანება, ასე:

pip

ან შეგიძლიათ შექმნათ ფაილი თქვენი ტექსტური რედაქტორის ან გრაფიკული ფაილების მენეჯერის გამოყენებით.

ჩვენ დავიწყებთ ძალიან ძირითადი საფხეკის დამზადებით, რომელიც იყენებს Scrapy– ს, როგორც საფუძველს. ამისათვის ჩვენ შევქმნით პითონის კლასს, რომელიც ქვეკლასებს | _+_ |, ობობების ძირითად კლასს უზრუნველყოფს Scrapy. ამ კლასს ექნება ორი აუცილებელი ატრიბუტი:

  • | _+_ | - უბრალოდ სახელი ობობისთვის.
  • | _+_ | - მისამართების სია, რომლიდანაც იწყებთ სეირნობას. ჩვენ დავიწყებთ ერთი URL– ით.

გახსენით | _+_ | შეიტანეთ თქვენი ტექსტური რედაქტორი და დაამატეთ ეს კოდი ძირითადი ობობის შესაქმნელად:

mkdir brickset-scraper

მოდით დავშალოთ ეს სტრიქონი:

პირველ რიგში, ჩვენ შემოგვაქვს | _+_ | ასე რომ ჩვენ შეგვიძლია გამოვიყენოთ კლასები, რომელსაც პაკეტი იძლევა.

შემდეგი, ჩვენ ვიღებთ | _ _+_ | Scrapy– ის მიერ მოწოდებული კლასი და გააკეთეთ a ქვეკლასი აქედან ეწოდება | _+_ |. განიხილეთ ქვეკლასი, როგორც მისი მშობლის კლასის უფრო სპეციალიზებული ფორმა. | _++_ | ქვეკლასს აქვს მეთოდები და ქცევები, რომლებიც განსაზღვრავს, თუ როგორ უნდა მიჰყვეს URL- ებს და ამოიღოს მონაცემები იმ გვერდებიდან, რომლებიც მან აღმოაჩინა, მაგრამ არ იცის სად ვეძებოთ ან რა მონაცემები მოიძიოს. მისი ქვეკლასით ჩვენ შეგვიძლია მივაწოდოთ მას ეს ინფორმაცია.

შემდეგ ჩვენ ობობას ვაძლევთ სახელს | _+_ |.

დაბოლოს, ჩვენ ვაძლევთ ჩვენს scraper– ს ერთ URL– ს დასაწყებად: http://brickset.com/sets/year-2016 რა თუ თქვენ გახსნით ამ მისამართს თქვენს ბრაუზერში, ის მიგიყვანთ ძიების შედეგების გვერდზე, სადაც ნაჩვენებია პირველი მრავალი გვერდიდან, რომელიც შეიცავს LEGO ნაკრებებს.

ვიზუალური სტუდიის პროექტის იდეები

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

cd brickset-scraper

თქვენ ნახავთ მსგავს რამეს:

scraper.py

ეს არის ბევრი გამომუშავება, ასე რომ გავანადგუროთ იგი.

  • სკრაპერმა ინიციალიზაცია მოახდინა და ჩატვირთა დამატებითი კომპონენტები და გაფართოებები, რაც საჭირო იყო URL– ებიდან მონაცემების წაკითხვის დასამუშავებლად.
  • იგი იყენებდა ჩვენს მიერ მოწოდებულ URL- ს | _+_ | სია და აითვისა HTML, ისევე როგორც თქვენი ბრაუზერი გააკეთებდა.
  • ეს HTML გადაეცა | _+_ | მეთოდი, რომელიც სტანდარტულად არაფერს აკეთებს. ვინაიდან ჩვენ არასოდეს დავწერეთ საკუთარი | _+_ | მეთოდი, ობობა უბრალოდ სრულდება ყოველგვარი სამუშაოს გარეშე.

ახლა მოდით ამოვიღოთ რამდენიმე მონაცემი გვერდიდან.

ნაბიჯი 2 - მონაცემების ამოღება გვერდიდან

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

თუ შეხედავთ გვერდი, რომლის გახეხვაც გვინდა თქვენ ნახავთ, რომ მას აქვს შემდეგი სტრუქტურა:

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

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

touch

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

კიდევ ერთი შეხედულება წყარო იმ გვერდისა, რომელსაც ჩვენ ვაანალიზებთ, გვეუბნება, რომ თითოეული ნაკრების სახელი ინახება | _+_ | წარწერა თითოეული ნაკრებისთვის:

touch scraper.py

| _++_ | ობიექტს, რომელსაც ჩვენ ვტრიალებთ, აქვს თავისი | _+_ | მეთოდი, ასე რომ ჩვენ შეგვიძლია ჩავაბაროთ სელექტორი ბავშვის ელემენტების დასადგენად. შეცვალეთ თქვენი კოდი შემდეგნაირად, რომ იპოვოთ ნაკრების სახელი და აჩვენოთ იგი:

scrapy.Spider

შენიშვნა : უკანა მძიმის შემდეგ | _+_ | არ არის შეცდომა ჩვენ მალე დავამატებთ ამ განყოფილებას, ასე რომ, ჩვენ დავტოვეთ მძიმით, რათა მოგვიანებით გავაადვილოთ ამ ნაწილის დამატება.

თქვენ შეამჩნევთ ორ რამეს რაც ხდება ამ კოდში:

  • ჩვენ ვამატებთ | _+_ | ჩვენი ამომრჩეველი სახელისთვის. ეს არის CSS ფსევდო სელექტორი რომ იღებს ტექსტს შიგნით | | _+_ | ტეგი ვიდრე თავად ტეგი.
  • ჩვენ ვურეკავთ | _+_ | ობიექტზე | _ _+_ | რადგან ჩვენ უბრალოდ გვინდა პირველი ელემენტი, რომელიც ემთხვევა სელექტორს. ეს გვაძლევს სიმებს, ვიდრე ელემენტების ჩამონათვალს.

შეინახეთ ფაილი და კვლავ გაუშვით საფხეკი:

name

ამჯერად თქვენ ნახავთ, რომ ნაკრების სახელები გამოჩნდება გამომავალში:

start_urls

მოდით გავაგრძელოთ ამის გაფართოება სურათების, ნაჭრებისა და მინიატურული ფიგურების ახალი სელექტორების დამატებით, ან მინიფიგურები რომ მოყვება ნაკრები.

კიდევ ერთხელ გადახედეთ HTML– ს კონკრეტული ნაკრებისთვის:

scrapy.py

შეინახეთ ცვლილებები და კვლავ გაუშვით სკრაბი:

import scrapy class BrickSetSpider(scrapy.Spider): name = 'brickset_spider' start_urls = ['http://brickset.com/sets/year-2016']

ახლა თქვენ ნახავთ ამ მონაცემებს პროგრამის გამომავალში:

გამომავალი 2016-09-22 23:52:37 [scrapy] DEBUG: ამოღებულია {'minifigs': '5', 'piece': '2380', 'name': 'Brick Bank', 'image': 'http: //images.brickset.com/sets/small/10251-1.jpg'>https://www.digitalocean.com/  

#პითონი