స్క్రాపీ మరియు ప్లేరైట్తో జావాస్క్రిప్ట్ మరియు గడువు ముగిసిన లోపాలను పరిష్కరించడం
ఉపయోగిస్తున్నప్పుడు స్క్రాపీ తో పాటు స్క్రాపీ నాటక రచయిత, జావాస్క్రిప్ట్ అవసరమయ్యే పేజీలను స్క్రాప్ చేయడానికి ప్రయత్నిస్తున్నప్పుడు మీరు సమస్యలను ఎదుర్కోవచ్చు. "దయచేసి JSని ప్రారంభించండి మరియు ఏదైనా ప్రకటన బ్లాకర్ని నిలిపివేయండి" అని అడిగే సందేశాన్ని అందుకోవడం ఒక సాధారణ సమస్య, దానితో పాటు సమయం ముగిసింది.
స్క్రాపీ మాత్రమే జావాస్క్రిప్ట్ని రెండర్ చేయనందున ఈ సమస్య సాధారణంగా తలెత్తుతుంది. దీన్ని నిర్వహించడానికి ప్లేరైట్ ఇంటిగ్రేట్ చేయబడినప్పుడు, ఇలాంటి వెబ్సైట్ల కోసం దీన్ని సరిగ్గా కాన్ఫిగర్ చేయడానికి అదనపు దశలు అవసరం వాల్ స్ట్రీట్ జర్నల్, ఇది జావాస్క్రిప్ట్పై ఎక్కువగా ఆధారపడుతుంది.
స్క్రాపీతో ప్లేరైట్ యొక్క ఏకీకరణ అటువంటి పరిమితులను అధిగమించే లక్ష్యంతో ఉంది, కానీ సరికాని సెట్టింగ్లు లేదా బ్రౌజర్ ప్రవర్తనలను పట్టించుకోకపోవడం ఇప్పటికీ నిరాశపరిచే లోపాలకు దారితీయవచ్చు. అయితే, సరైన కాన్ఫిగరేషన్లు మరియు డీబగ్గింగ్ వ్యూహాలతో, మీరు ఈ అడ్డంకులను దాటవేయవచ్చు.
ఈ గైడ్లో, JavaScript లోడింగ్ సమస్యలు మరియు గడువు ముగిసిన ఎర్రర్ల వంటి సాధారణ ఆపదలను నివారించడానికి కోడ్ సెటప్లు మరియు డీబగ్గింగ్ చిట్కాలతో సహా స్క్రాపీ మరియు ప్లేరైట్తో స్క్రాప్ చేయడం యొక్క వాస్తవ-ప్రపంచ ఉదాహరణను మేము చర్చిస్తాము.
ఆదేశం | ఉపయోగం యొక్క ఉదాహరణ |
---|---|
పేజీ విధానం | ఇది ఎ స్క్రాపీ నాటక రచయిత ప్లేరైట్ పేజీ వస్తువుపై క్లిక్ చేయడం లేదా వేచి ఉండటం వంటి బ్రౌజర్ చర్యలను అనుకరించడం వంటి పద్ధతులను అమలు చేయడానికి మిమ్మల్ని అనుమతించే ఆదేశం. ఉదాహరణకు, PageMethod('wait_for_timeout', 5000) కొనసాగించడానికి ముందు 5 సెకన్లు వేచి ఉండమని ప్లేరైట్ని చెబుతుంది. |
scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler | ఇది అందించిన అనుకూల డౌన్లోడ్ హ్యాండ్లర్ స్క్రాపీ నాటక రచయిత జావాస్క్రిప్ట్ రెండరింగ్ అవసరమయ్యే HTTP అభ్యర్థనలను నిర్వహించడానికి. ఇది ప్లేరైట్ను స్క్రాపీతో అనుసంధానిస్తుంది, స్పైడర్ను 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' స్క్రాపీపై ఆధారపడిన ప్లేరైట్తో పని చేయడానికి అనుమతిస్తుంది అసిన్సియో. |
PLAYWRIGHT_DEFAULT_NAVIGATION_TIMEOUT | ఈ సెట్టింగ్ Playwright కోసం డిఫాల్ట్ నావిగేషన్ గడువును సర్దుబాటు చేస్తుంది. గడువు ముగింపు విలువను పెంచడం ద్వారా, ఉదా., 60000 ms, ఇది సమయం ముగిసేలోపు క్లిష్టమైన వెబ్ పేజీలను లోడ్ చేయడానికి మరియు రెండర్ చేయడానికి ప్లేరైట్కు తగినంత సమయం ఉందని నిర్ధారిస్తుంది. |
సమయం ముగియడానికి_వెయిట్ చేయండి | నిర్దిష్ట సమయానికి అమలును పాజ్ చేయడానికి ఉపయోగించే ప్లేరైట్-నిర్దిష్ట పద్ధతి. స్క్రిప్ట్లో, ప్రక్రియను 5 సెకన్లపాటు ఆలస్యం చేయడానికి wait_for_timeout ఉపయోగించబడుతుంది, ఇది పేజీ యొక్క JavaScript లోడ్ మరియు అమలు చేయడానికి తగినంత సమయాన్ని అనుమతిస్తుంది. |
స్క్రాపీ మరియు ప్లేరైట్ ఇంటిగ్రేషన్ యొక్క వివరణాత్మక వివరణ
అందించిన స్క్రిప్ట్లలో, ఏకీకరణ స్క్రాపీ తో నాటక రచయిత WSJ వంటి జావాస్క్రిప్ట్-భారీ వెబ్సైట్లను నిర్వహించడానికి కీలకమైనది. సాధారణంగా, స్క్రాపీ స్థానికంగా జావాస్క్రిప్ట్ అమలును నిర్వహించదు. ఇది డైనమిక్ కంటెంట్ను స్క్రాప్ చేసేటప్పుడు సమస్యలను కలిగిస్తుంది ఎందుకంటే పేజీ పూర్తిగా లోడ్ కాకపోవచ్చు, "దయచేసి JSని ప్రారంభించండి మరియు ఏదైనా ప్రకటన బ్లాకర్ని నిలిపివేయండి" అనే లోపానికి దారి తీస్తుంది. ప్లేరైట్ను డౌన్లోడ్ హ్యాండ్లర్గా ఉపయోగించడం ద్వారా జావాస్క్రిప్ట్ మరియు ఇతర డైనమిక్ కంటెంట్ను రెండరింగ్ చేసే పూర్తి బ్రౌజర్గా పేజీలను లోడ్ చేయడానికి స్క్రాపీని అనుమతిస్తుంది.
స్పైడర్లో నిర్వచించబడిన అనుకూల సెట్టింగ్లు ఈ ఏకీకరణకు అవసరం. HTTP మరియు HTTPS అభ్యర్థనల కోసం స్క్రాపీ ప్లేరైట్ హ్యాండ్లర్ని ఉపయోగించాలని మేము పేర్కొంటున్నాము. అదనంగా, సెట్ PLAYWRIGHT_BROWSER_TYPE కు "క్రోమియం" చాలా వెబ్సైట్లతో అనుకూలతను నిర్ధారించడంలో సహాయపడుతుంది. స్పైడర్ బ్రౌజర్ను నాన్-హెడ్లెస్ మోడ్లో లాంచ్ చేయడానికి కూడా కాన్ఫిగర్ చేయబడింది, అంటే బ్రౌజర్ కనిపించే UIని కలిగి ఉంటుంది, ఇది క్లిష్టమైన సైట్లను స్క్రాప్ చేసేటప్పుడు డీబగ్గింగ్ చేయడానికి సహాయపడుతుంది. ఈ కాన్ఫిగరేషన్లు "దయచేసి JSని ప్రారంభించు" ఎర్రర్ వంటి ప్రాథమిక బ్లాక్లను దాటవేసి, వెబ్సైట్తో మానవ-లాంటి పరస్పర చర్యలను అనుకరించడానికి ప్లేరైట్ను అనుమతిస్తాయి.
start_requests పద్ధతిలో, ప్రతి అభ్యర్థన ఉత్తీర్ణత ద్వారా ప్లేరైట్ని ఉపయోగించడానికి కాన్ఫిగర్ చేయబడింది meta={'నాటక రచయిత': నిజం}. ఇది స్క్రాపీ యొక్క డిఫాల్ట్ డౌన్లోడ్ కాకుండా ప్లేరైట్ అభ్యర్థనను నిర్వహిస్తుందని నిర్ధారిస్తుంది. యొక్క ఉపయోగం పేజీ విధానం నిజమైన బ్రౌజింగ్ పరిస్థితులను అనుకరించడం కోసం కీలకం. లైన్ పేజ్ మెథడ్('వెయిట్_ఫర్_టైమ్ అవుట్', 5000) అన్ని డైనమిక్ జావాస్క్రిప్ట్ కంటెంట్ను లోడ్ చేయడానికి పేజీకి తగినంత సమయం ఇస్తూ, 5 సెకన్ల పాటు వేచి ఉండమని ప్లేరైట్ని నిర్దేశిస్తుంది. ఇది పూర్తిగా లోడ్ కావడానికి సమయం పట్టే వెబ్సైట్లను స్క్రాప్ చేసేటప్పుడు, సమయం ముగియడం మరియు లోపాలను నిరోధించడంలో ప్రత్యేకంగా ఉపయోగపడుతుంది.
అన్వయించే పద్ధతి అసలు స్క్రాపింగ్ జరుగుతుంది. ప్లేరైట్ పేజీని రెండర్ చేసిన తర్వాత, స్క్రాపీ స్వాధీనం చేసుకుని HTML కంటెంట్ని ఉపయోగించి అన్వయిస్తుంది సెలెక్టర్ వస్తువు. ఇది XPath లేదా CSS సెలెక్టర్లను ఉపయోగించి అవసరమైన డేటా యొక్క ఖచ్చితమైన వెలికితీతకు అనుమతిస్తుంది. ప్లేరైట్ యొక్క ఏకీకరణ అన్వయించబడిన HTML మొత్తం జావాస్క్రిప్ట్-రెండర్ చేయబడిన కంటెంట్ను కలిగి ఉందని నిర్ధారిస్తుంది, ఇది డైనమిక్ వెబ్ పేజీలకు మరింత ఖచ్చితమైనది మరియు నమ్మదగినదిగా చేస్తుంది. స్క్రిప్ట్ విజయవంతమైన స్క్రాపింగ్ను సూచించడానికి నిర్ధారణ సందేశాన్ని ("ఇది పని చేస్తోంది") అవుట్పుట్ చేస్తుంది, కానీ వాస్తవ-ప్రపంచ దృష్టాంతంలో, మీరు ఇక్కడ డేటాను సంగ్రహించి నిల్వ చేస్తారు.
స్క్రాపీ మరియు ప్లేరైట్తో స్క్రాపింగ్: జావాస్క్రిప్ట్-హెవీ వెబ్సైట్లకు బలమైన పరిష్కారం
ఈ పరిష్కారం WSJ వంటి జావాస్క్రిప్ట్-భారీ పేజీలను లోడ్ చేయడానికి ప్లేరైట్తో పైథాన్స్ స్క్రాపీని ఎలా ఉపయోగించాలో ప్రదర్శిస్తుంది, "దయచేసి JSని ప్రారంభించండి" మరియు గడువు ముగియడం వంటి సాధారణ లోపాలను నిర్వహిస్తుంది.
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 ఎలిమెంట్లు పూర్తిగా లోడ్ అయ్యాయని నిర్ధారించుకోవడానికి కంటెంట్ని పొందే ముందు వేచి ఉండేలా ప్లేరైట్ కాన్ఫిగర్ చేయబడింది. బాట్ డిటెక్షన్ లేదా డైనమిక్ కంటెంట్ని ఉపయోగించి యాక్సెస్ను బ్లాక్ చేసే లేదా పరిమితం చేసే వెబ్సైట్ల నుండి డేటా వెలికితీతను ఈ టెక్నిక్ గణనీయంగా మెరుగుపరుస్తుంది.
బహుళ-పేజీ వెబ్సైట్లను నిర్వహించగల సామర్థ్యాన్ని పరిగణనలోకి తీసుకోవాల్సిన ఒక అదనపు అంశం. ప్లేరైట్ జావాస్క్రిప్ట్ ఎలిమెంట్లను లోడ్ చేయడమే కాకుండా బటన్లను క్లిక్ చేయడం లేదా బహుళ పేజీల ద్వారా నావిగేట్ చేయడం వంటి వినియోగదారు-వంటి పరస్పర చర్యలకు మద్దతు ఇస్తుంది. కంటెంట్ అనేక విభాగాలలో విభజించబడిన లేదా క్లిక్-టు-లోడ్ మెకానిజమ్ల వెనుక దాగి ఉన్న వెబ్సైట్లకు ఇది ప్రత్యేకంగా ఉపయోగపడుతుంది, నిర్మాణాత్మక మరియు విలువైన డేటాను స్క్రాప్ చేయడంలో మీకు మరింత సౌలభ్యాన్ని అందిస్తుంది.
స్క్రాపీ మరియు ప్లేరైట్తో జావాస్క్రిప్ట్-హెవీ వెబ్సైట్లను స్క్రాప్ చేయడం గురించి సాధారణ ప్రశ్నలు
- జావాస్క్రిప్ట్-హెవీ వెబ్సైట్లకు ప్లేరైట్ ఎలా సహాయం చేస్తాడు?
- ప్లేరైట్ నిజమైన బ్రౌజర్ను అనుకరిస్తాడు, పేజీని తిరిగి పంపే ముందు జావాస్క్రిప్ట్ను లోడ్ చేయడానికి మరియు అమలు చేయడానికి అనుమతిస్తుంది Scrapy స్క్రాపింగ్ కోసం.
- నేను "దయచేసి JSని ప్రారంభించు" సందేశాన్ని ఎందుకు పొందగలను?
- స్క్రాపీ స్వయంగా జావాస్క్రిప్ట్ని రెండర్ చేయలేనందున ఈ లోపం సంభవిస్తుంది. సమీకృతం చేయడమే పరిష్కారం Playwright JavaScript ఆధారిత కంటెంట్ని నిర్వహించడానికి.
- నేను ఇతర బ్రౌజర్లతో ప్లేరైట్ని ఉపయోగించవచ్చా?
- అవును, ప్లేరైట్ వంటి బహుళ బ్రౌజర్లకు మద్దతు ఇస్తుంది chromium, firefox, మరియు webkit, ఇది సెట్టింగులలో పేర్కొనవచ్చు.
- ప్లేరైట్లో సమయం ముగియడాన్ని నేను ఎలా నివారించగలను?
- మీరు ఉపయోగించడం ద్వారా సమయం ముగియడాన్ని సర్దుబాటు చేయవచ్చు PageMethod('wait_for_timeout', 5000) జావాస్క్రిప్ట్ కంటెంట్ పూర్తిగా లోడ్ కావడానికి ఎక్కువ సమయం ఇవ్వడానికి.
- నేను ప్లేరైట్ని ఉపయోగించి బహుళ పేజీలను స్క్రాప్ చేయవచ్చా?
- అవును, పేజినేట్ లేదా దాచిన కంటెంట్ను స్క్రాప్ చేయడానికి బహుళ పేజీలు లేదా బటన్ల ద్వారా క్లిక్ చేయడం వంటి వినియోగదారు-వంటి పరస్పర చర్యలను ప్లేరైట్ అనుమతిస్తుంది.
ర్యాపింగ్ అప్: వెబ్ స్క్రాపింగ్లో జావాస్క్రిప్ట్ సమస్యలను అధిగమించడం
స్క్రాపీని ప్లేరైట్తో కలపడం వెబ్సైట్లలో డైనమిక్ కంటెంట్ను స్క్రాప్ చేసేటప్పుడు ఎదుర్కొనే అనేక సవాళ్లను పరిష్కరిస్తుంది. బ్రౌజర్ ప్రవర్తనను అనుకరించడం ద్వారా, జావాస్క్రిప్ట్ కంటెంట్ వెలికితీసే ముందు పూర్తిగా రెండర్ చేయబడిందని ప్లేరైట్ నిర్ధారిస్తుంది.
పనితీరును మెరుగుపరచడానికి గడువు ముగింపు సెట్టింగ్లను సర్దుబాటు చేయడం మరియు బ్రౌజర్ రకాలను పేర్కొనడం వంటి పద్ధతులను అమలు చేయడం చాలా కీలకం. ఈ ఎంపికలను చక్కగా ట్యూన్ చేయడం ద్వారా, స్క్రాపీ యూజర్లు జావాస్క్రిప్ట్ టైమ్అవుట్ల వంటి సాధారణ ఎర్రర్లకు గురికాకుండానే మరింత క్లిష్టమైన వెబ్సైట్లను స్క్రాప్ చేయవచ్చు.
జావాస్క్రిప్ట్ వెబ్ స్క్రాపింగ్ సొల్యూషన్స్ కోసం మూలాలు మరియు సూచనలు
- ఈ కథనం జావాస్క్రిప్ట్-హెవీ వెబ్సైట్ల నుండి డైనమిక్ కంటెంట్ను స్క్రాప్ చేయడం కోసం ప్లేరైట్తో స్క్రాపీని అనుసంధానించే ఆచరణాత్మక ఉదాహరణల ద్వారా ప్రేరణ పొందింది. ప్లేరైట్ వినియోగంపై వివరణాత్మక డాక్యుమెంటేషన్ ఇక్కడ చూడవచ్చు: నాటక రచయిత పైథాన్ డాక్యుమెంటేషన్ .
- స్క్రాపీని ఉపయోగించి జావాస్క్రిప్ట్ రెండరింగ్ మరియు స్క్రాపింగ్ టెక్నిక్లను నిర్వహించడంపై తదుపరి అంతర్దృష్టుల కోసం, దయచేసి సందర్శించండి: స్క్రాపీ అధికారిక డాక్యుమెంటేషన్ .
- స్క్రాపీలో ప్లేరైట్తో పాటు ఉపయోగించిన ట్విస్టెడ్ రియాక్టర్తో అసమకాలిక ప్రోగ్రామింగ్ యొక్క చిక్కులను బాగా అర్థం చేసుకోవడానికి, వీటిని చూడండి: ట్విస్టెడ్ రియాక్టర్ డాక్యుమెంటేషన్ .