Semalt- ի ձեռնարկ. Վեբ գրություններ Python- ում

Վերջերս ես այցելել եմ KinoPoisk (IMDB- ի ռուսերեն տարբերակ) և իմացել եմ, որ տարիների ընթացքում ես հասցրել եմ գնահատել ավելի քան 1000 կինոնկար: Ես կարծում էի, որ հետաքրքիր կլինի ուսումնասիրել այս տվյալները ՝ արդյո՞ք ժամանակի ընթացքում իմ կինոյի համերը փոխվել են: Տարվա որ եղանակներին ես ավելի շատ կինոնկարներ դիտում:

Բայց նախքան վերլուծել և ստեղծել գեղեցիկ գրաֆիկա, մենք պետք է ստացանք տվյալները: Դժբախտաբար, շատ ծառայություններ չունեն հանրային API, այնպես որ դուք պետք է փաթաթեք ձեր թևերը և վերլուծեք html էջերը:

Այս հոդվածը նախատեսված է նրանց համար, ովքեր միշտ ցանկացել են սովորել, թե ինչպես օգտագործել վեբ գրությունը, բայց ձեռքերը չեն ստացել դրա վրա, կամ չգիտեն, թե որտեղից պետք է սկսել:

Առաջադրանք

Մեր խնդիրն է արդյունահանել արդեն իսկ դիտված ֆիլմերի վերաբերյալ տվյալները ՝ ֆիլմի անվանումը, դիտման ամսաթիվը և ժամանակը, օգտագործողի վարկանիշը:

Փաստորեն, մեր աշխատանքներն արվելու են 2 փուլով.

Փուլ 1. Ներբեռնեք և պահեք html էջերը

Բեմ 2. Վերլուծել html մի ձևաչափով, որը հարմար է հետագա վերլուծության համար (csv, json, pandas dataframe և այլն)

Գործիքներ

Http- խնդրանքներ ուղարկելու համար կան շատ python-գրադարաններ: Առավել հայտնի և շատ հարմար մեկը պահանջներն են:

Անհրաժեշտ է նաև html վերլուծության համար ընտրել գրադարան:

BeatifulSoup, lxml

Սրանք html վերլուծելու երկու ամենատարածված գրադարաններն են, և դրանցից մեկը ընտրելը պարզապես անձնական նախապատվություն է: Ավելին, այս գրադարանները սերտորեն կապված են միմյանց հետ. BeautifulSoup- ը սկսեց օգտագործել lxml- ը որպես ներքին վերլուծիչ ՝ արագացման համար, իսկ lxml- ում ՝ supparser- ի մոդուլ: Մոտեցումները համեմատելու համար ես վերլուծելու եմ տվյալները BeautifulSoup- ի հետ և օգտագործելու XPath ընտրիչներ մոդուլում lxml.html:

Տվյալների ներբեռնում

Եկեք սկսենք տվյալների բեռնումը: Նախևառաջ, եկեք պարզապես փորձենք էջը հասցնել url- ով և պահել այն տեղական ֆայլում:

Մենք բացում ենք ստացված ֆայլը և տեսնում, որ դա այդքան էլ պարզ չէ. Կայքը մեզ համարել է ռոբոտ և չի ցույց տալ տվյալները:

Եկեք պարզենք, թե ինչպես է աշխատում կայքը

Զննարկիչը կայքից տեղեկատվություն ստանալու խնդիր չունի: Տեսնենք, թե ինչպես է այն ուղարկում հարցումը: Դա անելու համար մենք օգտագործում ենք «Networkանց» վահանակը զննարկիչում «Developer Tools» - ում (ես դրա համար օգտագործում եմ 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- ում արդեն դիտված ֆիլմերի հետագա վերլուծության համար: