பைதான் ஒரு இணையதுணுக்காக செயல்படுத்தி பயனடைக

பைதானின் இணையதுணுக்கு(web scraper) என்பது பல்வேறு இணையதளப் பக்கங்களின் உள்ளடக்கங்களைப் பதிவிறக்கம் செய்து அவற்றிலிருந்து தரவைப் பிரித்தெடுக்கின்ற ஒரு பயன்பாட்டுமென்பொருள் அல்லது உரைநிரல் ஆகும்.இதனை துவக்கிபயன்படுத்திகொள்வதற்கான படிமுறைபின்வருமாறு.

 

 

 

 

 

 

 

படம் 1: இணையஉரைநிரலின் வெவ்வேறு நிலைகளின் திட்ட வரைபடம்
படிமுறை1:இணையதளத்திலிருந்து உள்ளடக்கங்களைப் பதிவிறக்கம்செய்தல்
இந்தப் படிநிலையில், URL இலிருந்து கோரப்பட்ட இணையதளபக்கத்தை ஒரு இணைய துணுக்கு ஆனது படிக்கிறது.
படிமுறை 2: தரவைப் பிரித்தெடுத்தல்
பின்னர் இவ்விணைய துணுக்கு ஆனது கோரப்பட்ட உள்ளடக்கங்களிலிருந்து கட்டமைக்கப்பட்ட தரவை அலசிஆய்வுசெய்கிறது பிரித்தெடுக்கிறது.
படிமுறை 3: தரவைச் சேமித்தல்
அதன்பின்னர், இணைய துணுக்கால் பிரித்தெடுக்கப்பட்ட தரவை CSVஇல், JSONஇல் அல்லது ஒரு தரவுத்தளத்தில் சேமிக்கிறது.
படிமுறை 4: தரவை பகுப்பாய்வு செய்தல்
நன்கு நிறுவுகைசெ.ய்யப்பட்ட வடிவமைப்புகளிலிருந்து, இணைய துணுக்கு ஆனது சேமிக்கப்பட்ட தரவின் பகுப்பாய்வைத் தொடங்குகிறது.
பைத்தானின் இணையதுணுக்கினை requests , BeautifulSoup ஆகிய இரண்டு எளிய நூலக தகவமைவுகளின் மூலம் பயன்படுத்திகொள்ளத்துவங்கலாம்
கோரிக்கைகள் (requests) எனும் தகவமைவு
HTTP இன் கோரிக்கைகளை உருவாக்குதல் , பதில்களைப் பெறுதல் ஆகியவை கோரிக்கைகளின் நூலகத்தின் உதவியுடன் செய்யப்படுகின்றன. கோரிக்கை , அவற்றின் பதில் ஆகியவற்றின் மேலாண்மையானது பைதான் கோரிக்கைகளில் உள்ளமைக்கப்பட்ட செயலியின் மூலம் கையாளப்படுகிறது. இந்த தகவமைவு core பைத்தானுடன் அனுப்பப்படுவதில்லை என்பதால், தனித்தனியாக pip இல் நிறுவுகைசெய்வது அவசியமாகும் அதற்கான கட்டளைவரிபின்வருமாறு.
pip install requests
GETஎனும் கோரிக்கையை உருவாக்குதல்
கொடுக்கப்பட்ட URI க்கு GET, POST, PUT, PATCH அல்லது HEAD ஆகிய கோரிக்கைகளை அனுப்புவதற்கு பைதான் கோரிக்கைகளின் தகவமைவுகள் சில உள்ளமைக்கப்பட்ட வழிமுறைகளுடன் உதவிக்குவருகின்றன. ஒரு HTTP கோரிக்கையானது தரவை குறிப்பிட்டஒரு சேவையகத்திற்கு அனுப்பலாம் அல்லது குறிப்பிட்ட URI இலிருந்து பெறலாம். இது வாடிக்கையாளர்-சேவையாளர், கோரிக்கை-பதில் ஆகிய நெறிமுறைகளின்அடிப்படையில் செயல்படுகிறது. GET எனும் வழிமுறை , கொடுக்கப்பட்ட URI ஆகியவற்றினைப் பயன்படுத்தி குறிப்பிட்ட சேவையகத்திலிருந்து தகவல் பெறகிறது. பயனாளரின் தரவுஆனது மறைகுறியாக்கம் செய்யப்பட்டு, GET எனும் வழிமுறை மூலம் அனுப்பப்படுகின்றது முன் பக்க கோரிக்கையில் சேர்க்கப்படுகின்றது.
import requests

