ਸਕ੍ਰੈਪੀ ਅਤੇ ਪਲੇਅ ਰਾਈਟ ਨਾਲ JavaScript ਅਤੇ ਟਾਈਮਆਊਟ ਗਲਤੀਆਂ ਦਾ ਨਿਪਟਾਰਾ ਕਰਨਾ
ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਸਮੇਂ ਸਕ੍ਰੈਪੀ ਨਾਲ ਸਕ੍ਰੈਪੀ ਨਾਟਕਕਾਰ, ਤੁਹਾਨੂੰ ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਦੀ ਲੋੜ ਵਾਲੇ ਪੰਨਿਆਂ ਨੂੰ ਸਕ੍ਰੈਪ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਸਮੇਂ ਸਮੱਸਿਆਵਾਂ ਦਾ ਸਾਹਮਣਾ ਕਰਨਾ ਪੈ ਸਕਦਾ ਹੈ। ਇੱਕ ਆਮ ਸਮੱਸਿਆ ਇੱਕ ਸਮਾਂ ਸਮਾਪਤੀ ਗਲਤੀ ਦੇ ਨਾਲ "ਕਿਰਪਾ ਕਰਕੇ JS ਨੂੰ ਸਮਰੱਥ ਕਰੋ ਅਤੇ ਕਿਸੇ ਵੀ ਵਿਗਿਆਪਨ ਬਲੌਕਰ ਨੂੰ ਅਯੋਗ ਕਰੋ" ਲਈ ਇੱਕ ਸੁਨੇਹਾ ਪ੍ਰਾਪਤ ਕਰਨਾ ਹੈ।
ਇਹ ਮੁੱਦਾ ਆਮ ਤੌਰ 'ਤੇ ਪੈਦਾ ਹੁੰਦਾ ਹੈ ਕਿਉਂਕਿ ਸਕ੍ਰੈਪੀ ਇਕੱਲੇ ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਨੂੰ ਰੈਂਡਰ ਨਹੀਂ ਕਰਦੀ ਹੈ। ਜਦੋਂ ਕਿ ਪਲੇਅ ਰਾਈਟ ਨੂੰ ਇਸ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਏਕੀਕ੍ਰਿਤ ਕੀਤਾ ਗਿਆ ਹੈ, ਇਸ ਤਰ੍ਹਾਂ ਦੀਆਂ ਵੈਬਸਾਈਟਾਂ ਲਈ ਇਸ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਕੌਂਫਿਗਰ ਕਰਨ ਲਈ ਵਾਧੂ ਕਦਮਾਂ ਦੀ ਲੋੜ ਹੈ। ਵਾਲ ਸਟਰੀਟ ਜਰਨਲ, ਜੋ JavaScript 'ਤੇ ਬਹੁਤ ਜ਼ਿਆਦਾ ਨਿਰਭਰ ਕਰਦਾ ਹੈ।
ਸਕ੍ਰੈਪੀ ਦੇ ਨਾਲ ਪਲੇਅ ਰਾਈਟ ਦੇ ਏਕੀਕਰਨ ਦਾ ਉਦੇਸ਼ ਅਜਿਹੀਆਂ ਸੀਮਾਵਾਂ ਨੂੰ ਦੂਰ ਕਰਨਾ ਹੈ, ਪਰ ਗਲਤ ਸੈਟਿੰਗਾਂ ਜਾਂ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰਨ ਵਾਲੇ ਬ੍ਰਾਊਜ਼ਰ ਵਿਵਹਾਰ ਅਜੇ ਵੀ ਨਿਰਾਸ਼ਾਜਨਕ ਗਲਤੀਆਂ ਦਾ ਕਾਰਨ ਬਣ ਸਕਦੇ ਹਨ। ਹਾਲਾਂਕਿ, ਸਹੀ ਸੰਰਚਨਾਵਾਂ ਅਤੇ ਡੀਬੱਗਿੰਗ ਰਣਨੀਤੀਆਂ ਦੇ ਨਾਲ, ਤੁਸੀਂ ਇਹਨਾਂ ਰੁਕਾਵਟਾਂ ਨੂੰ ਬਾਈਪਾਸ ਕਰ ਸਕਦੇ ਹੋ।
ਇਸ ਗਾਈਡ ਵਿੱਚ, ਅਸੀਂ ਸਕ੍ਰੈਪੀ ਅਤੇ ਪਲੇਅ ਰਾਈਟ ਦੇ ਨਾਲ ਸਕ੍ਰੈਪਿੰਗ ਦੀ ਇੱਕ ਅਸਲ-ਸੰਸਾਰ ਉਦਾਹਰਨ 'ਤੇ ਚਰਚਾ ਕਰਾਂਗੇ, ਜਿਸ ਵਿੱਚ ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਲੋਡ ਕਰਨ ਦੀਆਂ ਸਮੱਸਿਆਵਾਂ ਅਤੇ ਸਮਾਂ ਸਮਾਪਤੀ ਦੀਆਂ ਗਲਤੀਆਂ ਵਰਗੀਆਂ ਆਮ ਸਮੱਸਿਆਵਾਂ ਤੋਂ ਬਚਣ ਲਈ ਕੋਡ ਸੈੱਟਅੱਪ ਅਤੇ ਡੀਬੱਗਿੰਗ ਸੁਝਾਅ ਸ਼ਾਮਲ ਹਨ।
ਹੁਕਮ | ਵਰਤੋਂ ਦੀ ਉਦਾਹਰਨ |
---|---|
ਪੰਨਾ ਵਿਧੀ | ਇਹ ਏ ਸਕ੍ਰੈਪੀ ਨਾਟਕਕਾਰ ਕਮਾਂਡ ਜੋ ਤੁਹਾਨੂੰ ਪਲੇਅਰਾਈਟ ਪੇਜ ਆਬਜੈਕਟ 'ਤੇ ਢੰਗਾਂ ਨੂੰ ਚਲਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦੀ ਹੈ, ਜਿਵੇਂ ਕਿ ਕਲਿੱਕ ਕਰਨਾ ਜਾਂ ਉਡੀਕ ਕਰਨ ਵਰਗੀਆਂ ਬ੍ਰਾਊਜ਼ਰ ਕਾਰਵਾਈਆਂ ਦੀ ਨਕਲ ਕਰਨਾ। ਉਦਾਹਰਨ ਲਈ, PageMethod('wait_for_timeout', 5000) ਨਾਟਕਕਾਰ ਨੂੰ ਅੱਗੇ ਵਧਣ ਤੋਂ ਪਹਿਲਾਂ 5 ਸਕਿੰਟ ਉਡੀਕ ਕਰਨ ਲਈ ਕਹਿੰਦਾ ਹੈ। |
scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler | ਇਹ ਦੁਆਰਾ ਪ੍ਰਦਾਨ ਕੀਤਾ ਗਿਆ ਇੱਕ ਕਸਟਮ ਡਾਊਨਲੋਡ ਹੈਂਡਲਰ ਹੈ ਸਕ੍ਰੈਪੀ ਨਾਟਕਕਾਰ HTTP ਬੇਨਤੀਆਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਲਈ ਜਿਨ੍ਹਾਂ ਲਈ JavaScript ਰੈਂਡਰਿੰਗ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਇਹ ਸਕ੍ਰੈਪੀ ਦੇ ਨਾਲ ਨਾਟਕਕਾਰ ਨੂੰ ਏਕੀਕ੍ਰਿਤ ਕਰਦਾ ਹੈ, ਮੱਕੜੀ ਨੂੰ JS- ਭਾਰੀ ਸਮੱਗਰੀ ਨੂੰ ਸੰਭਾਲਣ ਦੇ ਯੋਗ ਬਣਾਉਂਦਾ ਹੈ। |
ਚੋਣਕਾਰ | ਏ ਸਕ੍ਰੈਪੀ XPath ਜਾਂ CSS ਚੋਣਕਾਰਾਂ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ HTML ਜਾਂ XML ਦਸਤਾਵੇਜ਼ਾਂ ਤੋਂ ਡਾਟਾ ਕੱਢਣ ਲਈ ਉਪਯੋਗਤਾ। ਇਸ ਸੰਦਰਭ ਵਿੱਚ, ਪਲੇਅਰਾਈਟ ਦੁਆਰਾ ਪੰਨੇ ਨੂੰ ਰੈਂਡਰ ਕਰਨ ਤੋਂ ਬਾਅਦ ਇਸਦੀ ਵਰਤੋਂ HTML ਸਮੱਗਰੀ ਨੂੰ ਪਾਰਸ ਕਰਨ ਲਈ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। |
ਮੈਟਾ | ਦ ਮੈਟਾ ਸਕ੍ਰੈਪੀ ਬੇਨਤੀਆਂ ਵਿੱਚ ਵਿਸ਼ੇਸ਼ਤਾ ਤੁਹਾਨੂੰ ਬੇਨਤੀ ਲਈ ਵਾਧੂ ਵਿਕਲਪ ਜਾਂ ਸੈਟਿੰਗਾਂ ਪਾਸ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ। ਇਸ ਸਥਿਤੀ ਵਿੱਚ, meta={'playwright': True} Scrapy ਦੇ ਡਿਫੌਲਟ ਡਾਊਨਲੋਡਰ ਦੀ ਬਜਾਏ ਬੇਨਤੀ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਪਲੇਅ ਰਾਈਟ ਨੂੰ ਸਮਰੱਥ ਬਣਾਉਂਦਾ ਹੈ। |
PLAYWRIGHT_BROWSER_TYPE | ਇਹ ਸੈਟਿੰਗ ਪਲੇਅਰਾਈਟ ਦੁਆਰਾ ਵਰਤੇ ਜਾਣ ਵਾਲੇ ਬ੍ਰਾਊਜ਼ਰ ਦੀ ਕਿਸਮ ਨੂੰ ਨਿਸ਼ਚਿਤ ਕਰਦੀ ਹੈ। ਵਿਕਲਪ ਸ਼ਾਮਲ ਹਨ ਕਰੋਮੀਅਮ, ਫਾਇਰਫਾਕਸ, ਅਤੇ ਵੈਬਕਿੱਟ. ਇੱਥੇ, ਅਸੀਂ ਜ਼ਿਆਦਾਤਰ ਵੈੱਬਸਾਈਟਾਂ ਨਾਲ ਅਨੁਕੂਲਤਾ ਲਈ 'ਕ੍ਰੋਮੀਅਮ' ਦੀ ਵਰਤੋਂ ਕੀਤੀ ਹੈ। |
PLAYWRIGHT_LAUNCH_OPTIONS | ਪਲੇਅਰਾਈਟ ਦੇ ਬ੍ਰਾਊਜ਼ਰ ਉਦਾਹਰਨ ਲਈ ਕੌਂਫਿਗਰੇਸ਼ਨ ਵਿਕਲਪ, ਜਿਵੇਂ ਕਿ ਹੈੱਡਲੈੱਸ ਮੋਡ ਨੂੰ ਸਮਰੱਥ ਜਾਂ ਅਯੋਗ ਕਰਨਾ ਅਤੇ ਬ੍ਰਾਊਜ਼ਰ ਲਾਂਚ ਤਰਜੀਹਾਂ ਨੂੰ ਸੈੱਟ ਕਰਨਾ। ਉਦਾਹਰਨ ਲਈ, ਹੈੱਡਲੈੱਸ: False ਆਸਾਨ ਡੀਬੱਗਿੰਗ ਲਈ ਇੱਕ UI ਨਾਲ ਬ੍ਰਾਊਜ਼ਰ ਨੂੰ ਚਲਾਉਂਦਾ ਹੈ। |
TWISTED_REACTOR | ਸਕ੍ਰੈਪੀ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ ਮਰੋੜਿਆ ਅਸਿੰਕਰੋਨਸ I/O ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਨੈੱਟਵਰਕ ਲਾਇਬ੍ਰੇਰੀ। TWISTED_REACTOR = 'twisted.internet.asyncioreactor.AsyncioSelectorReactor' ਸਕ੍ਰੈਪੀ ਨੂੰ ਪਲੇਅ ਰਾਈਟ ਨਾਲ ਕੰਮ ਕਰਨ ਦੇ ਯੋਗ ਬਣਾਉਂਦਾ ਹੈ, ਜੋ ਇਸ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ asyncio. |
PLAYWRIGHT_DEFAULT_NAVIGATION_TIMEOUT | ਇਹ ਸੈਟਿੰਗ ਪਲੇਅ ਰਾਈਟ ਲਈ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਨੇਵੀਗੇਸ਼ਨ ਸਮਾਂ ਸਮਾਪਤੀ ਨੂੰ ਵਿਵਸਥਿਤ ਕਰਦੀ ਹੈ। ਸਮਾਂ ਸਮਾਪਤੀ ਮੁੱਲ ਨੂੰ ਵਧਾ ਕੇ, ਉਦਾਹਰਨ ਲਈ, 60000 ms, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਪਲੇਅ ਰਾਈਟ ਕੋਲ ਸਮਾਂ ਸਮਾਪਤ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਗੁੰਝਲਦਾਰ ਵੈੱਬ ਪੰਨਿਆਂ ਨੂੰ ਲੋਡ ਕਰਨ ਅਤੇ ਰੈਂਡਰ ਕਰਨ ਲਈ ਕਾਫ਼ੀ ਸਮਾਂ ਹੈ। |
ਸਮਾਂ ਸਮਾਪਤੀ ਲਈ ਉਡੀਕ ਕਰੋ | ਇੱਕ ਨਾਟਕਕਾਰ-ਵਿਸ਼ੇਸ਼ ਵਿਧੀ ਜੋ ਕਿਸੇ ਖਾਸ ਸਮੇਂ ਲਈ ਐਗਜ਼ੀਕਿਊਸ਼ਨ ਨੂੰ ਰੋਕਣ ਲਈ ਵਰਤੀ ਜਾਂਦੀ ਹੈ। ਸਕ੍ਰਿਪਟ ਵਿੱਚ, wait_for_timeout ਦੀ ਵਰਤੋਂ ਪ੍ਰਕਿਰਿਆ ਨੂੰ 5 ਸਕਿੰਟਾਂ ਲਈ ਦੇਰੀ ਕਰਨ ਲਈ ਕੀਤੀ ਜਾਂਦੀ ਹੈ, ਜਿਸ ਨਾਲ ਪੰਨੇ ਦੀ JavaScript ਨੂੰ ਲੋਡ ਕਰਨ ਅਤੇ ਚਲਾਉਣ ਲਈ ਕਾਫ਼ੀ ਸਮਾਂ ਮਿਲਦਾ ਹੈ। |
ਸਕ੍ਰੈਪੀ ਅਤੇ ਨਾਟਕਕਾਰ ਏਕੀਕਰਣ ਦੀ ਵਿਸਤ੍ਰਿਤ ਵਿਆਖਿਆ
ਪ੍ਰਦਾਨ ਕੀਤੀਆਂ ਸਕ੍ਰਿਪਟਾਂ ਵਿੱਚ, ਦਾ ਏਕੀਕਰਣ ਸਕ੍ਰੈਪੀ ਨਾਲ ਨਾਟਕਕਾਰ WSJ ਵਰਗੀਆਂ JavaScript-ਭਾਰੀ ਵੈੱਬਸਾਈਟਾਂ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹੈ। ਆਮ ਤੌਰ 'ਤੇ, ਸਕ੍ਰੈਪੀ ਮੂਲ ਰੂਪ ਵਿੱਚ JavaScript ਐਗਜ਼ੀਕਿਊਸ਼ਨ ਨੂੰ ਹੈਂਡਲ ਨਹੀਂ ਕਰਦੀ ਹੈ। ਇਹ ਡਾਇਨਾਮਿਕ ਸਮੱਗਰੀ ਨੂੰ ਸਕ੍ਰੈਪ ਕਰਨ ਵੇਲੇ ਸਮੱਸਿਆਵਾਂ ਦਾ ਕਾਰਨ ਬਣਦਾ ਹੈ ਕਿਉਂਕਿ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਪੰਨਾ ਪੂਰੀ ਤਰ੍ਹਾਂ ਲੋਡ ਨਾ ਹੋਵੇ, "ਕਿਰਪਾ ਕਰਕੇ JS ਨੂੰ ਚਾਲੂ ਕਰੋ ਅਤੇ ਕਿਸੇ ਵੀ ਵਿਗਿਆਪਨ ਬਲੌਕਰ ਨੂੰ ਅਯੋਗ ਕਰੋ।" ਇੱਕ ਡਾਉਨਲੋਡ ਹੈਂਡਲਰ ਦੇ ਤੌਰ 'ਤੇ ਪਲੇਰਾਈਟ ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਸਕ੍ਰੈਪੀ ਨੂੰ ਇੱਕ ਪੂਰੇ ਬ੍ਰਾਊਜ਼ਰ ਦੇ ਰੂਪ ਵਿੱਚ ਪੰਨਿਆਂ ਨੂੰ ਲੋਡ ਕਰਨ ਦੇ ਯੋਗ ਬਣਾਉਂਦਾ ਹੈ, JavaScript ਅਤੇ ਹੋਰ ਗਤੀਸ਼ੀਲ ਸਮੱਗਰੀ ਨੂੰ ਪੇਸ਼ ਕਰਦਾ ਹੈ।
ਇਸ ਏਕੀਕਰਣ ਲਈ ਮੱਕੜੀ ਵਿੱਚ ਪਰਿਭਾਸ਼ਿਤ ਕਸਟਮ ਸੈਟਿੰਗਾਂ ਜ਼ਰੂਰੀ ਹਨ। ਅਸੀਂ ਨਿਸ਼ਚਿਤ ਕਰਦੇ ਹਾਂ ਕਿ ਸਕ੍ਰੈਪੀ ਨੂੰ HTTP ਅਤੇ HTTPS ਬੇਨਤੀਆਂ ਦੋਵਾਂ ਲਈ ਪਲੇਰਾਈਟ ਹੈਂਡਲਰ ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ। ਇਸ ਤੋਂ ਇਲਾਵਾ, ਸੈਟਿੰਗ PLAYWRIGHT_BROWSER_TYPE "ਕ੍ਰੋਮੀਅਮ" ਲਈ ਜ਼ਿਆਦਾਤਰ ਵੈੱਬਸਾਈਟਾਂ ਨਾਲ ਅਨੁਕੂਲਤਾ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ। ਸਪਾਈਡਰ ਨੂੰ ਇੱਕ ਗੈਰ-ਹੈੱਡਲੈੱਸ ਮੋਡ ਵਿੱਚ ਬ੍ਰਾਊਜ਼ਰ ਨੂੰ ਲਾਂਚ ਕਰਨ ਲਈ ਵੀ ਕੌਂਫਿਗਰ ਕੀਤਾ ਗਿਆ ਹੈ, ਮਤਲਬ ਕਿ ਬ੍ਰਾਊਜ਼ਰ ਵਿੱਚ ਇੱਕ ਦ੍ਰਿਸ਼ਮਾਨ UI ਹੋਵੇਗਾ, ਜੋ ਕਿ ਗੁੰਝਲਦਾਰ ਸਾਈਟਾਂ ਨੂੰ ਸਕ੍ਰੈਪ ਕਰਨ ਵੇਲੇ ਡੀਬੱਗਿੰਗ ਲਈ ਮਦਦਗਾਰ ਹੋ ਸਕਦਾ ਹੈ। ਇਹ ਸੰਰਚਨਾਵਾਂ ਪਲੇਅ ਰਾਈਟ ਨੂੰ "ਕਿਰਪਾ ਕਰਕੇ JS ਯੋਗ ਕਰੋ" ਗਲਤੀ ਵਰਗੇ ਬੁਨਿਆਦੀ ਬਲਾਕਾਂ ਨੂੰ ਬਾਈਪਾਸ ਕਰਦੇ ਹੋਏ, ਵੈੱਬਸਾਈਟ ਦੇ ਨਾਲ ਮਨੁੱਖੀ-ਵਰਗੇ ਅੰਤਰਕਿਰਿਆਵਾਂ ਦੀ ਨਕਲ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦੀਆਂ ਹਨ।
start_requests ਵਿਧੀ ਵਿੱਚ, ਹਰੇਕ ਬੇਨਤੀ ਨੂੰ ਪਾਸ ਕਰਕੇ ਪਲੇਅ ਰਾਈਟ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ ਕੌਂਫਿਗਰ ਕੀਤਾ ਗਿਆ ਹੈ meta={'playwriter': True}. ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਸਕ੍ਰੈਪੀ ਦੇ ਡਿਫੌਲਟ ਡਾਊਨਲੋਡਰ ਦੀ ਬਜਾਏ ਪਲੇਅਰਾਈਟ, ਬੇਨਤੀ ਨੂੰ ਸੰਭਾਲੇਗਾ। ਦੀ ਵਰਤੋਂ ਪੰਨਾ ਵਿਧੀ ਅਸਲ ਬ੍ਰਾਊਜ਼ਿੰਗ ਸਥਿਤੀਆਂ ਦੀ ਨਕਲ ਕਰਨ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹੈ। ਲਾਈਨ ਪੰਨਾ ਵਿਧੀ ('ਉਡੀਕ_ਲਈ_ਟਾਈਮਆਊਟ', 5000) ਸਾਰੇ ਗਤੀਸ਼ੀਲ JavaScript ਸਮੱਗਰੀ ਨੂੰ ਲੋਡ ਕਰਨ ਲਈ ਪੰਨੇ ਨੂੰ ਕਾਫ਼ੀ ਸਮਾਂ ਦਿੰਦੇ ਹੋਏ, ਪਲੇਅ ਰਾਈਟ ਨੂੰ 5 ਸਕਿੰਟਾਂ ਲਈ ਉਡੀਕ ਕਰਨ ਦੀ ਹਦਾਇਤ ਕਰਦਾ ਹੈ। ਇਹ ਵਿਸ਼ੇਸ਼ ਤੌਰ 'ਤੇ ਲਾਭਦਾਇਕ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਉਹਨਾਂ ਵੈਬਸਾਈਟਾਂ ਨੂੰ ਸਕ੍ਰੈਪ ਕਰਨਾ ਜੋ ਪੂਰੀ ਤਰ੍ਹਾਂ ਲੋਡ ਹੋਣ ਵਿੱਚ ਸਮਾਂ ਲੈਂਦੀਆਂ ਹਨ, ਟਾਈਮਆਉਟ ਅਤੇ ਗਲਤੀਆਂ ਨੂੰ ਰੋਕਦੀਆਂ ਹਨ।
ਪਾਰਸ ਵਿਧੀ ਉਹ ਹੈ ਜਿੱਥੇ ਅਸਲ ਸਕ੍ਰੈਪਿੰਗ ਹੁੰਦੀ ਹੈ। ਪਲੇਅਰਾਈਟ ਦੁਆਰਾ ਪੰਨੇ ਨੂੰ ਰੈਂਡਰ ਕਰਨ ਤੋਂ ਬਾਅਦ, ਸਕ੍ਰੈਪੀ ਦੀ ਵਰਤੋਂ ਕਰਕੇ HTML ਸਮੱਗਰੀ ਨੂੰ ਪਾਰਸ ਕਰਦਾ ਹੈ ਅਤੇ ਪਾਰਸ ਕਰਦਾ ਹੈ ਚੋਣਕਾਰ ਵਸਤੂ। ਇਹ XPath ਜਾਂ CSS ਚੋਣਕਾਰਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਲੋੜੀਂਦੇ ਡੇਟਾ ਦੇ ਸਟੀਕ ਐਕਸਟਰੈਕਸ਼ਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਪਲੇਅਰਾਈਟ ਦਾ ਏਕੀਕਰਣ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਪਾਰਸ ਕੀਤੇ ਜਾ ਰਹੇ HTML ਵਿੱਚ JavaScript-ਰੈਂਡਰ ਕੀਤੀ ਸਾਰੀ ਸਮੱਗਰੀ ਸ਼ਾਮਲ ਹੈ, ਇਸ ਨੂੰ ਡਾਇਨਾਮਿਕ ਵੈੱਬ ਪੰਨਿਆਂ ਲਈ ਬਹੁਤ ਜ਼ਿਆਦਾ ਸਹੀ ਅਤੇ ਭਰੋਸੇਯੋਗ ਬਣਾਉਂਦੀ ਹੈ। ਸਕ੍ਰਿਪਟ ਸਫਲ ਸਕ੍ਰੈਪਿੰਗ ਨੂੰ ਦਰਸਾਉਣ ਲਈ ਇੱਕ ਪੁਸ਼ਟੀਕਰਣ ਸੁਨੇਹਾ ("ਇਹ ਕੰਮ ਕਰ ਰਿਹਾ ਹੈ") ਆਉਟਪੁੱਟ ਕਰਦੀ ਹੈ, ਪਰ ਇੱਕ ਅਸਲ-ਸੰਸਾਰ ਦ੍ਰਿਸ਼ ਵਿੱਚ, ਤੁਸੀਂ ਇੱਥੇ ਡੇਟਾ ਨੂੰ ਐਕਸਟਰੈਕਟ ਅਤੇ ਸਟੋਰ ਕਰੋਗੇ।
ਸਕ੍ਰੈਪੀ ਅਤੇ ਨਾਟਕਕਾਰ ਨਾਲ ਸਕ੍ਰੈਪਿੰਗ: ਜਾਵਾ ਸਕ੍ਰਿਪਟ-ਭਾਰੀ ਵੈੱਬਸਾਈਟਾਂ ਲਈ ਇੱਕ ਮਜ਼ਬੂਤ ਹੱਲ
ਇਹ ਹੱਲ ਦਰਸਾਉਂਦਾ ਹੈ ਕਿ WSJ ਵਰਗੇ JavaScript-ਭਾਰੀ ਪੰਨਿਆਂ ਨੂੰ ਲੋਡ ਕਰਨ ਲਈ ਪਲੇਅਰਾਈਟ ਦੇ ਨਾਲ ਪਾਈਥਨ ਦੀ ਸਕ੍ਰੈਪੀ ਦੀ ਵਰਤੋਂ ਕਿਵੇਂ ਕਰਨੀ ਹੈ, ਆਮ ਗਲਤੀਆਂ ਜਿਵੇਂ ਕਿ "ਕਿਰਪਾ ਕਰਕੇ ਜੇਐਸ ਨੂੰ ਸਮਰੱਥ ਕਰੋ" ਅਤੇ ਟਾਈਮਆਉਟ ਨੂੰ ਸੰਭਾਲਣਾ।
import scrapy
from scrapy_playwright.page import PageMethod
from scrapy.selector import Selector
class WsjNewsJSSpider(scrapy.Spider):
name = 'wsj_newsJS'
start_urls = ['https://www.wsj.com']
custom_settings = {
"DOWNLOAD_HANDLERS": {
'http': 'scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler',
'https': 'scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler',
},
"TWISTED_REACTOR": 'twisted.internet.asyncioreactor.AsyncioSelectorReactor',
"PLAYWRIGHT_BROWSER_TYPE": "chromium",
"PLAYWRIGHT_LAUNCH_OPTIONS": {"headless": False},
}
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(
url,
meta={
'playwright': True,
'playwright_page_methods': [
PageMethod('wait_for_timeout', 5000),
],
},
callback=self.parse
)
def parse(self, response):
html_content = response.text
sel = Selector(text=html_content)
print("JavaScript page rendered successfully!")
ਵਿਕਲਪਿਕ ਹੱਲ: ਹੈੱਡਲੈੱਸ ਬ੍ਰਾਊਜ਼ਰ ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਅਤੇ ਸਮਾਂ ਸਮਾਪਤੀ ਸੈਟਿੰਗਾਂ ਨੂੰ ਅਡਜਸਟ ਕਰਨਾ
ਇਸ ਹੱਲ ਵਿੱਚ ਸਰੋਤਾਂ ਦੀ ਵਰਤੋਂ ਵਿੱਚ ਕੁਸ਼ਲਤਾ ਲਈ ਹੈੱਡਲੈੱਸ ਮੋਡ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਗੁੰਝਲਦਾਰ ਪੰਨਿਆਂ ਨੂੰ ਸਕ੍ਰੈਪ ਕਰਨ ਲਈ ਬ੍ਰਾਊਜ਼ਰ ਸੈਟਿੰਗਾਂ ਅਤੇ ਟਾਈਮਆਉਟ ਨੂੰ ਐਡਜਸਟ ਕਰਨਾ ਸ਼ਾਮਲ ਹੈ।
import scrapy
from scrapy_playwright.page import PageMethod
class HeadlessSpider(scrapy.Spider):
name = 'headless_spider'
start_urls = ['https://www.wsj.com']
custom_settings = {
"PLAYWRIGHT_BROWSER_TYPE": "chromium",
"PLAYWRIGHT_LAUNCH_OPTIONS": {"headless": True, "timeout": 30000},
"PLAYWRIGHT_DEFAULT_NAVIGATION_TIMEOUT": 60000, # Increase timeout
}
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(
url,
meta={
'playwright': True,
'playwright_page_methods': [
PageMethod('wait_for_timeout', 3000), # Wait for 3 seconds
],
},
callback=self.parse
)
def parse(self, response):
print("Page scraped successfully!")
html = response.text
# Further parsing of the page goes here
ਪਲੇਅ ਰਾਈਟ ਨਾਲ ਵੈੱਬ ਸਕ੍ਰੈਪਿੰਗ ਨੂੰ ਵਧਾਉਣਾ: ਜਾਵਾ ਸਕ੍ਰਿਪਟ-ਹੈਵੀ ਵੈੱਬਸਾਈਟਾਂ ਨਾਲ ਨਜਿੱਠਣਾ
ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਸਮੇਂ ਸਕ੍ਰੈਪੀ ਸਕ੍ਰੈਪਿੰਗ ਲਈ, JavaScript-ਭਾਰੀ ਵੈਬਸਾਈਟਾਂ ਦੀ ਚੁਣੌਤੀ ਅਕਸਰ ਪੈਦਾ ਹੁੰਦੀ ਹੈ. ਵੈਬਸਾਈਟਾਂ ਜਿਹਨਾਂ ਨੂੰ ਗਤੀਸ਼ੀਲ ਸਮੱਗਰੀ ਨੂੰ ਪੇਸ਼ ਕਰਨ ਲਈ JavaScript ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ, ਜਿਵੇਂ ਕਿ ਖਬਰਾਂ ਦੇ ਲੇਖ ਜਾਂ ਸਟਾਕ ਦੀਆਂ ਕੀਮਤਾਂ, ਇਕੱਲੇ ਸਕ੍ਰੈਪੀ ਨਾਲ ਸਕ੍ਰੈਪ ਕਰਨਾ ਔਖਾ ਹੈ। ਇਹ ਉਹ ਥਾਂ ਹੈ ਜਿੱਥੇ ਏਕੀਕਰਣ ਸਕ੍ਰੈਪੀ ਨਾਟਕਕਾਰ ਮਹੱਤਵਪੂਰਨ ਬਣ ਜਾਂਦਾ ਹੈ। ਨਾਟਕਕਾਰ ਇੱਕ ਬ੍ਰਾਊਜ਼ਰ ਇੰਜਣ ਦੇ ਤੌਰ ਤੇ ਕੰਮ ਕਰਦਾ ਹੈ, ਇੱਕ ਮਨੁੱਖੀ ਉਪਭੋਗਤਾ ਵਾਂਗ ਪੰਨਿਆਂ ਨੂੰ ਰੈਂਡਰ ਕਰਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਸਮੱਗਰੀ ਨੂੰ ਸਕ੍ਰੈਪ ਕਰਨਾ ਸੰਭਵ ਹੋ ਜਾਂਦਾ ਹੈ ਜੋ ਕਿ ਕਲਾਇੰਟ-ਸਾਈਡ JavaScript ਐਗਜ਼ੀਕਿਊਸ਼ਨ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ।
ਨਾਟਕਕਾਰ ਆਮ ਰੁਕਾਵਟਾਂ ਨੂੰ ਬਾਈਪਾਸ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ ਜਿਵੇਂ ਕਿ ਟਾਈਮਆਉਟ ਅਤੇ JavaScript ਨੂੰ ਸਮਰੱਥ ਬਣਾਉਣ ਜਾਂ ਵਿਗਿਆਪਨ ਬਲੌਕਰਾਂ ਨੂੰ ਅਯੋਗ ਕਰਨ ਲਈ ਗਲਤੀਆਂ। ਉਦਾਹਰਨ ਸਕ੍ਰਿਪਟ ਵਿੱਚ, ਪਲੇਅਰਾਈਟ ਨੂੰ ਸਮੱਗਰੀ ਪ੍ਰਾਪਤ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਉਡੀਕ ਕਰਨ ਲਈ ਕੌਂਫਿਗਰ ਕੀਤਾ ਗਿਆ ਹੈ ਤਾਂ ਜੋ ਇਹ ਯਕੀਨੀ ਬਣਾਇਆ ਜਾ ਸਕੇ ਕਿ JavaScript ਤੱਤ ਪੂਰੀ ਤਰ੍ਹਾਂ ਲੋਡ ਹੋਏ ਹਨ। ਇਹ ਤਕਨੀਕ ਉਹਨਾਂ ਵੈਬਸਾਈਟਾਂ ਤੋਂ ਡਾਟਾ ਕੱਢਣ ਵਿੱਚ ਮਹੱਤਵਪੂਰਨ ਤੌਰ 'ਤੇ ਸੁਧਾਰ ਕਰਦੀ ਹੈ ਜੋ ਬੋਟ ਖੋਜ ਜਾਂ ਗਤੀਸ਼ੀਲ ਸਮੱਗਰੀ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਪਹੁੰਚ ਨੂੰ ਬਲੌਕ ਜਾਂ ਪ੍ਰਤਿਬੰਧਿਤ ਕਰੇਗੀ।
ਵਿਚਾਰਨ ਯੋਗ ਇੱਕ ਵਾਧੂ ਪਹਿਲੂ ਮਲਟੀ-ਪੇਜ ਵੈਬਸਾਈਟਾਂ ਨੂੰ ਸੰਭਾਲਣ ਦੀ ਸੰਭਾਵਨਾ ਹੈ। ਨਾਟਕਕਾਰ ਨਾ ਸਿਰਫ਼ JavaScript ਐਲੀਮੈਂਟਸ ਨੂੰ ਲੋਡ ਕਰਦਾ ਹੈ ਬਲਕਿ ਯੂਜ਼ਰ-ਵਰਗੇ ਇੰਟਰੈਕਸ਼ਨਾਂ ਦਾ ਵੀ ਸਮਰਥਨ ਕਰਦਾ ਹੈ ਜਿਵੇਂ ਕਿ ਬਟਨਾਂ 'ਤੇ ਕਲਿੱਕ ਕਰਨਾ ਜਾਂ ਕਈ ਪੰਨਿਆਂ 'ਤੇ ਨੈਵੀਗੇਟ ਕਰਨਾ। ਇਹ ਵਿਸ਼ੇਸ਼ ਤੌਰ 'ਤੇ ਉਹਨਾਂ ਵੈਬਸਾਈਟਾਂ ਲਈ ਲਾਭਦਾਇਕ ਹੈ ਜਿੱਥੇ ਸਮੱਗਰੀ ਨੂੰ ਕਈ ਭਾਗਾਂ ਵਿੱਚ ਵੰਡਿਆ ਗਿਆ ਹੈ ਜਾਂ ਕਲਿੱਕ-ਟੂ-ਲੋਡ ਵਿਧੀਆਂ ਦੇ ਪਿੱਛੇ ਲੁਕਿਆ ਹੋਇਆ ਹੈ, ਜਿਸ ਨਾਲ ਤੁਹਾਨੂੰ ਢਾਂਚਾਗਤ ਅਤੇ ਕੀਮਤੀ ਡੇਟਾ ਨੂੰ ਸਕ੍ਰੈਪ ਕਰਨ ਵਿੱਚ ਵਧੇਰੇ ਲਚਕਤਾ ਮਿਲਦੀ ਹੈ।
ਸਕ੍ਰੈਪੀ ਅਤੇ ਪਲੇਅ ਰਾਈਟ ਨਾਲ ਜਾਵਾ ਸਕ੍ਰਿਪਟ-ਭਾਰੀ ਵੈੱਬਸਾਈਟਾਂ ਨੂੰ ਸਕ੍ਰੈਪ ਕਰਨ ਬਾਰੇ ਆਮ ਸਵਾਲ
- ਨਾਟਕਕਾਰ JavaScript-ਭਾਰੀ ਵੈੱਬਸਾਈਟਾਂ ਨਾਲ ਕਿਵੇਂ ਮਦਦ ਕਰਦਾ ਹੈ?
- ਨਾਟਕਕਾਰ ਇੱਕ ਅਸਲੀ ਬ੍ਰਾਊਜ਼ਰ ਦੀ ਨਕਲ ਕਰਦਾ ਹੈ, ਇਸ ਨੂੰ ਪੰਨੇ ਨੂੰ ਵਾਪਸ ਪਾਸ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ JavaScript ਨੂੰ ਲੋਡ ਕਰਨ ਅਤੇ ਚਲਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ Scrapy ਸਕ੍ਰੈਪਿੰਗ ਲਈ.
- ਮੈਨੂੰ "ਕਿਰਪਾ ਕਰਕੇ JS ਯੋਗ ਕਰੋ" ਸੁਨੇਹਾ ਕਿਉਂ ਮਿਲਦਾ ਹੈ?
- ਇਹ ਗਲਤੀ ਇਸ ਲਈ ਵਾਪਰਦੀ ਹੈ ਕਿਉਂਕਿ ਸਕ੍ਰੈਪੀ, ਆਪਣੇ ਆਪ, ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਰੈਂਡਰ ਨਹੀਂ ਕਰ ਸਕਦੀ। ਹੱਲ ਏਕੀਕ੍ਰਿਤ ਕਰਨਾ ਹੈ Playwright JavaScript-ਅਧਾਰਿਤ ਸਮੱਗਰੀ ਨੂੰ ਸੰਭਾਲਣ ਲਈ.
- ਕੀ ਮੈਂ ਦੂਜੇ ਬ੍ਰਾਊਜ਼ਰਾਂ ਨਾਲ ਪਲੇਅ ਰਾਈਟ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦਾ ਹਾਂ?
- ਹਾਂ, ਪਲੇਅਰਾਈਟ ਵਰਗੇ ਕਈ ਬ੍ਰਾਊਜ਼ਰਾਂ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ chromium, firefox, ਅਤੇ webkit, ਜਿਸ ਨੂੰ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਨਿਰਧਾਰਿਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।
- ਮੈਂ ਨਾਟਕਕਾਰ ਵਿੱਚ ਸਮਾਂ ਸਮਾਪਤੀ ਤੋਂ ਕਿਵੇਂ ਬਚਾਂ?
- ਤੁਸੀਂ ਵਰਤ ਕੇ ਸਮਾਂ ਸਮਾਪਤੀ ਨੂੰ ਅਨੁਕੂਲ ਕਰ ਸਕਦੇ ਹੋ PageMethod('wait_for_timeout', 5000) JavaScript ਸਮੱਗਰੀ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਲੋਡ ਹੋਣ ਲਈ ਹੋਰ ਸਮਾਂ ਦੇਣ ਲਈ।
- ਕੀ ਮੈਂ ਪਲੇਅ ਰਾਈਟ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਕਈ ਪੰਨਿਆਂ ਨੂੰ ਸਕ੍ਰੈਪ ਕਰ ਸਕਦਾ ਹਾਂ?
- ਹਾਂ, ਪਲੇਅਰਾਈਟ ਉਪਭੋਗਤਾ-ਵਰਗੇ ਪਰਸਪਰ ਕ੍ਰਿਆਵਾਂ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਪੰਨਾਬੱਧ ਜਾਂ ਲੁਕਵੀਂ ਸਮੱਗਰੀ ਨੂੰ ਸਕ੍ਰੈਪ ਕਰਨ ਲਈ ਕਈ ਪੰਨਿਆਂ ਜਾਂ ਬਟਨਾਂ ਰਾਹੀਂ ਕਲਿੱਕ ਕਰਨਾ।
ਸਮੇਟਣਾ: ਵੈੱਬ ਸਕ੍ਰੈਪਿੰਗ ਵਿੱਚ ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਮੁੱਦਿਆਂ ਨੂੰ ਦੂਰ ਕਰਨਾ
ਪਲੇਅਰਾਈਟ ਨਾਲ ਸਕ੍ਰੈਪੀ ਨੂੰ ਜੋੜਨਾ ਵੈਬਸਾਈਟਾਂ 'ਤੇ ਗਤੀਸ਼ੀਲ ਸਮੱਗਰੀ ਨੂੰ ਸਕ੍ਰੈਪ ਕਰਨ ਵੇਲੇ ਦਰਪੇਸ਼ ਬਹੁਤ ਸਾਰੀਆਂ ਚੁਣੌਤੀਆਂ ਦਾ ਹੱਲ ਕਰਦਾ ਹੈ। ਬ੍ਰਾਊਜ਼ਰ ਵਿਵਹਾਰ ਦੀ ਨਕਲ ਕਰਕੇ, ਪਲੇਅਰਾਈਟ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਐਕਸਟਰੈਕਸ਼ਨ ਤੋਂ ਪਹਿਲਾਂ JavaScript ਸਮੱਗਰੀ ਪੂਰੀ ਤਰ੍ਹਾਂ ਰੈਂਡਰ ਕੀਤੀ ਗਈ ਹੈ।
ਕਾਰਜਕੁਸ਼ਲਤਾ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਲਈ ਸਮਾਂ ਸਮਾਪਤ ਸੈਟਿੰਗਾਂ ਨੂੰ ਵਿਵਸਥਿਤ ਕਰਨਾ ਅਤੇ ਬ੍ਰਾਊਜ਼ਰ ਦੀਆਂ ਕਿਸਮਾਂ ਨੂੰ ਨਿਰਧਾਰਤ ਕਰਨ ਵਰਗੇ ਤਰੀਕਿਆਂ ਨੂੰ ਲਾਗੂ ਕਰਨਾ ਮਹੱਤਵਪੂਰਨ ਹੈ। ਇਹਨਾਂ ਵਿਕਲਪਾਂ ਨੂੰ ਫਾਈਨ-ਟਿਊਨਿੰਗ ਕਰਕੇ, ਸਕ੍ਰੈਪੀ ਉਪਭੋਗਤਾ ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਟਾਈਮਆਉਟ ਵਰਗੀਆਂ ਆਮ ਗਲਤੀਆਂ ਵਿੱਚ ਚੱਲੇ ਬਿਨਾਂ ਵਧੇਰੇ ਗੁੰਝਲਦਾਰ ਵੈਬਸਾਈਟਾਂ ਨੂੰ ਸਕ੍ਰੈਪ ਕਰ ਸਕਦੇ ਹਨ।
JavaScript ਵੈੱਬ ਸਕ੍ਰੈਪਿੰਗ ਹੱਲ ਲਈ ਸਰੋਤ ਅਤੇ ਹਵਾਲੇ
- ਇਹ ਲੇਖ JavaScript-ਭਾਰੀ ਵੈਬਸਾਈਟਾਂ ਤੋਂ ਗਤੀਸ਼ੀਲ ਸਮੱਗਰੀ ਨੂੰ ਸਕ੍ਰੈਪ ਕਰਨ ਲਈ ਪਲੇਅ ਰਾਈਟ ਨਾਲ ਸਕ੍ਰੈਪੀ ਨੂੰ ਏਕੀਕ੍ਰਿਤ ਕਰਨ ਦੀਆਂ ਵਿਹਾਰਕ ਉਦਾਹਰਣਾਂ ਤੋਂ ਪ੍ਰੇਰਿਤ ਸੀ। ਨਾਟਕਕਾਰ ਦੀ ਵਰਤੋਂ ਬਾਰੇ ਵਿਸਤ੍ਰਿਤ ਦਸਤਾਵੇਜ਼ ਇੱਥੇ ਲੱਭੇ ਜਾ ਸਕਦੇ ਹਨ: ਨਾਟਕਕਾਰ ਪਾਈਥਨ ਦਸਤਾਵੇਜ਼ੀ .
- ਸਕ੍ਰੈਪੀ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ JavaScript ਰੈਂਡਰਿੰਗ ਅਤੇ ਸਕ੍ਰੈਪਿੰਗ ਤਕਨੀਕਾਂ ਨੂੰ ਸੰਭਾਲਣ ਬਾਰੇ ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਕਿਰਪਾ ਕਰਕੇ ਇੱਥੇ ਜਾਉ: ਸਕ੍ਰੈਪੀ ਅਧਿਕਾਰਤ ਦਸਤਾਵੇਜ਼ .
- ਸਕ੍ਰੈਪੀ ਵਿੱਚ ਪਲੇਅ ਰਾਈਟ ਦੇ ਨਾਲ ਵਰਤੇ ਗਏ ਟਵਿਸਟਡ ਰਿਐਕਟਰ ਦੇ ਨਾਲ ਅਸਿੰਕ੍ਰੋਨਸ ਪ੍ਰੋਗਰਾਮਿੰਗ ਦੀਆਂ ਪੇਚੀਦਗੀਆਂ ਨੂੰ ਬਿਹਤਰ ਢੰਗ ਨਾਲ ਸਮਝਣ ਲਈ, ਵੇਖੋ: ਮਰੋੜਿਆ ਰਿਐਕਟਰ ਦਸਤਾਵੇਜ਼ .