मुख्य सामग्री पर जाएँ

Python का उपयोग करके Amazon को कैसे स्क्रैप करें

Python के साथ वेब स्क्रैपिंग और Beautiful Soup लाइब्रेरी की मदद से Amazon को कैसे स्क्रैप करें, यह जानें।
· 13 मि॰ पढ़ें

AI के साथ खोजें

Amazon वेब स्क्रैपिंग ग्राफिक
स्रोत

जब इंटरनेट पर इतनी अधिक मात्रा में डेटा उपलब्ध है, और डेटा को नए तेल के रूप में देखा जा रहा है, तो वेब स्क्रैपिंग का महत्व और व्यावहारिकता कई अनुप्रयोगों में और बढ़ गई है। वेब स्क्रैपिंग वेबसाइट से जानकारी निकालने या स्क्रैप करने से संबंधित है। इसे कभी-कभी वेब हार्वेस्टिंग या वेब डेटा एक्सट्रैक्शन भी कहा जाता है। किसी वेबसाइट से टेक्स्ट कॉपी करके अपने लोकल सिस्टम पर पेस्ट करना भी वेब स्क्रैपिंग ही है, हालांकि यह मैनुअल कार्य है। सामान्यतः, वेब स्क्रैपिंग वेब क्रॉलर की मदद से स्वतः डेटा निकालने से संबद्ध है। वेब क्रॉलर ऐसे स्क्रिप्ट होते हैं जो HTTP प्रोटोकॉल का उपयोग करके वर्ल्ड वाइड वेब से कनेक्ट होते हैं और आपको स्वचालित तरीके से डेटा लाने की सुविधा देते हैं।

चाहे आप डेटा साइंटिस्ट हों, इंजीनियर हों, या कोई भी व्यक्ति जो बड़े डेटा सेट्स का विश्लेषण करता है, वेब से डेटा स्क्रैप करने की क्षमता एक उपयोगी कौशल है। मान लें कि आपको वेब पर डेटा मिलता है और उसे सीधे डाउनलोड करने का कोई तरीका नहीं है, तो Python का उपयोग करके वेब स्क्रैपिंग ऐसा कौशल है जिसकी मदद से आप डेटा को ऐसे रूप में निकाल सकते हैं जिसे विभिन्न तरीकों से इम्पोर्ट और उपयोग किया जा सके।

वेब स्क्रैपिंग के कुछ व्यावहारिक उपयोग हो सकते हैं:

  • किसी विशेष कौशल वाले उम्मीदवारों के रिज्यूमे एकत्र करना,
  • ट्विटर से विशेष हैशटैग वाले ट्वीट्स निकालना,
  • मार्केटिंग में लीड जनरेशन,
  • Amazon जैसी ई-कॉमर्स वेबसाइटों से उत्पाद विवरण और समीक्षाएँ स्क्रैप करना — जो इस ट्यूटोरियल का केंद्र है

उपरोक्त उपयोग-केस के अलावा, वेब स्क्रैपिंग का व्यापक उपयोग नेचुरल लैंग्वेज प्रोसेसिंग में वेबसाइटों से टेक्स्ट निकालने के लिए किया जाता है ताकि डीप लर्निंग मॉडल को प्रशिक्षित किया जा सके।

आगे बढ़ने से पहले ध्यान रखें कि Amazon जैसी वेबसाइटें अपनी विशिष्ट सेवा शर्तों को अपडेट कर सकती हैं या नई तकनीकी पाबंदियाँ लागू कर सकती हैं जो उनकी सामग्री तक पहुँचने या उसे पुन: उपयोग करने के तरीकों को प्रभावित करती हैं। आपकी जिम्मेदारी है कि आप साइट की Terms of Service और robots.txt फ़ाइल की समीक्षा करें ताकि यह सुनिश्चित हो सके कि आपका विशेष उपयोग-केस अनुपालन में है। नीतियाँ बदल सकती हैं और अनुमतियाँ भिन्न हो सकती हैं।

वेब स्क्रैपिंग की संभावित चुनौतियाँ

  • वेबसाइटों से जानकारी स्क्रैप करते समय आप जिन चुनौतियों का सामना करेंगे उनमें से एक है वेबसाइटों की अलग-अलग संरचनाएँ। अर्थात, वेबसाइटों के टेम्पलेट्स अलग और विशिष्ट होंगे; इसलिए अलग-अलग वेबसाइटों पर सामान्यीकरण करना चुनौतीपूर्ण हो सकता है।

  • एक और चुनौती है दीर्घायु। चूँकि वेब डेवलपर अपनी वेबसाइटों को अपडेट करते रहते हैं, आप लंबे समय तक एक ही स्क्रैपर पर भरोसा नहीं कर सकते। भले ही बदलाव मामूली हों, फिर भी वे डेटा लाने में बाधा पैदा कर सकते हैं।

उपरोक्त चुनौतियों का समाधान करने के लिए कई संभावित उपाय हो सकते हैं। एक उपाय है कि वेबसाइट में होने वाले गतिशील परिवर्तनों के अनुरूप सतत इंटिग्रेशन व डेवलपमेंट (CI/CD) और नियमित रखरखाव का पालन किया जाए।

एक और अधिक व्यावहारिक तरीका है विभिन्न वेबसाइटों और प्लेटफ़ॉर्म द्वारा प्रदान किए गए एप्लीकेशन प्रोग्रामिंग इंटरफेस (APIs) का उपयोग करना। उदाहरण के लिए, Facebook और Twitter ऐसे API प्रदान करते हैं जो खास तौर पर उन डेवलपर्स के लिए बनाए गए हैं जो उनके डेटा के साथ प्रयोग करना चाहते हैं या ऐसी जानकारी निकालना चाहते हैं जैसे सभी मित्रों और साझा मित्रों से संबंधित डेटा लेकर उसका कनेक्शन ग्राफ बनाना। APIs का उपयोग करते समय डेटा का प्रारूप सामान्य वेब स्क्रैपिंग से अलग होता है, यानी JSON या XML; जबकि मानक वेब स्क्रैपिंग में आप मुख्य रूप से HTML फ़ॉर्मेट के डेटा से निपटते हैं।

Beautiful Soup क्या है?

Beautiful Soup एक शुद्ध Python लाइब्रेरी है जो किसी वेबसाइट से संरचित डेटा निकालने के लिए उपयोग होती है। यह आपको HTML और XML फ़ाइलों से डेटा पार्स करने देता है। यह एक सहायक मॉड्यूल की तरह कार्य करता है और HTML के साथ इस तरह इंटरैक्ट करता है जो डेवलपर टूल्स के अन्य उपलब्ध तरीकों की तुलना में समान और बेहतर है।

  • यह आमतौर पर प्रोग्रामर्स के कई घंटे या दिन बचा देता है क्योंकि यह आपके पसंदीदा पार्सर्स जैसे lxml और html5lib के साथ काम करता है और पार्स ट्री को नेविगेट, सर्च और मॉडिफाई करने के लिए ऑर्गेनिक Python तरीके प्रदान करता है।

  • Beautiful Soup की एक और शक्तिशाली और उपयोगी विशेषता इसकी यह समझदारी है कि वह प्राप्त दस्तावेज़ों को Unicode में और आउटगोइंग दस्तावेज़ों को UTF-8 में बदल दे। एक डेवलपर के रूप में, आपको इसकी चिंता नहीं करनी पड़ती, जब तक कि दस्तावेज़ स्वयं कोई एन्कोडिंग निर्दिष्ट न करे या Beautiful Soup उसे पहचानने में असमर्थ न हो।

  • इसे अन्य सामान्य पार्सिंग या स्क्रैपिंग तकनीकों की तुलना में तेज़ भी माना जाता है।

पार्सर्स के प्रकार

पार्सर्स के प्रकारों की तालिका
स्रोत

इसके बारे में अधिक पढ़ने के लिए यहाँ जाएँ।

