add OOP scraping
This commit is contained in:
		
							parent
							
								
									1bcea261fb
								
							
						
					
					
						commit
						532295a610
					
				
					 1 changed files with 59 additions and 0 deletions
				
			
		|  | @ -2,3 +2,62 @@ | |||
| Read the contents of the page.   | ||||
| */ | ||||
| 
 | ||||
| export default class reader { | ||||
| 	constructor(scraper_fields) { | ||||
| 		let field_content; | ||||
| 
 | ||||
| 		if (Array.isArray(scraper_fields)) { | ||||
| 			// Convert scraper_fields to a dictionary.
 | ||||
| 			let scraper_fields_all = {}; | ||||
| 
 | ||||
| 			for (let field_index = 0; field_index < scraper_fields.length; field_index++) { | ||||
| 				scraper_fields_all[field_index] = scraper_fields[field_index]; | ||||
| 			} | ||||
| 
 | ||||
| 			scraper_fields = scraper_fields_all; | ||||
| 		}; | ||||
| 		if (typeof scraper_fields === "object" && scraper_fields != null && scraper_fields) { | ||||
| 
 | ||||
| 			/* Read for the particular fields. */ | ||||
| 			function read(fields) { | ||||
| 				let field_names = Object.keys(fields), field_data = {}; | ||||
| 
 | ||||
| 				for (let field_index = 0; field_index < fields.length; field_index++) { | ||||
| 					let field_current = fields[field_names[field_index]]; | ||||
| 
 | ||||
| 					if (field_current) { | ||||
| 						// Check if array.
 | ||||
| 						if (Array.isArray(field_current)) { | ||||
| 							field_data[field_names[field_index]] = []; | ||||
| 
 | ||||
| 							 | ||||
| 							if (typeof field_current[0] === "object" && field_current[0] != null && field_current[0]) { | ||||
| 								field_data[field_names[field_index]].push(read(field_current[0])); | ||||
| 							} else { | ||||
| 								let matching_elements = (document.querySelectorAll(field_current[0])); | ||||
| 
 | ||||
| 								for (let field_current_index = 0; field_current_index < matching_elements.length; field_current_index++) { | ||||
| 									field_data[field_names[field_index]].push(matching_elements[field_current_index].innerText); | ||||
| 								}; | ||||
| 							}; | ||||
| 						} else if (typeof field_current === "object" && field_current != null && field_current) { | ||||
| 							field_data[field_names[field_index]] = read(field_current); | ||||
| 						} else { | ||||
| 							field_data[field_names[field_index]] = (document.querySelector(field_current)) ? document.querySelector(field_current).innerText : null; | ||||
| 						}; | ||||
| 					}; | ||||
| 				}; | ||||
| 
 | ||||
| 				return field_data; | ||||
| 			}; | ||||
| 
 | ||||
| 			field_content = read(scraper_fields); | ||||
| 		} | ||||
| 
 | ||||
| 		if (Object.keys(field_content).length > 0) { | ||||
| 			for (let field_name in Object.keys(field_content)) { | ||||
| 				this[field_name] = field_content[field_name]; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue