तालिकाएँ और लिंक स्क्रैप करना
HTML तालिकाओं को डेटा फ़्रेम में पार्स करें और किसी पेज के सभी हाइपरलिंक एकत्र करें।
तालिकाएँ और लिंक स्क्रैप करना, CoddyKit पर R Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह R Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। R Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
वेब पृष्ठों में HTML तालिकाएँ
HTML तालिकाएँ (<table>) स्क्रैपिंग के लिए सबसे सुविधाजनक लक्ष्य हैं, क्योंकि उनमें पहले से संरचना होती है। rvest का html_table() उन्हें सीधे R डेटा फ़्रेम में बदल देता है और शीर्षकों को अपने-आप संभालता है।
library(rvest)
html <- read_html('
<table>
<thead><tr><th>Country</th><th>GDP</th><th>Pop</th></tr></thead>
<tbody>
<tr><td>USA</td><td>25T</td><td>330M</td></tr>
<tr><td>China</td><td>18T</td><td>1400M</td></tr>
</tbody>
</table>
')
# html_table converts to data frame
tbl <- html_table(html_element(html, 'table'))
class(tbl) # 'data.frame'
names(tbl) # c('Country', 'GDP', 'Pop')
nrow(tbl) # 2
print(tbl)पूरे पृष्ठ पर html_table()
जब किसी पृष्ठ में कई तालिकाएँ हों, तब सभी तालिकाएँ प्राप्त करने के लिए html_elements() (बहुवचन) का उपयोग कीजिए। फिर प्राप्त नोडसमूह पर html_table() लगाइए, जिससे डेटा फ़्रेम की सूची मिलेगी। आवश्यक तालिका को उसके अनुक्रमांक से चुनिए।
library(rvest)
html <- read_html('
<table id="t1"><tr><th>A</th></tr><tr><td>1</td></tr></table>
<table id="t2"><tr><th>X</th><th>Y</th></tr>
<tr><td>10</td><td>20</td></tr></table>
')
# Get ALL tables as a list of data frames
tables <- html_table(html_elements(html, 'table'))
length(tables) # 2
# First table
tables[[1]]
# Second table
tables[[2]]
# Select a specific table by its id
table2 <- html_table(html_element(html, '#t2'))
print(table2)तालिका डेटा को साफ़ करना
वेबसाइटों से स्क्रैप की गई तालिकाओं में अक्सर अव्यवस्थित शीर्षक, मिले हुए सेल या अतिरिक्त रिक्त स्थान होते हैं। शीर्षकों के लिए janitor::clean_names() और सेल मानों को साफ़ करने के लिए dplyr/stringr के सामान्य संचालन का उपयोग कीजिए।
library(rvest)
html <- read_html('
<table>
<tr><th>Product Name</th><th>Price (USD)</th><th>In Stock?</th></tr>
<tr><td> Widget A </td><td>$12.50</td><td>Yes</td></tr>
<tr><td>Gadget B</td><td>$7.99</td><td>No</td></tr>
</table>
')
df <- html_table(html_element(html, 'table'))
# Clean column names
names(df) <- c('product', 'price', 'in_stock')
# Strip whitespace and dollar signs
df$product <- trimws(df$product)
df$price <- as.numeric(gsub('[$]', '', df$price))
df$in_stock <- df$in_stock == 'Yes'
print(df)किसी पृष्ठ के सभी लिंक स्क्रैप करना
लिंक एंकर (<a>) टैग होते हैं, जिनमें href एट्रिब्यूट होते हैं। सभी एंकर प्राप्त करने के लिए html_elements(page, 'a'), URL के लिए html_attr('href') और लिंक पाठ के लिए html_text2() का उपयोग कीजिए।
library(rvest)
html <- read_html('
<div>
<a href="/about">About Us</a>
<a href="/products">Products</a>
<a href="https://partner.com" rel="external">Partner</a>
<a>No href link</a>
</div>
')
# Get all anchor elements
anchors <- html_elements(html, 'a')
# Extract text and href
link_text <- html_text2(anchors)
link_href <- html_attr(anchors, 'href')
data.frame(text = link_text, href = link_href)
# Note: last row has NA hrefअर्थपूर्ण लिंक फ़िल्टर करना
वास्तविक पृष्ठों में नेविगेशन लिंक, फ़ुटर लिंक और आंतरिक एंकर उन लिंक के साथ मिले होते हैं जिन्हें आप वास्तव में चाहते हैं। NA, एंकर (#) और javascript: लिंक हटाकर तथा प्रतिरूप मिलान लागू करके केवल प्रासंगिक URL रखिए।
library(rvest)
html <- read_html('
<div>
<a href="/article/1">Article One</a>
<a href="/article/2">Article Two</a>
<a href="#top">Back to top</a>
<a href="javascript:void(0)">JS link</a>
<a href="/article/3">Article Three</a>
</div>
')
anchors <- html_elements(html, 'a')
hrefs <- html_attr(anchors, 'href')
texts <- html_text2(anchors)
# Keep only article links
article_idx <- grepl('^/article/', hrefs) & !is.na(hrefs)
article_links <- data.frame(
text = texts[article_idx],
href = hrefs[article_idx]
)
print(article_links)सापेक्ष से पूर्ण URL तक
स्क्रैप किए गए href मान अक्सर /page जैसे सापेक्ष पथ होते हैं। आधार URL जोड़कर उन्हें पूर्ण URL में बदलिए। xml2::url_absolute() फ़ंक्शन यह कार्य सही ढंग से संभालता है।
library(rvest)
base_url <- 'https://books.toscrape.com'
html <- read_html('
<ul>
<li><a href="/catalogue/book1">Book One</a></li>
<li><a href="/catalogue/book2">Book Two</a></li>
<li><a href="https://external.com/book">External</a></li>
</ul>
')
hrefs <- html_attr(html_elements(html, 'a'), 'href')
# xml2::url_absolute resolves relative + keeps absolute
abs_urls <- xml2::url_absolute(hrefs, base = base_url)
abs_urls
# 'https://books.toscrape.com/catalogue/book1'
# 'https://books.toscrape.com/catalogue/book2'
# 'https://external.com/book' <- kept as-isलक्षित लिंक स्क्रैपिंग
सभी लिंक स्क्रैप करके फ़िल्टर करने के बजाय, केवल आवश्यक लिंक को लक्षित करने के लिए विशिष्ट CSS चयनकर्ताओं का उपयोग कीजिए। सटीकता के लिए तत्व संदर्भ और एट्रिब्यूट चयनकर्ताओं को मिलाकर उपयोग कीजिए।
library(rvest)
html <- read_html('
<nav class="breadcrumb">
<a href="/">Home</a> > <a href="/books">Books</a>
</nav>
<ul class="products">
<li><a href="/books/1" class="prod-link">Clean Code</a></li>
<li><a href="/books/2" class="prod-link">Refactoring</a></li>
</ul>
<footer>
<a href="/privacy">Privacy</a>
</footer>
')
# Target ONLY product links (not nav or footer)
prod_links <- html_elements(html, 'ul.products a.prod-link')
data.frame(
title = html_text2(prod_links),
url = html_attr(prod_links, 'href')
)तालिका और लिंक डेटा का विलय
अक्सर तालिका के सेल में लिंक होते हैं। अधिक समृद्ध डेटा फ़्रेम बनाने के लिए पाठ्य मानों हेतु html_table() और अंतर्निहित लिंक के लिए लक्षित html_attr() को मिलाकर उपयोग कीजिए।
library(rvest)
html <- read_html('
<table class="results">
<tr><th>Book</th><th>Author</th></tr>
<tr>
<td><a href="/b/1">Clean Code</a></td>
<td>Robert Martin</td>
</tr>
<tr>
<td><a href="/b/2">Refactoring</a></td>
<td>Martin Fowler</td>
</tr>
</table>
')
# Get text from table
df <- html_table(html_element(html, 'table'))
# Get links embedded in first column
links <- html_attr(html_elements(html, 'table td a'), 'href')
df$url <- links
print(df)html_table() का fill पैरामीटर
HTML तालिकाओं में कभी-कभी अनुपस्थित सेल या अनियमित रूप से संरचित पंक्तियाँ होती हैं। html_table() में fill=TRUE पैरामीटर त्रुटि उत्पन्न करने के बजाय अनुपस्थित मानों को NA से भर देता है।
library(rvest)
html <- read_html('
<table>
<tr><th>Name</th><th>Score</th><th>Grade</th></tr>
<tr><td>Alice</td><td>95</td><td>A</td></tr>
<tr><td>Bob</td><td>80</td></tr>
</table>
')
# Without fill=TRUE this may error on uneven rows
df <- html_table(html_element(html, 'table'), fill = TRUE)
print(df)
# Name Score Grade
# Alice 95 A
# Bob 80 <NA>
# fill=TRUE is safe even when rows are uniform
is.na(df[2, 'Grade']) # TRUEचित्र स्रोत निकालना
चित्रों में src एट्रिब्यूट होते हैं (और कभी-कभी धीमे लोड होने के लिए data-src भी होता है)। डाउनलोड या सूचीकरण के लिए चित्रों के URL निकालने हेतु वही html_attr() तरीका उपयोग कीजिए।
library(rvest)
html <- read_html('
<div class="gallery">
<img src="/img/photo1.jpg" alt="Sunset">
<img src="/img/photo2.jpg" alt="Mountains">
<img data-src="/img/lazy.jpg" class="lazy" alt="Lake">
</div>
')
# Regular images
images <- html_elements(html, 'img')
srcs <- html_attr(images, 'src')
alts <- html_attr(images, 'alt')
data.frame(alt = alts, src = srcs)
# For lazy-loaded images check data-src
lazy_src <- html_attr(html_element(html, '.lazy'), 'data-src')
lazy_src # '/img/lazy.jpg'स्क्रैप किया गया डेटा सहेजना
तालिकाओं और लिंक को डेटा फ़्रेम में स्क्रैप करने के बाद परिणामों को write.csv() या readr::write_csv() से सहेजिए। डेटा के स्रोत का रिकॉर्ड रखने के लिए हमेशा समय-मुद्रा या स्रोत URL शामिल कीजिए।
library(rvest)
html <- read_html('
<table>
<tr><th>Product</th><th>Price</th></tr>
<tr><td>Widget</td><td>9.99</td></tr>
<tr><td>Gadget</td><td>14.50</td></tr>
</table>
')
df <- html_table(html_element(html, 'table'))
# Add metadata
df$scraped_at <- Sys.time()
df$source_url <- 'https://example.com/products'
# Save to CSV
# write.csv(df, 'products.csv', row.names = FALSE)
print(df)
cat('Data ready for analysis or storage')त्वरित जाँच
rvest के साथ HTML तालिकाओं और लिंक की स्क्रैपिंग की अपनी समझ जाँचिए।
पुनरावलोकन: तालिकाएँ और लिंक
मुख्य बातें: html_table() HTML तालिकाओं को अपने-आप डेटा फ़्रेम में बदलता है; अनियमित तालिकाओं के लिए fill=TRUE का उपयोग कीजिए। लिंक के लिए सभी एंकर html_elements('a') से, पाठ html_text2() से और URL html_attr('href') से प्राप्त कीजिए। सापेक्ष URL को xml2::url_absolute() से पूर्ण URL में बदलिए। प्रतिरूप के आधार पर अनचाहे लिंक फ़िल्टर कीजिए। अधिक समृद्ध डेटासेट के लिए तालिका के पाठ और अंतर्निहित लिंक URL का विलय कीजिए।
library(rvest)
# Table scraping pattern:
# tables <- html_table(html_elements(page, 'table'))
# df <- tables[[1]]
# Link scraping pattern:
# links <- html_elements(page, 'a[href]')
# data.frame(
# text = html_text2(links),
# url = xml2::url_absolute(
# html_attr(links, 'href'),
# base = base_url
# )
# )
# Combine: scrape table text AND embedded link URLs
cat('Tables + links = most of what the web offers')एआई शिक्षक के साथ R सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 43
- पाठ
- 159
अक्सर पूछे जाने वाले प्रश्न
क्या “तालिकाएँ और लिंक स्क्रैप करना” पाठ निःशुल्क है?
हाँ — R Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “तालिकाएँ और लिंक स्क्रैप करना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। R Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“तालिकाएँ और लिंक स्क्रैप करना” में मैं क्या सीखूँगा?
HTML तालिकाओं को डेटा फ़्रेम में पार्स करें और किसी पेज के सभी हाइपरलिंक एकत्र करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ R Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या R Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर R Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“तालिकाएँ और लिंक स्क्रैप करना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस R Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर R Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- HTML संरचना और CSS चयनकर्ता
- html_element() और html_text() की मूल बातें
- तालिकाएँ और लिंक स्क्रैप करना
- पृष्ठांकन और अनेक पेज संभालना