JavaScript-સક્ષમ વેબપૃષ્ઠોમાંથી URL ડાઉનલોડ કરવા માટે Python 3.x નો ઉપયોગ કેવી રીતે કરવો

JavaScript

JavaScript-આશ્રિત પૃષ્ઠોમાંથી સામગ્રી ડાઉનલોડ કરવાના પડકારોને દૂર કરવા

વેબપૃષ્ઠો પરથી ડાઉનલોડને સ્વચાલિત કરવા માટે પાયથોનનો ઉપયોગ કરતી વખતે, તમને એવી પરિસ્થિતિઓનો સામનો કરવો પડી શકે છે કે જ્યાં વેબપેજને યોગ્ય કામગીરી માટે JavaScript સક્ષમ કરવાની જરૂર હોય. આ નિરાશાજનક હોઈ શકે છે, જેમ કે પુસ્તકાલયો JavaScript એક્ઝેક્યુશનને હેન્ડલ કરવા માટે રચાયેલ નથી. આવું જ એક ઉદાહરણ JFrog આર્ટિફેક્ટરી છે, જેમાં સામગ્રી પ્રદર્શિત કરવા અથવા ડાઉનલોડની મંજૂરી આપવા માટે JavaScriptની જરૂર છે.

પરંપરાગત વેબ સ્ક્રેપિંગમાં, તમે ઉપયોગ કરી શકો છો અથવા વેબપેજ સામગ્રી મેળવવા માટે. જો કે, જાવાસ્ક્રિપ્ટ પર ખૂબ આધાર રાખતા પૃષ્ઠો માટે, આ લાઇબ્રેરીઓ ઓછી પડે છે કારણ કે તેઓ ગતિશીલ સામગ્રી રેન્ડરિંગને હેન્ડલ કરી શકતા નથી. આમ, આ મર્યાદાને દૂર કરવા માટે તમારે વધુ આધુનિક સાધનોની જરૂર પડશે.

સદનસીબે, પાયથોન JavaScript-સક્ષમ પૃષ્ઠોને હેન્ડલ કરવા માટે વિકલ્પો પ્રદાન કરે છે. જેવા સાધનો અથવા સંપૂર્ણ બ્રાઉઝર ઇમ્યુલેશનને સક્ષમ કરો, જે તમને આવા પૃષ્ઠોથી સામગ્રી સાથે ક્રિયાપ્રતિક્રિયા કરવા અને ડાઉનલોડ કરવાની મંજૂરી આપે છે. આ પુસ્તકાલયો વાસ્તવિક બ્રાઉઝર પર્યાવરણનું અનુકરણ કરી શકે છે જ્યાં JavaScript સંપૂર્ણપણે સમર્થિત છે.

આ લેખ ઉપયોગ કરવાથી કેવી રીતે સ્વિચ કરવું તે વિશે અન્વેષણ કરશે જાવાસ્ક્રિપ્ટ-સક્ષમ વેબપૃષ્ઠોમાંથી સામગ્રીને ઍક્સેસ કરવા અને ડાઉનલોડ કરવા માટે વધુ સક્ષમ લાઇબ્રેરીઓમાં, તમારા ઓટોમેશન કાર્યો સરળતાથી ચાલે તેની ખાતરી કરો.

આદેશ ઉપયોગનું ઉદાહરણ
webdriver.Chrome() સેલેનિયમમાં ક્રોમ બ્રાઉઝર ઇન્સ્ટન્સનો પ્રારંભ કરે છે. JavaScript-ભારે પૃષ્ઠો લોડ કરવા માટે બ્રાઉઝર પર્યાવરણનું અનુકરણ કરવા માટે આ આદેશ નિર્ણાયક છે.
options.add_argument('--headless') હેડલેસ મોડમાં ચલાવવા માટે સેલેનિયમ બ્રાઉઝરને ગોઠવે છે, જેનો અર્થ છે કે બ્રાઉઝર GUI વિના કાર્ય કરે છે. બ્રાઉઝર વિન્ડો પ્રદર્શિત કર્યા વિના સ્વચાલિત સ્ક્રિપ્ટ ચલાવવા માટે આ ઉપયોગી છે.
time.sleep() ચોક્કસ સમય માટે સ્ક્રિપ્ટના અમલને થોભાવે છે. આ સંદર્ભમાં, તે આગળની ક્રિયાઓ સાથે આગળ વધતા પહેલા વેબપેજ પરની JavaScriptને સંપૂર્ણ લોડ થવા માટે સમય આપે છે.
page.content() Pyppeteer માં, આ આદેશ વેબ પેજની સમગ્ર સામગ્રીને પુનઃપ્રાપ્ત કરે છે, જેમાં ગતિશીલ રીતે રેન્ડર કરેલ JavaScript સામગ્રીનો સમાવેશ થાય છે, જે અંતિમ HTML આઉટપુટને બચાવવા માટે જરૂરી છે.
await page.waitForSelector() આગળ વધતા પહેલા ચોક્કસ HTML ઘટક લોડ થવાની રાહ જુએ છે. જાવાસ્ક્રિપ્ટ-ભારે પૃષ્ઠો સાથે કામ કરતી વખતે આ નિર્ણાયક છે તેની ખાતરી કરવા માટે કે સામગ્રીને બહાર કાઢતા પહેલા જરૂરી ઘટકો રેન્ડર કરવામાં આવે છે.
session.get() Requests-HTML નો આ આદેશ આપેલ URL ને GET વિનંતી મોકલે છે. કોઈપણ JavaScript ઘટકો રેન્ડર કરતા પહેલા વેબપેજ મેળવવા માટે તેનો ઉપયોગ અહીં થાય છે.
response.html.render() Requests-HTML લાઇબ્રેરીમાં વેબપેજ પર JavaScript એક્ઝિક્યુટ કરે છે. આ આદેશ સંપૂર્ણ બ્રાઉઝરની જરૂરિયાત વિના JavaScript-સક્ષમ પૃષ્ઠોને હેન્ડલ કરવા માટે કેન્દ્રિય છે.
launch(headless=True) સેલેનિયમ જેવું જ Pyppeteer માં હેડલેસ બ્રાઉઝર લોન્ચ કરે છે. આ સ્ક્રિપ્ટને ગ્રાફિકલ બ્રાઉઝર વિન્ડો ખોલ્યા વિના JavaScript-ભારે વેબપેજને ઍક્સેસ કરવા અને તેની સાથે ક્રિયાપ્રતિક્રિયા કરવાની મંજૂરી આપે છે.
with open() Python માં લખવા માટે ફાઇલ ખોલે છે. આ કિસ્સામાં, તેનો ઉપયોગ વેબપેજમાંથી પુનઃપ્રાપ્ત કરાયેલ HTML સામગ્રીને આગળની પ્રક્રિયા અથવા વિશ્લેષણ માટે ફાઇલમાં સાચવવા માટે થાય છે.

જાવાસ્ક્રિપ્ટ-સક્ષમ પૃષ્ઠોમાંથી ડાઉનલોડ કરવા માટે પાયથોનનો ઉપયોગ કરવો

પરંપરાગત પાયથોન વેબ સ્ક્રેપિંગમાં, પુસ્તકાલયો ગમે છે ઘણીવાર વેબપૃષ્ઠો પરથી સીધી સામગ્રી ડાઉનલોડ કરવા માટે વપરાય છે. જો કે, જાવાસ્ક્રિપ્ટ-ભારે સાઇટ્સ સાથે કામ કરતી વખતે, જેમ કે જેફ્રોગ આર્ટિફેક્ટરી, આ લાઇબ્રેરીઓ ઓછી પડે છે. પ્રાથમિક કારણ એ છે કે વેબપેજને ગતિશીલ રીતે સામગ્રી લોડ કરવા માટે JavaScriptની જરૂર છે, જે વિનંતીઓ સંભાળી શકતા નથી. આને દૂર કરવા માટે, અમે જેવા ઉકેલો રજૂ કર્યા , , અને વિનંતીઓ-HTML, જે JavaScript એક્ઝેક્યુશન માટે પરવાનગી આપે છે. આ સાધનો બ્રાઉઝર એન્વાયર્નમેન્ટનું અનુકરણ કરે છે, પાયથોન સ્ક્રિપ્ટ્સને JavaScript-આધારિત વેબપૃષ્ઠોમાંથી સામગ્રીને ઍક્સેસ કરવા અને ડાઉનલોડ કરવા સક્ષમ બનાવે છે.

સેલેનિયમનો ઉપયોગ કરીને પ્રથમ અભિગમમાં જાવાસ્ક્રિપ્ટ રેન્ડર કરી શકે તેવા બ્રાઉઝર ઇન્સ્ટન્સને લોન્ચ કરવાનો સમાવેશ થાય છે. તે અમને પૃષ્ઠના સ્રોત કોડને બહાર કાઢતા પહેલા પૃષ્ઠના સંપૂર્ણ લોડ થવાની રાહ જોવાની મંજૂરી આપે છે. જ્યારે પૃષ્ઠ સામગ્રી ગતિશીલ રીતે જનરેટ કરવામાં આવે ત્યારે આ ખાસ કરીને ઉપયોગી છે. ઉદાહરણ તરીકે, નો ઉપયોગ કરીને આદેશ બ્રાઉઝર શરૂ કરે છે અને પછી લક્ષ્ય URL ને ઍક્સેસ કરે છે. ઉપયોગ કરીને , અમે ખાતરી કરીએ છીએ કે JavaScript લોડ કરવા માટે પૂરતો સમય આપવામાં આવ્યો છે. છેલ્લે, એક્સ્ટ્રેક્ટ કરેલ પૃષ્ઠ સામગ્રીને ફાઇલમાં સાચવવામાં આવે છે, જે અમને સ્થિર સ્વરૂપમાં જરૂરી વેબપેજ પ્રદાન કરે છે.

બીજા અભિગમમાં, અમે Pyppeteer નો ઉપયોગ કર્યો, જે પપેટિયર માટે પાયથોન રેપર છે. Pyppeteer જાવાસ્ક્રિપ્ટ એક્ઝેક્યુશનને હેન્ડલ કરવા માટે રચાયેલ અન્ય શક્તિશાળી સાધન છે. સેલેનિયમની જેમ, Pyppeteer એક હેડલેસ બ્રાઉઝર લોન્ચ કરે છે જે વેબપેજ પર નેવિગેટ કરે છે, JavaScript એક્ઝીક્યુટ થાય તેની રાહ જુએ છે અને પછી સામગ્રીને પુનઃપ્રાપ્ત કરે છે. Pyppeteer નો ઉપયોગ કરવાનો મુખ્ય ફાયદો એ છે કે તે બ્રાઉઝિંગ સત્ર પર વધુ નિયંત્રણ પૂરું પાડે છે, જેમ કે આદેશોનો ઉપયોગ કરીને ચોક્કસ તત્વો લોડ થવાની રાહ જોવી. . આ સુનિશ્ચિત કરે છે કે સ્ક્રિપ્ટ તેને ડાઉનલોડ કરવાનો પ્રયાસ કરે તે પહેલાં જરૂરી પૃષ્ઠ સામગ્રી સંપૂર્ણપણે રેન્ડર કરવામાં આવે છે.

ત્રીજું સોલ્યુશન રિક્વેસ્ટ્સ-એચટીએમએલ લાઇબ્રેરીનો લાભ લે છે, જે સેલેનિયમ અથવા પીપીટીયર જેવા સંપૂર્ણ બ્રાઉઝરની જરૂર વગર જાવાસ્ક્રિપ્ટ રેન્ડર કરવાની પ્રક્રિયાને સરળ બનાવે છે. Requests-HTML સાથે, અમે ઉપયોગ કરીને HTTP સત્ર શરૂ કરી શકીએ છીએ વેબપેજ મેળવવા માટે, પછી સાથે JavaScript એક્ઝિક્યુટ કરો પદ્ધતિ આ સોલ્યુશન સંપૂર્ણ બ્રાઉઝર સિમ્યુલેશન અભિગમોની તુલનામાં હળવા છે અને જ્યારે તમને સંપૂર્ણ બ્રાઉઝરના ઓવરહેડની જરૂર ન હોય ત્યારે તે ઘણીવાર વધુ યોગ્ય હોય છે. તે ખાસ કરીને સરળ JavaScript કામગીરી માટે ઉપયોગી છે, જે તેને ચોક્કસ ઉપયોગના કેસ માટે શ્રેષ્ઠ પસંદગી બનાવે છે.

Python માં JavaScript-સક્ષમ પૃષ્ઠો સાથે URL ડાઉનલોડ કરી રહ્યાં છે

આ ઉકેલ જાવાસ્ક્રિપ્ટ-ભારે પૃષ્ઠોને હેન્ડલ કરવા માટે સેલેનિયમ, પાયથોન લાઇબ્રેરીનો ઉપયોગ કરે છે. સેલેનિયમ તમને વેબ બ્રાઉઝરને નિયંત્રિત કરવાની મંજૂરી આપે છે, જે તમને JavaScript એક્ઝેક્યુશનનું અનુકરણ કરવા અને ગતિશીલ સામગ્રી પુનઃપ્રાપ્ત કરવા સક્ષમ બનાવે છે.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import time
def download_using_selenium(url, username, apikey):
    # Setup Selenium WebDriver
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
    driver.get(url)
    time.sleep(3)  # Wait for JavaScript to load
    
    # Assuming basic authentication via URL for this example
    auth_url = f'{url}?username={username}&password={apikey}'
    driver.get(auth_url)
    
    # Extract content
    page_content = driver.page_source
    
    # Save to file
    with open("download_selenium.html", "w") as file:
        file.write(page_content)
    
    driver.quit()
    print("Download complete using Selenium.")

JavaScript-સક્ષમ પૃષ્ઠો ડાઉનલોડ કરવા માટે Pyppeteer નો ઉપયોગ કરવો

આ સોલ્યુશન Pyppeteer નો ઉપયોગ કરે છે, Pyppeteer ના Python પોર્ટ (હેડલેસ બ્રાઉઝર), જે JavaScript ને એક્ઝિક્યુટ કરી શકે છે અને પૃષ્ઠ સામગ્રીને ગતિશીલ રીતે પુનઃપ્રાપ્ત કરી શકે છે.

import asyncio
from pyppeteer import launch
async def download_using_pyppeteer(url, username, apikey):
    # Launch headless browser
    browser = await launch(headless=True)
    page = await browser.newPage()
    
    # Basic auth and URL loading
    auth_url = f'{url}?username={username}&password={apikey}'
    await page.goto(auth_url)
    
    # Wait for the JavaScript to load
    await page.waitForSelector('body')
    
    # Extract page content
    content = await page.content()
    
    # Save to file
    with open("download_pyppeteer.html", "w") as file:
        file.write(content)
    
    await browser.close()
    print("Download complete using Pyppeteer.")
# Run the async function
asyncio.get_event_loop().run_until_complete(download_using_pyppeteer("https://example.com", "user", "key"))

JavaScript રેન્ડરીંગ હેન્ડલિંગ માટે વિનંતીઓ-HTML નો ઉપયોગ કરવો

આ અભિગમ વિનંતીઓ-HTML લાઇબ્રેરીનો લાભ લે છે, જે સમગ્ર બ્રાઉઝરની જરૂર વગર સરળ JavaScript રેન્ડરિંગ માટે પરવાનગી આપે છે.

from requests_html import HTMLSession
def download_using_requests_html(url, username, apikey):
    session = HTMLSession()
    
    # Make the request
    auth_url = f'{url}?username={username}&password={apikey}'
    response = session.get(auth_url)
    
    # Render the JavaScript
    response.html.render()
    
    # Save the page content
    with open("download_requests_html.html", "w") as file:
        file.write(response.html.html)
    
    print("Download complete using Requests-HTML.")
download_using_requests_html("https://example.com", "user", "key")

JavaScript-સક્ષમ પૃષ્ઠો માટે Python વેબ સ્ક્રેપિંગને વધારવું

JavaScript-ભારે વેબપેજને સ્ક્રેપ કરતી વખતે, પ્રમાણીકરણ અથવા API કી પ્રતિબંધોને બાયપાસ કરવાનું એક સામાન્ય પડકાર છે, ખાસ કરીને JFrog આર્ટિફેક્ટરી જેવી એપ્લિકેશન્સમાં. જ્યારે અમે અગાઉ સેલેનિયમ અને Pyppeteer જેવા ટૂલ્સ સાથે બ્રાઉઝર ઓટોમેશનની શોધ કરી હતી, ત્યાં અન્ય ઉકેલો છે જે HTTP પ્રતિસાદોને હેન્ડલ કરવા પર વધુ ધ્યાન કેન્દ્રિત કરે છે. ઉદાહરણ તરીકે, API ને એકીકૃત કરવા અને હેડરોનો લાભ લેવાથી પ્રમાણીકરણ પ્રોમ્પ્ટ્સને બાયપાસ કરવામાં અથવા સંપૂર્ણ બ્રાઉઝર સિમ્યુલેશનના ઓવરહેડ વિના વધુ ચોક્કસ સામગ્રી પુનઃપ્રાપ્ત કરવામાં મદદ મળી શકે છે.

અન્ય મુખ્ય પાસું એ છે કે આ લાઇબ્રેરીઓ જટિલ સ્વરૂપોને કેવી રીતે હેન્ડલ કરે છે, જેમ કે લોગિન અથવા API ટોકન ઇનપુટ માટે જરૂરી. એક લાક્ષણિક ઉકેલમાં પાયથોન લાઇબ્રેરીઓનો ઉપયોગ કરીને ફોર્મ સબમિશનની નકલ કરવાનો સમાવેશ થાય છે જેમ કે . આ જાવાસ્ક્રિપ્ટ એક્ઝેક્યુશનની જરૂર વગર, સંસાધનોની બચત કર્યા વિના સર્વર-સાઇડ પ્રમાણીકરણ સાથે સીમલેસ ક્રિયાપ્રતિક્રિયા માટે પરવાનગી આપે છે. વધુમાં, વધુ સુરક્ષિત પૃષ્ઠો માટે, તમારી સ્ક્રિપ્ટમાં સત્ર સંચાલન અને ટોકન-આધારિત પ્રમાણીકરણ જેવી સુવિધાઓ ઉમેરવાથી પ્રભાવને નોંધપાત્ર રીતે વધારી શકે છે.

કેપ્ચા પડકારો જેવા સંભવિત મુદ્દાઓની ચર્ચા કરવી પણ મહત્વપૂર્ણ છે, જે કાર્યોને સ્ક્રેપિંગ અથવા સ્વચાલિત કરતી વખતે અવરોધ બની શકે છે. કેપ્ચા સાથે વ્યવહાર કરવા માટે, કેટલાક વિકાસકર્તાઓ તૃતીય-પક્ષ સેવાઓ પસંદ કરે છે જે કેપ્ચાને આપમેળે હલ કરે છે. અન્ય મશીન લર્નિંગ અલ્ગોરિધમ્સને એકીકૃત કરે છે, જો કે આ વધુ જટિલ હોઈ શકે છે. આ વધારાના સુરક્ષા માપદંડોને સમજવાથી તમે તમારી સ્ક્રિપ્ટ્સને પડકારોની વિશાળ શ્રેણીને હેન્ડલ કરવા માટે તૈયાર કરવામાં મદદ કરે છે, જાવાસ્ક્રિપ્ટ-આધારિત પ્લેટફોર્મ્સ સાથે ક્રિયાપ્રતિક્રિયા કરતી વખતે તમારી પાયથોન સ્ક્રિપ્ટ કાર્યક્ષમ રીતે ચાલે છે તેની ખાતરી કરો.

  1. હું પાયથોન સાથે જાવાસ્ક્રિપ્ટ-રેન્ડર કરેલી સામગ્રીને કેવી રીતે સ્ક્રેપ કરી શકું?
  2. જેવા સાધનોનો ઉપયોગ કરો , , અથવા વેબપૃષ્ઠોમાંથી સામગ્રી મેળવતી વખતે JavaScript એક્ઝેક્યુશનને હેન્ડલ કરવા માટે.
  3. JavaScript-ભારે વેબસાઇટ્સને હેન્ડલ કરવા માટે શ્રેષ્ઠ સાધન કયું છે?
  4. જટિલ JavaScript-ભારે સાઇટ્સ માટે ઘણીવાર શ્રેષ્ઠ પસંદગી છે કારણ કે તે વાસ્તવિક બ્રાઉઝર ક્રિયાપ્રતિક્રિયાઓની નકલ કરે છે. પણ અત્યંત અસરકારક છે.
  5. હું વેબ સ્ક્રેપિંગમાં પ્રમાણીકરણને કેવી રીતે હેન્ડલ કરી શકું?
  6. તમે ઉપયોગ કરી શકો છો HTTP હેડરોમાં API કી અને ટોકન્સ મોકલીને મૂળભૂત અને ટોકન-આધારિત પ્રમાણીકરણને હેન્ડલ કરવા માટે લાઇબ્રેરી.
  7. સ્ક્રેપ કરતી વખતે શું હું કેપ્ચાને બાયપાસ કરી શકું?
  8. હા, કેપ્ચા-સોલ્વિંગ સેવાઓનો ઉપયોગ કરીને અથવા મશીન લર્નિંગ અલ્ગોરિધમ્સને એકીકૃત કરીને. જો કે, આ જટિલતા ઉમેરે છે અને તે બધા ઉપયોગના કેસ માટે વ્યવહારુ ન હોઈ શકે.
  9. શું સરળ સ્ક્રેપિંગ કાર્યો માટે બ્રાઉઝર ઓટોમેશનને ટાળવું શક્ય છે?
  10. હા, સરળ કાર્યો માટે, ધ પુસ્તકાલય અથવા સંપૂર્ણ બ્રાઉઝર ઓટોમેશનની જરૂર વગર ડેટા મેળવવાનું હેન્ડલ કરી શકે છે.

JavaScript-ભારે વેબપૃષ્ઠોમાંથી સામગ્રીને ઍક્સેસ કરવા માટે માત્ર મૂળભૂત HTTP વિનંતીઓ કરતાં વધુની જરૂર છે. સેલેનિયમ અને Pyppeteer જેવા ટૂલ્સનો લાભ લઈને, અમે બ્રાઉઝર એન્વાયર્નમેન્ટ્સનું અનુકરણ કરી શકીએ છીએ જે JavaScript ને એક્ઝિક્યુટ કરે છે અને વેબપેજની સંપૂર્ણ સામગ્રી પુનઃપ્રાપ્ત કરે છે. આ સાધનો ઓટોમેશન કાર્યો માટે સુગમતા પ્રદાન કરે છે.

જો કે બ્રાઉઝર ઓટોમેશન વધુ સંસાધન-સઘન છે, તે જટિલ પૃષ્ઠોને હેન્ડલ કરવા માટે એક વિશ્વસનીય ઉકેલ છે. સરળ કિસ્સાઓ માટે, વિનંતીઓ-એચટીએમએલ એ હળવા વિકલ્પ હોઈ શકે છે. યોગ્ય સાધનની પસંદગી સાઇટની જટિલતા અને તમારા પ્રોજેક્ટની ચોક્કસ જરૂરિયાતો પર આધારિત છે.

  1. જાવાસ્ક્રિપ્ટ-ભારે પૃષ્ઠો સાથે વેબ સ્ક્રેપિંગ માટે સેલેનિયમનો ઉપયોગ કરવાની માહિતી સત્તાવાર સેલેનિયમ દસ્તાવેજોમાંથી સંદર્ભિત કરવામાં આવી હતી. તેને અહીં ઍક્સેસ કરો: સેલેનિયમ દસ્તાવેજીકરણ .
  2. ગતિશીલ JavaScript સામગ્રીને હેન્ડલ કરવા માટે Pyppeteer નો અમલ Pyppeteer ના GitHub પૃષ્ઠની વિગતો પર આધારિત હતો. તમે અહીં વધુ શોધી શકો છો: Pyppeteer GitHub .
  3. વિનંતીઓ અને વિનંતીઓ-એચટીએમએલ લાઇબ્રેરીઓ માટે, વિનંતીઓ-એચટીએમએલ દસ્તાવેજીકરણમાંથી આંતરદૃષ્ટિ દોરવામાં આવી હતી, જે પાયથોનમાં JavaScript રેન્ડરીંગને હેન્ડલ કરવાની ઊંડી સમજ પૂરી પાડે છે: વિનંતીઓ-HTML દસ્તાવેજીકરણ .
  4. પ્રમાણીકરણ અને API ઉપયોગનું સંચાલન કરવા માટેની શ્રેષ્ઠ પદ્ધતિઓ રીઅલ પાયથોન પર મળેલી પાયથોન વેબ સ્ક્રેપિંગ તકનીકો પરના લેખો દ્વારા પ્રેરિત હતી: વાસ્તવિક પાયથોન .