काफी सिद्धांत हो गया, है न? तो आइए beautiful soup इंस्टॉल करते हैं और Python का उपयोग करके इसकी विशेषताओं और क्षमताओं के बारे में सीखना शुरू करते हैं।

पहले चरण के रूप में, आपको अपने टर्मिनल या jupyter lab का उपयोग करके Beautiful Soup लाइब्रेरी इंस्टॉल करनी होगी। beautiful soup को इंस्टॉल करने का सबसे अच्छा तरीका pip के माध्यम से है, इसलिए सुनिश्चित करें कि pip मॉड्यूल पहले से इंस्टॉल है।

!pip3 install beautifulsoup4
Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.7/site-packages (4.7.1)
Requirement already satisfied: soupsieve>=1.2 in /usr/local/lib/python3.7/site-packages (from beautifulsoup4) (1.9.5)

आवश्यक लाइब्रेरी इम्पोर्ट करना

आइए वे पैकेज इम्पोर्ट करते हैं जिनका उपयोग आप वेबसाइट से डेटा स्क्रैप करने और seaborn, matplotlib और bokeh की मदद से उसे विज़ुअलाइज़ करने के लिए करेंगे।

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
import re
import time
from datetime import datetime
import matplotlib.dates as mdates
import matplotlib.ticker as ticker
from urllib.request import urlopen
from bs4 import BeautifulSoup
import requests

Amazon के बेस्ट सेलिंग पुस्तकों को स्क्रैप करना

जिस URL को आप स्क्रैप करने जा रहे हैं वह है: https://www.amazon.in/gp/bestsellers/books/. पेज आर्गुमेंट को प्रत्येक पेज का डेटा एक्सेस करने के लिए बदला जा सकता है। इसलिए, सभी पेजों तक पहुँचने के लिए आपको सभी पेजों पर लूप चलाना होगा ताकि आवश्यक डेटा सेट मिल सके, लेकिन पहले आपको वेबसाइट से पेजों की संख्या पता करनी होगी।

URL से कनेक्ट होने और HTML सामग्री लाने के लिए निम्न चीज़ों की आवश्यकता है:

  • get_data नाम का एक फंक्शन परिभाषित करें जो पेज नंबर को आर्गुमेंट के रूप में लेगा,
  • एक user-agent परिभाषित करें जो स्क्रैपर डिटेक्शन को बायपास करने में मदद करेगा,
  • requests.get में URL निर्दिष्ट करें और user-agent हेडर को आर्गुमेंट के रूप में पास करें,
  • requests.get से कंटेंट निकालें,
  • निर्दिष्ट पेज को स्क्रैप करें और उसे soup वेरिएबल में असाइन करें,

अगला और महत्वपूर्ण चरण है उस parent tag की पहचान करना जिसके अंतर्गत आपकी जरूरत का सारा डेटा मौजूद होगा। जिस डेटा को आप निकालने जा रहे हैं, वह है:

  • पुस्तक का नाम
  • लेखक
  • रेटिंग
  • कस्टमर रेटिंग की संख्या
  • कीमत

नीचे दी गई छवि दिखाती है कि पैरेंट टैग कहाँ स्थित है, और उस पर होवर करने पर सभी आवश्यक एलिमेंट्स हाइलाइट हो जाते हैं।

Amazon बेस्ट सेलिंग पुस्तकों का पेज स्क्रैप करना

पैरेंट टैग की तरह ही, आपको पुस्तक का नाम, लेखक, रेटिंग, कस्टमर रेटिंग और कीमत के लिए एट्रिब्यूट्स ढूँढने होंगे। आपको उस वेबपेज पर जाना होगा जिसे आप स्क्रैप करना चाहते हैं, एट्रिब्यूट चुनना होगा और उस पर राइट-क्लिक करके Inspect Element चुनना होगा। यह आपको शुद्ध HTML वेब पेज से आवश्यक विशिष्ट सूचना फ़ील्ड ढूँढने में मदद करेगा, जैसा कि नीचे दिए गए चित्र में दिखाया गया है:

Amazon पेज का इंस्पेक्ट स्क्रीनशॉट

ध्यान दें कि कुछ लेखकों के नाम Amazon पर रजिस्टर्ड नहीं हैं, इसलिए आपको उन लेखकों के लिए अतिरिक्त find लागू करने की ज़रूरत होगी। नीचे दिए गए सेल कोड में, आप लेखक नामों के लिए नेस्टेड if-else कंडीशन्स पाएँगे, जिनका उपयोग लेखक/प्रकाशन के नाम निकालने के लिए किया गया है।

no_pages = 2

def get_data(pageNo):  
    headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0", "Accept-Encoding":"gzip, deflate", "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "DNT":"1","Connection":"close", "Upgrade-Insecure-Requests":"1"}

    r = requests.get('https://www.amazon.in/gp/bestsellers/books/ref=zg_bs_pg_'+str(pageNo)+'?ie=UTF8&pg='+str(pageNo), headers=headers)#, proxies=proxies)
    content = r.content
    soup = BeautifulSoup(content)
    #print(soup)

    alls = []
    for d in soup.findAll('div', attrs={'class':'a-section a-spacing-none aok-relative'}):
        #print(d)
        name = d.find('span', attrs={'class':'zg-text-center-align'})
        n = name.find_all('img', alt=True)
        #print(n[0]['alt'])
        author = d.find('a', attrs={'class':'a-size-small a-link-child'})
        rating = d.find('span', attrs={'class':'a-icon-alt'})
        users_rated = d.find('a', attrs={'class':'a-size-small a-link-normal'})
        price = d.find('span', attrs={'class':'p13n-sc-price'})

        all1=[]

        if name is not None:
            #print(n[0]['alt'])
            all1.append(n[0]['alt'])
        else:
            all1.append("unknown-product")

        if author is not None:
            #print(author.text)
            all1.append(author.text)
        elif author is None:
            author = d.find('span', attrs={'class':'a-size-small a-color-base'})
            if author is not None:
                all1.append(author.text)
            else:    
                all1.append('0')

        if rating is not None:
            #print(rating.text)
            all1.append(rating.text)
        else:
            all1.append('-1')

        if users_rated is not None:
            #print(price.text)
            all1.append(users_rated.text)
        else:
            all1.append('0')     

        if price is not None:
            #print(price.text)
            all1.append(price.text)
        else:
            all1.append('0')
        alls.append(all1)    
    return alls

नीचे दिया गया कोड सेल निम्न कार्य करेगा:

  • get_data फंक्शन को एक for लूप के भीतर कॉल करना,
  • for लूप इस फंक्शन पर 1 से लेकर पेजों की संख्या+1 तक इटरेट करेगा।
  • क्योंकि आउटपुट एक नेस्टेड लिस्ट होगा, आप पहले लिस्ट को फ्लैट करेंगे और फिर उसे DataFrame में पास करेंगे।
  • अंत में, डेटा फ्रेम को CSV फ़ाइल के रूप में सेव करेंगे।
results = []
for i in range(1, no_pages+1):
    results.append(get_data(i))
flatten = lambda l: [item for sublist in l for item in sublist]
df = pd.DataFrame(flatten(results),columns=['Book Name','Author','Rating','Customers_Rated', 'Price'])
df.to_csv('amazon_products.csv', index=False, encoding='utf-8')

CSV फ़ाइल पढ़ना

अब आइए उस CSV फ़ाइल को लोड करते हैं जिसे आपने ऊपर वाले सेल में बनाया और सेव किया था। यह एक वैकल्पिक चरण है; आप सीधे डेटा फ्रेम df का भी उपयोग कर सकते हैं और नीचे दिए चरण को नज़रअंदाज़ कर सकते हैं।

df = pd.read_csv("amazon_products.csv")
df.shape
(100, 5)

डेटा फ्रेम के आकार से पता चलता है कि आपकी CSV फ़ाइल में 100 पंक्तियाँ और 5 कॉलम हैं।

आइए डेटा सेट की पहली 5 पंक्तियाँ प्रिंट करते हैं।

df.head(61)
 Book NameAuthorRatingCustomers_RatedPrice
0The Power of your Subconscious MindJoseph Murphy4.5 out of 5 stars13,948₹ 99.00
1Think and Grow RichNapoleon Hill4.5 out of 5 stars16,670₹ 99.00
2Word Power Made EasyNorman Lewis4.4 out of 5 stars10,708₹ 130.00
3Mathematics for Class 12 (Set of 2 Vol.) Exami...R.D. Sharma4.5 out of 5 stars18₹ 930.00
4The Girl in Room 105Chetan Bhagat4.3 out of 5 stars5,162₹ 149.00
..................
56COMBO PACK OF Guide To JAIIB Legal Aspects Pri...MEC MILLAN4.5 out of 5 stars114₹ 1,400.00
57Wren & Martin High School English Grammar and ...Rao N4.4 out of 5 stars1,613₹ 400.00
58Objective General KnowledgeSanjiv Kumar4.2 out of 5 stars742₹ 254.00
59The Rudest Book EverShwetabh Gangwar4.6 out of 5 stars1,177₹ 194.00
60Sita: Warrior of Mithila (Ram Chandra Series -...Amish Tripathi4.4 out of 5 stars3,110₹ 248.00

61 पंक्तियाँ × 5 कॉलम

आइए Ratings, Customers_Rated और Price कॉलम पर कुछ प्रीप्रोसेसिंग करें।

  • चूँकि आपको पता है कि रेटिंग 5 में से होती है, आप केवल रेटिंग रखें और उसमें से अतिरिक्त हिस्सा हटा दें।
  • customers_rated कॉलम से कॉमा हटाएँ।
  • price कॉलम से रुपये का प्रतीक, कॉमा हटाएँ और डॉट के आधार पर स्प्लिट करें।
  • अंत में, इन तीनों कॉलम को integer या float में कन्वर्ट करें।
df['Rating'] = df['Rating'].apply(lambda x: x.split()[0])
df['Rating'] = pd.to_numeric(df['Rating'])
df["Price"] = df["Price"].str.replace('₹', '')
df["Price"] = df["Price"].str.replace(',', '')
df['Price'] = df['Price'].apply(lambda x: x.split('.')[0])
df['Price'] = df['Price'].astype(int)
df["Customers_Rated"] = df["Customers_Rated"].str.replace(',', '')
df['Customers_Rated'] = pd.to_numeric(df['Customers_Rated'], errors='ignore')
df.head()
 Book NameAuthorRatingCustomers_RatedPrice
0The Power of your Subconscious MindJoseph Murphy4.51394899
1Think and Grow RichNapoleon Hill4.51667099
2Word Power Made EasyNorman Lewis4.410708130
3Mathematics for Class 12 (Set of 2 Vol.) Exami...R.D. Sharma4.518930
4The Girl in Room 105Chetan Bhagat4.35162149

आइए DataFrame के डेटा टाइप्स की जाँच करें।

df.dtypes
Book Name           object
Author              object
Rating             float64
Customers_Rated      int64
Price                int64
dtype: object

DataFrame में शून्य मानों को NaN से बदलें।

df.replace(str(0), np.nan, inplace=True)
df.replace(0, np.nan, inplace=True)

DataFrame में NaN की संख्या गिनना

count_nan = len(df) - df.count()
count_nan
Book Name          0
Author             6
Rating             0
Customers_Rated    0
Price              1
dtype: int64

उपरोक्त आउटपुट से आप देख सकते हैं कि कुल छह पुस्तकें ऐसी हैं जिनके पास लेखक का नाम नहीं है, जबकि एक पुस्तक के साथ कीमत संबद्ध नहीं है। ये जानकारी किसी ऐसे लेखक के लिए महत्वपूर्ण है जो अपनी किताबें बेचना चाहता है और ऐसी जानकारी देना नज़रअंदाज़ नहीं करनी चाहिए।

आइए इन NaN को ड्रॉप करें।

df = df.dropna()

Amazon पर लेखकों की सबसे महँगी पुस्तक

आइए पता लगाएँ कि किन लेखकों की सबसे महँगी पुस्तकें थीं। आप ऐसे शीर्ष 20 लेखकों के परिणामों का विज़ुअलाइज़ेशन करेंगे।

data = df.sort_values(["Price"], axis=0, ascending=False)[:15]
data
 Book NameAuthorRatingCustomers_RatedPrice
56COMBO PACK OF Guide To JAIIB Legal Aspects Pri...MEC MILLAN4.51141400.0
98Diseases of Ear, Nose and ThroatP L Dhingra4.71181285.0
3Mathematics for Class 12 (Set of 2 Vol.) Exami...R.D. Sharma4.518930.0
96Madhymik Bhautik Vigyan -12 (Part 1-2) (NCERT ...Kumar-Mittal5.01765.0
6My First Library: Boxset of 10 Board Books for...Wonder House Books4.53116750.0
38Indian Polity - For Civil Services and Other S...M. Laxmikanth4.61210700.0
42A Modern Approach to Verbal & Non-Verbal Reaso...R.S. Aggarwal4.41822675.0
27The Intelligent Investor (English) Paperback –...Benjamin Graham4.46201650.0
99Law of CONTRACT & Specific ReliefDr. Avtar Singh4.423643.0
49All In One ENGLISH CORE CBSE Class 12 2019-20Arihant Experts4.4493599.0
72The SecretRhonda Byrne4.511220556.0
86How to Prepare for Quantitative Aptitude for t...Arun Sharma4.4847537.0
8Quantitative Aptitude for Competitive Examinat...R S Aggarwal4.44553435.0
16Sapiens: A Brief History of HumankindYuval Noah Harari4.614985434.0
84Concept of Physics Part-2 (2019-2020 Session) ...H.C. Verma4.61807433.0
from bokeh.models import ColumnDataSource
from bokeh.transform import dodge
import math
from bokeh.io import curdoc
curdoc().clear()
from bokeh.io import push_notebook, show, output_notebook
from bokeh.layouts import row
from bokeh.plotting import figure
from bokeh.transform import factor_cmap
from bokeh.models import Legend
output_notebook()
BokehJS लोड हो रहा है ...
p = figure(x_range=data.iloc[:,1], plot_width=800, plot_height=550, title="Authors Highest Priced Book", toolbar_location=None, tools="")

p.vbar(x=data.iloc[:,1], top=data.iloc[:,4], width=0.9)

p.xgrid.grid_line_color = None
p.y_range.start = 0
p.xaxis.major_label_orientation = math.pi/2
show(p)
लेखकों की सबसे महँगी पुस्तक का बार चार्ट

उपरोक्त ग्राफ से आप देख सकते हैं कि सबसे ऊपर की दो सबसे महँगी पुस्तकें Mecmillan और P L Dhingra के हैं।

लेखकों द्वारा शीर्ष-रेटेड पुस्तकें

आइए पता लगाएँ कि किन लेखकों की शीर्ष-रेटेड पुस्तकें हैं और उन लेखकों की कौन-सी पुस्तकें शीर्ष पर हैं। हालाँकि, यह पता लगाते समय, आप उन लेखकों को फ़िल्टर करेंगे जिनमें 1000 से कम कस्टमर रेटिंग हैं।

data = df[df['Customers_Rated'] > 1000]
data = data.sort_values(['Rating'],axis=0, ascending=False)[:15]
data
 Book NameAuthorRatingCustomers_RatedPrice
26Inner Engineering: A Yogi’s Guide to JoySadhguru4.74091254.0
70Bhagavad-Gita (Hindi)A. C. Bhaktivedanta4.71023150.0
11The AlchemistPaulo Coelho4.722182264.0
47Harry Potter and the Philosopher's StoneJ.K. Rowling4.77737234.0
84Concept of Physics Part-2 (2019-2020 Session) ...H.C. Verma4.61807433.0
16Sapiens: A Brief History of HumankindYuval Noah Harari4.614985434.0
38Indian Polity - For Civil Services and Other S...M. Laxmikanth4.61210700.0
29Wings of Fire: An Autobiography of Abdul KalamArun Tiwari4.63513301.0
39The Theory of EverythingStephen Hawking4.62004199.0
25The Immortals of Meluha (Shiva Trilogy)Amish4.64538248.0
23Life's Amazing Secrets: How to Find Balance an...Gaur Gopal Das4.63422213.0
34Dear Stranger, I Know How You FeelAshish Bagrecha4.61130167.0
17The Monk Who Sold His FerrariRobin Sharma4.65877137.0
13How to Win Friends and Influence PeopleDale Carnegie4.61537799.0
59The Rudest Book EverShwetabh Gangwar4.61177194.0
p = figure(x_range=data.iloc[:,0], plot_width=800, plot_height=600, title="Top Rated Books with more than 1000 Customers Rating", toolbar_location=None, tools="")

p.vbar(x=data.iloc[:,0], top=data.iloc[:,2], width=0.9)

p.xgrid.grid_line_color = None
p.y_range.start = 0
p.xaxis.major_label_orientation = math.pi/2
show(p)
शीर्ष रेटेड पुस्तकों का बार चार्ट

उपरोक्त आउटपुट से आप देख सकते हैं कि 1000 से अधिक कस्टमर रेटिंग वाली शीर्ष तीन पुस्तकें हैं: Inner Engineering: A Yogi’s Guide to Joy, Bhagavad-Gita (Hindi), और The Alchemist।

p = figure(x_range=data.iloc[:,1], plot_width=800, plot_height=600, title="Top Rated Books with more than 1000 Customers Rating", toolbar_location=None, tools="")

p.vbar(x=data.iloc[:,1], top=data.iloc[:,2], width=0.9)

p.xgrid.grid_line_color = None
p.y_range.start = 0
p.xaxis.major_label_orientation = math.pi/2
show(p)
शीर्ष रेटेड पुस्तकों का बार चार्ट 2

उपरोक्त ग्राफ 1000 से अधिक कस्टमर रेटिंग वाली सबसे उच्च-रेटेड पुस्तकों के संदर्भ में अवरोही क्रम में शीर्ष 10 लेखकों को दिखाता है, जो हैं Sadhguru, A. C. Bhaktivedanta और Paulo Coelho।

सबसे अधिक कस्टमर रेटिंग वाले लेखक और पुस्तकें

जबकि आपने पहले ही शीर्ष-रेटेड पुस्तकें और शीर्ष-रेटेड लेखक देख लिए हैं, फिर भी किसी पुस्तक के लिए रेटिंग देने वाले ग्राहकों की संख्या के आधार पर सर्वश्रेष्ठ लेखक और पुस्तक का निष्कर्ष निकालना अधिक विश्वसनीय और ठोस होगा।

तो, आइए इसे जल्दी से पता लगाते हैं।

data = df.sort_values(["Customers_Rated"], axis=0, ascending=False)[:20]
data
 Book NameAuthorRatingCustomers_RatedPrice
11The AlchemistPaulo Coelho4.722182264.0
1Think and Grow RichNapoleon Hill4.51667099.0
13How to Win Friends and Influence PeopleDale Carnegie4.61537799.0
16Sapiens: A Brief History of HumankindYuval Noah Harari4.614985434.0
18Rich Dad Poor Dad : What The Rich Teach Their ...Robert T. Kiyosaki4.514591296.0
10The Subtle Art of Not Giving a F*ckMark Manson4.414418365.0
0The Power of your Subconscious MindJoseph Murphy4.51394899.0
48The Power of Your Subconscious MindJoseph Murphy4.51394899.0
72The SecretRhonda Byrne4.511220556.0
411984George Orwell4.51082995.0
2Word Power Made EasyNorman Lewis4.410708130.0
46Man's Search For Meaning: The classic tribute ...Viktor E Frankl4.48544245.0
67The 7 Habits of Highly Effective PeopleR. Stephen Covey4.38229397.0
47Harry Potter and the Philosopher's StoneJ.K. Rowling4.77737234.0
40One Indian GirlChetan Bhagat3.87128113.0
65Thinking, Fast and Slow (Penguin Press Non-Fic...Daniel Kahneman4.47087410.0
27The Intelligent Investor (English) Paperback –...Benjamin Graham4.46201650.0
17The Monk Who Sold His FerrariRobin Sharma4.65877137.0
53Ram - Scion of Ikshvaku (Ram Chandra)Amish Tripathi4.25766262.0
93The Richest Man in BabylonGeorge S. Clason4.55694129.0
from bokeh.transform import factor_cmap
from bokeh.models import Legend
from bokeh.palettes import Dark2_5 as palette
import itertools
from bokeh.palettes import d3
#colors has a list of colors which can be used in plots
colors = itertools.cycle(palette)

palette = d3['Category20'][20]
index_cmap = factor_cmap('Author', palette=palette,
                         factors=data["Author"])
p = figure(plot_width=700, plot_height=700, title = "Top Authors: Rating vs. Customers Rated")
p.scatter('Rating','Customers_Rated',source=data,fill_alpha=0.6, fill_color=index_cmap,size=20,legend='Author')
p.xaxis.axis_label = 'RATING'
p.yaxis.axis_label = 'CUSTOMERS RATED'
p.legend.location = 'top_left'
BokehDeprecationWarning: 'legend' keyword is deprecated, use explicit 'legend_label', 'legend_field', or 'legend_group' keywords instead
show(p)
शीर्ष लेखकों का स्कैटर प्लॉट

उपरोक्त ग्राफ लेखकों का एक स्कैटर प्लॉट है जिसमें कस्टमर रेटिंग की संख्या बनाम वास्तविक रेटिंग दिखाई गई है। उपरोक्त प्लॉट को देखकर निम्न निष्कर्ष निकाले जा सकते हैं।

  • बिना किसी संदेह के Paulo Coelho की पुस्तक The Alchemist सबसे अधिक बिकने वाली है, क्योंकि रेटिंग और कस्टमर रेटिंग की संख्या दोनों एक-दूसरे के अनुरूप हैं।
  • लेखक Amish Tripathi की पुस्तक Ram - Scion of Ikshvaku (Ram Chandra) की रेटिंग 4.2 है और कस्टमर रेटिंग 5766 है। वहीं लेखक George S. Clason की पुस्तक The Richest Man in Babylon की कस्टमर रेटिंग लगभग समान है, लेकिन कुल रेटिंग 4.5 है। इसलिए, यह निष्कर्ष निकाला जा सकता है कि अधिक ग्राहकों ने The Richest Man in Babylon को उच्च रेटिंग दी।

निष्कर्ष

ट्यूटोरियल पूरा करने पर बधाई।

यह ट्यूटोरियल beautiful soup के साथ Amazon को स्क्रैप करने की एक बुनियादी शुरुआत थी और यह भी कि आप bokeh plotting लाइब्रेरी का उपयोग करके निकाली गई जानकारी का अर्थ कैसे समझ सकते हैं। beautiful soup के साथ वेब स्क्रैपिंग सीखने में एक कदम आगे बढ़ने के लिए अच्छा अभ्यास होगा कि आप कुछ अन्य वेबसाइटों से डेटा स्क्रैप करें और देखें कि आप उससे क्या अंतर्दृष्टियाँ प्राप्त कर सकते हैं। यदि आप लोकप्रिय वेबसाइटों को स्क्रैप करने पर अधिक मार्गदर्शन चाहते हैं तो हमारे पास Reddit को स्क्रैप करने पर ट्यूटोरियल भी है।

यदि आप Python में अभी शुरुआत कर रहे हैं और अधिक सीखना चाहते हैं, तो DataCamp का Introduction to Data Science in Python कोर्स करें।

विषय