aps*_*ers 15
通常,浏览器JavaScript只能在其原始域内进行爬网,因为抓取页面将通过Ajax完成,Ajax受同源策略的限制.
如果运行爬虫脚本的页面位于www.example.com上,则该脚本可以抓取www.example.com上的所有页面,但不能抓取任何其他来源的页面(除非某些边缘情况适用,例如Access-为另一台服务器上的页面设置Control-Allow-Origin标头.
如果你真的想在浏览器JS中编写一个功能齐全的爬虫,你可以写一个浏览器扩展:例如,Chrome扩展是打包的Web应用程序运行的特殊权限,包括跨源Ajax.这种方法的难点在于,如果要支持多个浏览器,则必须编写多个版本的爬网程序.(如果爬虫只是供个人使用,那可能不是问题.)
如果你使用服务器端的JavaScript,它是可能的.你应该看看node.js
可以在下面的链接中找到爬虫的示例:
http://www.colourcoding.net/blog/archive/2010/11/20/a-node.js-web-spider.aspx
Google 的 Chrome 团队于 2017 年 8 月发布了 puppeteer,这是一个节点库,为无头和非无头 Chrome 提供高级 API(无头 Chrome从 59 开始可用)。
它使用 Chromium 的嵌入式版本,因此保证开箱即用。如果您想使用特定的 Chrome 版本,可以通过启动 puppeteer 并使用可执行路径作为参数来实现,例如:
const browser = await puppeteer.launch({executablePath: '/path/to/Chrome'});
Run Code Online (Sandbox Code Playgroud)
导航到网页并截取屏幕截图的示例显示了它是多么简单(取自 GitHub 页面):
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({path: 'example.png'});
await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34725 次 |
| 最近记录: |