Making a GET request in Python

r = requests.get(‘https://www.tutorialspoint.com/python-for-beginners-python-3/index.asp’)

check the status code for the response received

success code – 200

print(r.status_code)
#print header
print(r.headers)

இதன்வெளியீடுபின்வருமாறு:
200
{‘Content-Encoding’: ‘gzip’, ‘Accept-Ranges’: ‘bytes’, ‘Access-Control-Allow-Credentials’: ‘true’, ‘Access-Control-Allow-Headers’: ‘X-Requested -With, Content-Type, Origin, Cache-Control, Pragma, Authorization, Accept, Accept-Encoding’, ‘Access-Control-Allow-Methods’: ‘GET, POST, PUT, P ATCH, DELETE, OPTIONS’, ‘Access-Control-Allow-Origin’: ‘*, *;’, ‘Access-Control-Max-Age’: ‘1000’, ‘Age’: ‘515359’, ‘Cache-Control’: ‘max-age=25 92000’, ‘Content-Type’: ‘text/html; charset=UTF-8’, ‘Date’: ‘Thu, 25 May 2023 08:05:00 GMT’, ‘Expires’: ‘Sat, 24 Jun 2023 08:05:00 GMT’, Modified’: ‘Fri, 19 May 2023 08:55:43 GMT’, ‘Server’: ‘ECAcc (blr/D141)’, ‘Vary’: ‘Accept-Encoding’, ‘X-Cache’: ‘HIT’, ‘X-Frame-Options’: ‘SAME ORIGIN, SAMEORIGIN’, ‘X-Version’: ‘OCT-10 V1’, ‘X-XSS-Protection’: ‘1; mode=block’, ‘Content-Length’: ‘14119’}
இதில் பதில்செயலான ‘r’ என்பது தரவுகளை இயல்பாக்குவதற்கு அல்லது சிறந்த குறிமுறைவரிகளை வழங்குவதற்கு உதவுகின்றது. இது ஏராளமான வழிமுறை களையும் இயல்புகளையும் கொண்டதொரு சக்திவாய்ந்ததாகும். எடுத்துக்காட்டாக, r.status_code , r.header ஆகியவை வழங்கிய தற்போதைய. நிலையின் குறிமுறைவரிகளைப் பயன்படுத்தி கோரிக்கை சரியாகச் செயல்படுத்தப்பட்டதா இல்லையா என்பதை ஒருவர் மதிப்பிடலாம்.
BeautifulSoup எனும் தகவமைவிலான நூலகம்
BeautifulSoup எனும் தகவமைவானது HTML, XML கோப்புகளிலிருந்து தகவல்களைப் பிரித்தெடுக்கப் பயன்படுகிறது. இது ஆய்வுசெய்வதற்கும், தேடுவதற்கும், புதுப்பிப்பதற்குமான கருவிகளுடன் ஒரு பாகுபடுத்திடுகின்ற மரத்தையும் வழங்குகிறது. இது இணையதளபக்கத்தின் மூலக் குறிமுறைவரிகளிலிருந்து ஒரு பாகுபடுத்திடுகின்ற மரத்தை உருவாக்குகிறது, இது தரவை மிகவும் தர்க்கரீதியாகவும் படிநிலையாகவும் ஒழுங்கமைக்கப் பயன்படுகிறது.
இந்த தகவமைவின் நோக்கம் திரைகாட்சியின்துணுக்கு போன்ற விரைவான தலைகீழ் பணிகளைச் செய்வதாகும். இது மூன்று இயல்புகளால் பயனுள்ளதாக இருக்கின்றது.
1. இது ஒரு உரையை பகுப்பாய்வு செய்வதற்கும் தேவையான பொருட்களை உரையிலிருந்து பிரித்தெடுப்பதற்கும் சில எளிய , குறைந்தபட்ச குறிமுறைவரிகளை வழங்குகிறது. இது ஒரு பாகுபடுத்தி மரத்தை இயக்கு வதற்கும், கண்டறிவதற்கும், மாற்றுவதற்கும் ஆன வசதிகளை வழங்குகிறது.
2. இது தானாகவே வெளியீடுகளை UTF-8 ஆக மாற்றிடுகின்றது ஒருங்கு குறியீட்டில் பதிவுகளைப் பெறுகிறது.
3. LXML, HTML போன்ற பாகுபடுத்திகள், நெகிழ்வுத்தன்மைக்காக பல்வேறு பாகுபடுத்தும் உத்திகள் அல்லது செயல்படுத்திடுகின்ற செயல்திறன் ஆகியவற்றைப் பரிசோதிக்கப் பயன்படுத்தப்படுகின்றன.
இந்த தகவமைவானது கோர் பைத்தானுடன் அனுப்பப்படுவதில்லை என்பதால் தனியாக pip இல் நிறுவுகைசெய்வது அவசியமாகும் அதற்கான கட்டளைவரி பின்வருமாறு.
pip install beautifulsoup4
இலக்கு வலைத்தளத்தை ஆய்வு செய்தல்
ஒரு உரைநிரல் செயல்திட்டத்தை உருவாக்குவதற்குமுன், இலக்கு இணையதளத்தை ஆய்வு செய்வது அவசியம். இலக்குஇணையதளப் பக்கத்தில் இடம்சுட்டியை வைத்து சுட்டியின் வலது புறபொத்தானை தெரிவுசெய்து சொடுக்குக உடன்விரியும் சூழ்நிலைபட்டியில் Developer tools என்பதைத் தேர்ந்தெடுப்பதன் மூலம் இதைச் செய்யலாம்.
அதற்காக இணைய உலாவியின் Developer tools எனும் பொத்தானை தெரிவுசெய்து சொடுக்குக பிறகு, திரையில்விரிந்த இணைய உலாவியின் உள்ளக குறிமுறைவரிகளை ஒருவர் ஆய்வு செய்யலாம். இந்தக் கட்டுரைக்கான இணைய உலாவியாக Chrome எனும் இணைய உலாவியை எடுத்துகொள்ளப்படுிகின்றது.
Developer tools எனும்கருவியானது தளத்தின் ஆவணப் பொருள் மாதிரியைப் (DOM) காட்சியாக காண அனுமதிக்கின்றது. அந்த காட்சியில் இருந்து, அவ்விணையதள பக்கத்தின் HTML குறிமுறைவரிகளின் கட்டமைப்பை ஒருவர் ஆய்வுசெய்திடலாம்.

படம் 2: Google Chrome இல் Developer tools
HTML ஐ பாகுபடுத்திஆய்வுசெய்தல்
இணையதளபக்கத்தின் உரைநிரலை ஆய்வுசெய்த பிறகு, HTMLஇன் மூலக் குறிமுறைவரிகளை சில பயனுள்ள தகவலிற்காக அலசிஆய்வுசெய்திடலாம். அதற்கு, தேவையான பாகுபடுத்தியைக் குறிப்பிடுவதன் மூலம் BeautifulSoup எனும் ஒரு பொருளை உருவாக்குவது அவசியமாகும். இந்த தகவமைவானது html5lib, lxml , html.parser போன்ற HTML பாகுபடுத்துகின்ற நூலகங்களின் மேல் கட்டமைக்கப் பட்டிருப்பதால், இவ்வனைத்து நூலகங்களையும் இந்த தகவமைவுடன் சேர்த்து அழைக்கலாம். இந்த தகவமைவின் மூலம், கோரப்பட்ட இணையப் பக்கத்தை அதன் அசல் HTML இணையதளபக்கமாக அலசி ஆராயமுடியும். அதற்கான எடுத்துக்காட்டுகுறிமுறைவரிகள்பின்வருமாறு:
import requests
from bs4 import BeautifulSoup

GET request

r = requests.get(‘https://flask-bulma-css.appseed.us/’)

check the status code for the response received

print(r.status_code)

Parsing the HTML

htmlObj = BeautifulSoup(r.content, ‘html.parser’)
print(htmlObj.prettify())
இதனுடைய வெளியீடு பின்வருமாறு:
200
<!DOCTYPE html>
<html lang=”en”>
<head>
<!– Required meta tags always come first –>
<meta charset=”utf-8”/>
<meta content=”width=device-width, initial-scale=1, shrink-to-fit=no” name=”viewport”/>
<meta content=”ie=edge” http-equiv=”x-ua-compatible”/>
<title>
Flask Bulma CSS – BulmaPlay Open-Source App | AppSeed App Generator
மேலும் பகுப்பாய்விற்கு, HTML பக்கத்தை வெவ்வேறு பெற்றோர்களின் , பிள்ளைகளின் இனங்களாக உருப்படி வாரியாக அலசிஆராய்வது இயலும் இதற்கான குறிமுறைவரிகள் பின்வருமாறு.
import requests
from bs4 import BeautifulSoup

Making a GET request

r = requests.get(‘https://flask-bulma-css.appseed.us/’)

Parsing the HTML

htmlobj = BeautifulSoup(r.content, ‘html.parser’)

Getting the title tag

print(htmlobj.title)

Getting the name of the tag

print(htmlobj.title.name)

Getting the name of parent tag

print(htmlobj.title.parent.name)

use the child attribute to get

The name of the child tag

print(htmlobj.title.children.class)
இதனுடைய வெளியீடு பின்வருமாறு:
<title>Python Tutorial | Learn Python Programming</title>
title
head
<class ‘list_iterator’>
HTML பக்கத்தின் உறுப்புகளைக் கண்டறிதல்
இப்போது, HTML உரையிலிருந்து சில மதிப்புமிக்க தகவல்களைப் பிரித்தெடுக்க விரும்புகிறோம்.htmlobj object என்பதில் உள்ள மீட்டெடுக்கப்பட்ட உள்ளடக்கம் சில வலைபின்னல் கட்டமைப்புகளைக் கொண்டிருக்கலாம். இந்த வலைபின்னல் கட்டமைப்புகளிலிருந்து, வலைப்பக்கத்திலிருந்து மதிப்புமிக்க தகவலைப் பெற வெவ்வேறு HTMLஇன் உறுப்புகளை அலசிஆராயலாம்.
இனங்களின் வாரியாக HTML உறுப்பினை தேடுதல்
class tag entry உடன் div tag இருப்பதை படம் 3ல் காணலாம். குறியொட்டினைக் கண்டறிவதற்காக found class எனும் வழிமுறையைப் பயன்படுத்தலாம். இந்த இனத்தில் குறிப்பிட்ட பண்பியல்புடன் குறிப்பிட்ட குறியொட்டினைத் தேடுகிறது. இந்த நிகழ்வில், இது இனத்தின்நுழைவுஉள்ளடக்கத்துடன் ஒவ்வொரு divஐயும் கண்டறிகின்றது. இணையதளபக்கத்தின் அனைத்து தகவல்களும் நம்மிடம் இருந்தாலும், <a> தவிர மற்ற அனைத்து உறுப்புகளும் நீக்கப்பட்டிருப்பதை காணலாம்.
இணைய developer toolஎனும் கருவியைப் பயன்படுத்தி வலைப்பக்க உரையை ஆய்வு செய்திடலாம் அதற்கான குறிமுறைவரிகள் பின்வருமாறு

படம் 3: உலாவியின் developer toolஎனும் கருவியைப் பயன்படுத்தி இணையப் பக்க உரையை ஆய்வு செய்தல்
import requests
from bs4 import BeautifulSoup

Making a GET request

r = requests.get(‘https://flask-bulma-css.appseed.us/’)

Parsing the HTML

htmlobj = BeautifulSoup(r.content, ‘html.parser’)
s = htmlobj.find(‘div’, class_=”sidebar”)
content = s.find_all(“a”)
print(content)
இதனுடைய வெளியீடு பின்வருமாறு:
[<a class=”sidebar-close” href=”javascript:void(0);”><i data-feather=”x”></i></a>, <a href=”#”><span class=”fafa-info-circle”></span>About</a>,<a href=”https://github.com/app-generator/flask-bulma-css” target=”_blank”>Sources</a>, <a href=”https://blog.appseed.us/bulmaplay-built-with-flask-and-bulma-css/” target=”_blank”>Blog Article</a>, <a href=”#”><span class=”fa fa-cog”></span>Support</a>, <a href=”https://discord.gg/fZC6hup” target=”_blank”>Discord</a>, <a href=”https://appseed.us/support” target=”_blank”>AppSeed</a>]
HTML உறுப்புகளை சுட்டிகாண்பித்தல்
மேலே கூறிய எடுத்துக்காட்டில், இனத்தின் பெயரைப் பயன்படுத்தி உறுப்புகளை அடையாளம் கண்டோம்; சுட்டிகளைப் (IDs) பயன்படுத்தி பொருட்களை எவ்வாறு சுட்டிகாண்பிப்பபது என்பதை இப்போதுகாண்போம். ஒரு இணைய பக்கத்தின் cloned-navbar-menuஎனும் பட்டியலின் உள்ளடக்கத்தைப் பாகுபடுத்துவதன் மூலம் இந்த செயல்முறையைத் தொடங்குவோம். ‘cloned-navbar-menu’ என்ற குறியொட்டைத் தீர்மானிக்க இணையதளத்தை ஆராய்ந்திடுக. பின்னர், இறுதியாக, <a> குறியொட்டின் கீழ் அனைத்து பாதைகளின் குறியொட்டிகளையும் தேடிடுக அதற்கான குறிமுறைவரிகள் பின்வருமாறு.
import requests
from bs4 import BeautifulSoup

Making a GET request

r = requests.get(‘https://flask-bulma-css.appseed.us/’)

Parsing the HTML

htmlObj = BeautifulSoup(r.content, ‘html.parser’)

Finding by id

s = htmlObj.find(‘div’, id=”cloned-navbar-menu”)

Getting the “cloned-navbar-menu”

a = s.find(‘a’ , class_=”navbar-item is-hidden-mobile”)

All the paths under the above <a>

content = a.find_all(‘path’)
print(content)
இதனுடைய வெளியீடு பின்வருமாறு:
[<path class=”path1” d=”M 300 400 L 700 400 C 900 400 900 750 600 850 A 400 400 0 0 1 200 200 L 800 800”></p ath>, <path class=”path2” d=”M 300 500 L 700 500”></path>, <path class=”path3” d=”M 700 600 L 300 600 C 100 600 100 200 400 150 A 400 380 0 1 1 200 800 L 800 200”></path>]
ல்வேறு இணையமுகவரிகளின்URL பட்டியலை மீண்டும் மீண்டும் செய்தல்
பல்வேறு இணையதளபக்கங்களை துணுக்குகளாக்க, ஒவ்வொரு URLஉம் தனித்தனி துணுக்காக செய்யப்பட வேண்டும், மேலும் இதுபோன்ற ஒவ்வொரு வலைப்பக்கத்திற்கும் ஒரு உரையை கையால் குறிமுறைவரிகள் செய்ய வேண்டும்.
இந்த URLகளின் பட்டியலை உருவாக்கி அதன் மீது மடக்கி மடக்கிசெய்க. அந்தப் பக்கங்களின் தலைப்புகளைப் பிரித்தெடுக்க ஒவ்வொரு பக்கத்திற்கும் குறிமுறை வரிகளை உருவாக்க வேண்டிய அவசியமில்லை; அதற்கு பதிலாக, பட்டியலின் கூறுகளை மீண்டும் செய்க. எடுத்துக்காட்டுக் குறிமுறவரிகளைப் பின்பற்றுவதன் மூலம் அதை அடையலாம்.அதற்கான குறிமுறைவரிகள் பின்வருமாறு.
import requests
from bs4 import BeautifulSoup as bs
URL = [‘https://www.researchgate.net’, ‘https://www.linkedin.com’]
for url in range(1,2):
req = requests.get(URL[url])
htmlObj = bs(req.text, ‘html.parser’)
titles = htmlObj.find_all(‘titles’,attrs={‘class’,’head’})
if titles:
for i in range(1,7):
if url+1 > 1:
print(titles[i].text)
else:
print(titles[i].text)
இணைய உள்ளடக்கங்களை CSV கோப்பில் சேமித்தல்
இணையப்பக்கங்களை துணுக்குகளாக செய்த பிறகு, ஒரு CSV கோப்பில் உறுப்புகளை சேமிக்க முடியும். CSV கோப்பில் tag-value எனும்அகராதி பட்டியலை சேமிப்பதைக் கருத்தில் கொள்க. CSV எனும் தகவமைவினைப் பயன்படுத்தி அகராதிபட்டியலின் உறுப்புகள் CSV எனும்கோப்பில் எழுதப்படுகின்றது. சிறந்த புரிதலுக்கு பின்வருமாறான எடுத்துகாட்டினை காண்க.
எடுத்துக்காட்டு: Python’s BeautifulSoup இலிருந்து ஒரு CSV கோப்பில் தரவைச் சேமித்தலிற்கான குறிமுறைவரிகள் பின்வருமாறு.:
import re
import requests
from bs4 import BeautifulSoup as bs
import csv

Making a GET request

r = requests.get(‘https://flask-bulma-css.appseed.us/’)

Parsing the HTML

htmlObj = bs(r.content, ‘html.parser’)

Finding by id

s = htmlObj.find(‘div’, id=”cloned-navbar-menu”)

Getting the leftbar

a = s.find(‘a’ , class_=”navbar-item is-hidden-mobile”)

All the li under the above ul

content = a.find_all(‘path’)
lst = []
for i in range(3):
dict = {}
s = str(content[i])
dict[‘path_name’] = re.search(‘class=”path[1-3]”’, s)
dict[‘path_value’] = re.search(‘d=.*>$’, s)
lst.append(dict)
filename = ‘page.csv’
with open(filename, ‘w’, newline=’’) as f:
w = csv.DictWriter(f,[‘path_name’,’path_value’])
w.writeheader()
w.writerows(lst)
f.close()

CSV வெளியீட்டு கோப்பு பின்வருமாறு.

பாதையின் பெயர்(path_name) பாதையின் மதிப்பு(path_value)
<re.Match object; span=(6, 19),

match=’class=”path1”’>

<re.Match object; span=(20, 111),

match=’d=”M 300 400 L 700 400

C 900 400 900 750 600 850 >

<re.Match object; span=(6, 19),

match=’class=”path2”’>

<re.Match object; span=(20, 51),

match=’d=”M 300 500 L 700 500”></path>’>

<re.Match object; span=(6, 19),

match=’class=”path3”’>

<re.Match object; span=(20, 111),

match=’d=”M 700 600 L 300 600 C 100 600 100 200 400 150 >

 

பொதுவாக பைதான்உரைநிரலுடனான ஒரு இணையதுணுக்கு (web scraping) என்பது இணைய தரவு பகுப்பாய்வுக்கான ஒரு சக்திவாய்ந்த கருவியாகும். இதில் சில பயனுள்ள requests , BeautifulSoup ஆகிய நூலக வழிமுறைகள் குறித்து விளக்கமளிக்கப்பட்டுள்ளது. இணையத் தகவலின் தரவு பகுப்பாய்விற்கான இந்த நடைமுறையில் உள்ள தொழில்நுட்பத்தில் நம்முடைய பயணத்தைத் துவங்கவதற்கு இந்ததகவல் பயனுள்ளதாக இருப்பதைக் காணலாம்

%d bloggers like this: