website-scraper: Make Source.attr optional. Add more options. (#40137)

* Make `attr` optional.

As per the defaults:

https://github.com/website-scraper/node-website-scraper/blob/050cdd011231033477264df9f432a7925927575f/lib/config/defaults.js

* Capitalize interface `Scrape`

* Use `any[]` format for array

* add missing semicolon

* add line breaks between interfaces

* convert to single quotes

* remove `attr` for a test

* add more options
This commit is contained in:
garyking
2019-11-06 08:51:35 -08:00
committed by Nathan Shively-Sanders
parent 2861611bb2
commit 05926a90ea
2 changed files with 38 additions and 26 deletions
+15 -5
View File
@@ -13,19 +13,23 @@ declare namespace websiteScraper {
url: string;
filename: string;
}
interface SubDirectory {
directory: string;
extensions: string[];
}
interface Source {
selector: string;
attr: string;
attr?: string;
}
interface RequestOptions {
headers: request.Headers
headers: request.Headers;
}
interface Options {
urls: Array<string | Url>;
urls: (string | Url)[];
directory: string;
urlFilter?: (url: string) => boolean;
filenameGenerator?: string;
@@ -37,21 +41,27 @@ declare namespace websiteScraper {
recursive?: boolean;
maxDepth?: number;
ignoreErrors?: boolean;
maxRecursiveDepth?: number;
requestConcurrency?: number;
plugins?: object[];
}
interface Resource {
url: string;
filename: string;
assets: Resource[];
}
interface Callback {
(error: any | null, result: Resource[] | null): void;
}
interface scrape {
interface Scrape {
(options: Options, callback: Callback): void;
(options: Options): Promise<Resource[]>;
}
}
declare var websiteScraper: websiteScraper.scrape;
declare const websiteScraper: websiteScraper.Scrape;
export = websiteScraper;
+23 -21
View File
@@ -1,31 +1,33 @@
import scraper = require("website-scraper");
import scraper = require('website-scraper');
scraper({
urls: [
"http://nodejs.org/",
{ url: "http://nodejs.org/about", filename: "about.html" },
{ url: "http://blog.nodejs.org/", filename: "blog.html" }
'http://nodejs.org/',
{ url: 'http://nodejs.org/about', filename: 'about.html' },
{ url: 'http://blog.nodejs.org/', filename: 'blog.html' },
],
directory: "/path/to/save",
directory: '/path/to/save',
subdirectories: [
{ directory: "img", extensions: [".jpg", ".png", ".svg"] },
{ directory: "js", extensions: [".js"] },
{ directory: "css", extensions: [".css"] }
{ directory: 'img', extensions: ['.jpg', '.png', '.svg'] },
{ directory: 'js', extensions: ['.js'] },
{ directory: 'css', extensions: ['.css'] },
],
sources: [
{ selector: "img", attr: "src" },
{ selector: "link[rel=\"stylesheet\"]", attr: "href" },
{ selector: "script", attr: "src" }
{ selector: 'img' },
{ selector: 'link[rel="stylesheet"]', attr: 'href' },
{ selector: 'script', attr: 'src' },
],
request: {
headers: {
"User-Agent":
"Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 4 Build/JOP40D)\
AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19"
}
}
}).then(function(result) {
console.log(result);
}).catch(function(err) {
console.log(err);
});
'User-Agent':
'Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 4 Build/JOP40D)\
AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19',
},
},
})
.then(function(result) {
console.log(result);
})
.catch(function(err) {
console.log(err);
});