وب اسکرپینگ (Web Scraping) با استفاده از R — راهنمای کاربردی

۱۳۸ بازدید
آخرین به‌روزرسانی: ۲۵ اردیبهشت ۱۴۰۲
زمان مطالعه: ۲ دقیقه
وب اسکرپینگ (Web Scraping) با استفاده از R — راهنمای کاربردی

در این مطلب «وب اسکرپینگ» (Web Scraping) با بهره‌گیری از زبان برنامه‌نویسی R آموزش داده می‌شود. در مثالی که در ادامه این مطلب مطرح شده، زبان R برای «وارد کردن» (Import) یک جدول نمونه از این صفحه وب (+) با استفاده از کتابخانه rvest مورد استفاده قرار گرفته است. rvest یکی از کتابخانه‌های استاندارد برای «وب اسکرپینگ» با استفاده از R محسوب می‌شود. در جدول نمونه، ۱۰۰ مشاهده وجود دارد. از کد زیر برای وارد کردن این جدول به محیط R استفاده می‌شود. توجه به این نکته لازم است که اگر هدف وارد کردن داده‌ها در قالب ماتریس باشد، می‌توان از قطعه کدی که در زیر آمده استفاده کرد.

گام اول: وارد کردن جدول وب به عنوان ماتریس

1#We install the "rvest" package to scrape data:
2install.packages("rvest")
3 
4#Load the library:
5library(rvest)
6 
7#Load HTML website:
8html <- read_html("/rvest-web-scraping-using-r/")
9 
10#Include relevant HTML nodes using CSS generator:
11marketingtable <- html_nodes(html, ".odd .column-4 , .odd .column-3 , .odd .column-2 , .odd .column-1, .even .column-4 , .even .column-3 , .even .column-2 , .even .column-1")
12 
13#Determine table length
14length(marketingtable)
15
16#Import table by html_text function
17html_text(marketingtable)

شایان توجه است که کاربر می‌تواند از ابزار «Selector Gadget» (+) برای انتخاب قسمت‌های گوناگون یک صفحه وب که قصد وارد کردن آن‌ها را در R دارد، به صورت بصری استفاده کند. در اینجا، سطرهای زوج و فرد به سادگی در html_nodes با بهره‌گیری از کدی که در بالا آمده تعیین می‌شوند.

نتایج

همانطور که در زیر می‌توان مشاهده کرد، جدول در R وارد شده است.

1> webtable<-html_text(marketingtable)
2> webtable
3 [1] "Observation"         "Marketing Spend"     "Number of campaigns" "Consumer Rating"     "1"                   "9201"               
4 [7] "20"                  "2"                   "2"                   "3759"                "61"                  "6"                  
5[13] "3"                   "11702"               "39"                  "8"                   "4"                   "6990"               
6[19] "84"                  "9"                   "5"                   "1023"                "44"                  "6"

گام ۲: وارد کردن جدول وب به عنوان یک دیتا فریم

هنگامی که بحث انجام تحلیل روی داده‌های وارد شده (Import) می‌شود، ماتریس را به دیتافریم تبدیل می‌کنند. در واقع، داده‌ها را به جدولی تبدیل می‌کنند که برای R قابل خواندن به صورتی باشد که بتواند مستقیما روی آن‌ها محاسبات انجام دهد.

برای انجام این کار، نیاز به تبدیل ساختار ماتریس به یک دیتافریم است.

1#Import rvest library
2library(rvest)
3 
4#Import table from web page
5html <- read_html("/rvest-web-scraping-using-r/")
6 
7#Structure separate variables according to node
8observation <- html_nodes(html, ".odd .column-1, .even .column-1")
9marketingspend <- html_nodes(html, ".odd .column-2, .even .column-2")
10numberofcampaigns <- html_nodes(html, ".odd .column-3, .even .column-3")
11consumerrating <- html_nodes(html, ".odd .column-4, .even .column-4")
12 
13#Define separate variables
14observationvalues<-html_text(observation)
15marketingspendvalues<-html_text(marketingspend)
16numberofcampaignsvalues<-html_text(numberofcampaigns)
17consumerratingvalues<-html_text(consumerrating)
18 
19#Structure data frame and remove heading
20df = data.frame(observationvalues, marketingspendvalues, numberofcampaignsvalues, consumerratingvalues)
21df2<-df[-1, ]
22df2

می‌توان مشاهده کرد که هر ستون (زوج و فرد) با متغیرها جداسازی شده و این متغیرها در تابع data.frame برای تعریف متغیرها به صورت جداگانه درج شده‌اند.

با توجه به اینکه جدول اصلی در منبع دارای «عنوان» (heading) بوده است، با استفاده از [ ,df[-1 عنوان را باید حذف کرد. دیتافریم جدید اکنون در R با نام df2 راه‌اندازی شده و موجود است.

1observationvalues marketingspendvalues numberofcampaignsvalues consumerratingvalues
2                  1                 9201                      20                    2
3                  2                 3759                      61                    6
4                  3                11702                      39                    8
5                  4                 6990                      84                    9
6                  5                 1023                      44                    6

اگر مطلب بالا برای شما مفید بوده، آموزش‌های زیر نیز به شما پیشنهاد می‌شود:

^^

بر اساس رای ۳ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *