وب اسکرپینگ (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
اگر مطلب بالا برای شما مفید بوده، آموزشهای زیر نیز به شما پیشنهاد میشود:
- آموزش برنامهنویسی R و نرمافزار R Studio
- مجموعه آموزشهای برنامهنویسی پایتون
- مجموعه آموزشهای آمار، احتمالات و دادهکاوی
- مجموعه آموزشهای یادگیری ماشین و بازشناسی الگو
- مجموعه آموزشهای شبکههای عصبی مصنوعی
- مجموعه آموزشهای هوش محاسباتی
^^