تريد المساعدة؟ إليك خياراتك:","كرانش بيس","نبذة عنا","شكراً للجميع على الدعم الرائع!","روابط سريعة","برنامج الإحالة","بريميوم","ProxyScrape تجربة متميزة","مدقق الوكلاء عبر الإنترنت","أنواع الوكلاء","الدول الوكيلة","حالات استخدام الوكيل","مهم","سياسة ملفات تعريف الارتباط","إخلاء المسؤولية","سياسة الخصوصية","الشروط والأحكام","وسائل التواصل الاجتماعي","فيسبوك","لينكد إن","تويتر","كورا","برقية","الخلاف","\n © حقوق الطبع والنشر © 2024 - ثيب بي في | بروغسترات 18 | 2812 ميكلين | بلجيكا | ضريبة القيمة المضافة BE 0749 716 760\n"]}
كشط الويب هو فن استخراج البيانات من الإنترنت واستخدامها لأغراض مفيدة. كما يُعرف أحيانًا باسم استخراج بيانات الويب أو جمع بيانات الويب. بالنسبة للمبتدئين، فهو يشبه تمامًا نسخ البيانات من الإنترنت وتخزينها محليًا. ومع ذلك، فهي عملية يدوية. تجريف الويب
كشط الويب هو فن استخراج البيانات من الإنترنت واستخدامها لأغراض مفيدة. كما يُعرف أحيانًا باسم استخراج بيانات الويب أو جمع بيانات الويب. بالنسبة للمبتدئين، فهو يشبه تمامًا نسخ البيانات من الإنترنت وتخزينها محليًا. ومع ذلك، فهي عملية يدوية. تجريف الويب هو عملية آلية تعمل بمساعدة برامج زحف الويب. تتصل برامج زحف الويب بالإنترنت باستخدام بروتوكول HTTP وتسمح للمستخدم بجلب البيانات بطريقة آلية. يمكن للمرء أن يعتبر الإنترنت بمثابة التربة المخصبة والبيانات بمثابة الزيت الجديد، في حين أن كشط الويب هو تقنية لاستخراج هذا الزيت.
أصبحت القدرة على كشط البيانات من الإنترنت وتحليلها تقنية أساسية سواء كنت عالم بيانات أو مهندسًا أو مسوقًا. قد يكون هناك العديد من حالات الاستخدام التي قد يكون فيها كشط الويب مفيدًا للغاية. في هذه المقالة، سنقوم بكشط البيانات من أمازون باستخدام Python. وأخيرًا، سنقوم أيضًا بتحليل البيانات التي تم كشطها ومعرفة مدى أهميتها لأي شخص عادي أو عالم بيانات أو شخص يدير متجرًا للتجارة الإلكترونية.
مجرد احتياط بسيط: إذا كنت جديدًا على Python وكشط الويب، فقد يكون من الصعب عليك فهم هذه المقالة. أقترح عليك مراجعة مقالات المستوى التمهيدي في ProxyScrape ثم تعال إلى هذه المقالة.
لنبدأ بالرمز.
بادئ ذي بدء، سنقوم باستيراد جميع المكتبات الضرورية المطلوبة للرمز. سيتم استخدام هذه المكتبات لكشط البيانات وتصورها. إذا كنت تريد معرفة تفاصيل كل واحدة منها، يمكنك زيارة وثائقها الرسمية.
استيراد بانداس ك pd
استيراد numpy ك np
استيراد matplotlib.pyplot ك plt
استيراد سيبورن ك sns
% مضمنة في Matplotlib
استيراد إعادة
استيراد الوقت
من التاريخ والوقت استيراد التاريخ والوقت
استيراد matplotlib.dates باسم mdates
استيراد matplotlib.ticker كمؤشر
من urllib.request استيراد urlopen من urllib.request استيراد urlopen
من bs4 استيراد حساء جميل
استيراد الطلبات
سنقوم الآن بكشط المعلومات المفيدة من الكتب الأكثر مبيعًا في أمازون. عنوان URL الذي سنقوم بكشطه هو:
https://www.amazon.in/gp/bestsellers/books/ref=zg_bs_pg_’+str(pageNo)+’?ie=UTF8&pg=’+str(pageNo)
نظرًا لأننا نحتاج إلى الوصول إلى جميع الصفحات، سنقوم بتكرار كل صفحة للحصول على مجموعة البيانات اللازمة.
للاتصال بعنوان URL وجلب محتوى HTML، يلزم القيام بما يلي,
فيما يلي بعض العلامات المهمة التي تندرج تحتها بياناتنا المهمة,
إذا قمت بفحص الصفحة المحددة، سترى العلامة الأصلية والعناصر المقابلة لها.
إذا كنت ترغب في فحص سمة معينة، انتقل إلى كل سمة منها وافحصها. ستجد بعض السمات المهمة للمؤلف، واسم الكتاب، والتقييم، والسعر، وتقييم العملاء.
في الكود الخاص بنا، سنستخدم عبارات if-إذا-إلا المتداخلة لتطبيق نتائج إضافية على المؤلفين غير المسجلين في أمازون.
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
سيؤدي ذلك الوظائف التالية,
بالنسبة إلى i في النطاق(1, no_pages+1):
نتائج.append(get_data(i))
التسطيح = lambda l: [العنصر للقائمة الفرعية في l للعنصر في القائمة الفرعية]
df = pd.DataFrame(flatten(results),columns=['Book Name','author','Rating','Customers_Rated', 'Price'])
df.to_csv('amazon_products.csv'، فهرس=False، ترميز='utf-8')
سنقوم الآن بتحميل ملف csv,
df = pd.read_csv("amazon_products.csv")
شكل df.form
يُظهر شكل إطار البيانات أن هناك 100 صف و5 أعمدة في ملف CSV.
دعنا نرى الصفوف الخمسة من مجموعة البيانات,
دف.هيد(61)
سنقوم الآن بإجراء بعض المعالجة المسبقة على عمود التقييمات وتقييمات العملاء والسعر.
df['Rating] = df['Rating].apply(lambda x: x.split()[0])
df['Rating '] = pd.to_numeric(df['Rating'])
df[" السعر"] = df["السعر"].str.replace("₹", '')
df[" السعر"] = df["السعر"].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()
إذا ألقينا نظرة على أنواع إطارات البيانات التي نحصل عليها,
هناك بعض المعلومات الناقصة في المخرجات أعلاه. سنقوم أولاً بحساب عدد الصامتات الصفرية ثم نحذفها.
df.replace(str(0), np.nan, inplace=صحيح)
df.replace(0, np.nan, inplace=صحيح)
Count_nan = len(df) - df.count()
العد_نان
df = df.dropna()
سنتعرف الآن على جميع المؤلفين أصحاب الكتب الأعلى سعراً. سنتعرف على أعلى 20 مؤلفاً منهم.
البيانات = data.sort_values(['Rating'],axis=0, ascending=False)[:15]
البيانات
سنرى الآن الكتب والمؤلفين الأعلى تقييمًا فيما يتعلق بتقييم العملاء. سنقوم بتصفية هؤلاء المؤلفين والكتب التي تحتوي على أقل من 1000 تقييم، حتى نحصل على أشهر المؤلفين.
البيانات = df[df['Customers_Rated] > 1000]
البيانات = data.sort_values(['Rating'],axis=0, ascending=False)[:15]
البيانات
دعنا نتصور الكتب الأعلى تقييماً,
p = figure(x_range=data.iloc[:,0]، plot_width=800، plot_height=600، title="الكتب الأعلى تقييماً مع أكثر من 1000 تقييم من العملاء"، tool_location=None، tool=""")
p.vbar(x=data.iloc[:,0]، top=data.iloc[:,2]، العرض=0.9)
p.xgrid.grid_line_color = لا شيء
p.y_range.start = 0
p.xaxis.major_label_orientation = math.pi/2
إظهار(p)
كلما زادت التقييمات، زادت ثقة العملاء. لذلك سيكون الأمر أكثر إقناعاً ومصداقية إذا أضفنا المؤلفين والكتب الأكثر تقييماً من قبل العملاء.
من bokeh.transform استيراد عامل_cmap من bokeh.transform
من bokeh.models استيراد أسطورة
من bokeh.palettes استيراد Dark2_5 كلوحة ألوان
استيراد itertools
من bokeh.palettes استيراد d3
تحتوي#الألوان على قائمة بالألوان التي يمكن استخدامها في المخططات
الألوان = itertools.cycle(palette)
لوحة الألوان = d3['Category20'][20]
index_cmap = factor_cmap("المؤلف"، لوحة الألوان = لوحة الألوان,
العوامل=بيانات["المؤلف"]))
p = الشكل(plot_width=700،plot_height=700، العنوان = "أفضل المؤلفين: التقييم مقابل تقييم العملاء"))
p.مبعثر('تصنيف'،'الزبائن_مصنفين'، المصدر=بيانات,ملء_ألفا=0.6، ملء_اللون=index_cmap، الحجم=20، وسيلة الإيضاح='مؤلف')
p.xaxis.axis.axis_label = 'RATING'
p.yaxis.axis.axis_label = ' تقييم العملاء'
p.legend.location = 'top_left'
إظهار(p)
في هذه المقالة، رأينا ما هو كشط الويب من خلال أخذ حالة استخدام مهمة جدًا لاستخراج البيانات من أمازون. لم نستخرج البيانات من صفحات أمازون المختلفة فحسب، بل قمنا أيضًا بتصور البيانات باستخدام مكتبات بايثون المختلفة. كانت هذه المقالة مقالة متقدمة المستوى وقد يكون من الصعب فهمها للأشخاص الجدد في مجال كشط الويب وتصور البيانات. بالنسبة لهم، أود أن أقترح الذهاب إلى مقالات حزمة المبتدئين المتاحة على ProxyScrape. كشط الويب هو تقنية مفيدة للغاية يمكن أن تعطي دفعة لأعمالك. هناك أيضًا بعض الأدوات المدفوعة المذهلة المتوفرة في السوق، ولكن لماذا تدفع لهم عندما يمكنك برمجة الكاشطة الخاصة بك. قد لا يعمل الرمز الذي كتبناه أعلاه مع كل صفحة ويب لأن بنية الصفحة قد تختلف. ولكن إذا كنت قد فهمت المفاهيم المذكورة أعلاه، فلن تكون هناك عقبات أمامك لكشط أي صفحة ويب عن طريق تعديل الكود وفقًا لهيكلها. آمل أن تكون هذه المقالة ممتعة للقراء. هذا كل شيء. أراكم في المقالات القادمة!