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- ում արդեն դիտված ֆիլմերի հետագա վերլուծության համար: