资讯专栏INFORMATION COLUMN

puppeteer爬虫

scola666 / 2266人阅读

摘要:利用空闲时间,学习了下爬虫,我也想爬取下网上的资源部分参数名称参数类型参数说明在请求的过程中是否忽略报错信息,默认为是否以无头的模式运行,也就是不显示,默认为可执行文件的路径,默认是使用它自带的如果你想指定一个自己的路径,可以通过这个参数设

利用空闲时间,学习了下puppeteer爬虫,我也想爬取下网上的资源
1.部分api

puppeteer.launch(options)

参数名称 参数类型 参数说明
ignoreHTTPSErrors boolean 在请求的过程中是否忽略 Https 报错信息,默认为 false
headless boolean 是否以“无头”的模式运行chrome,也就是不显示UI,默认为true
executablePath string 可执行文件的路径,Puppeteer 默认是使用它自带的 chrome webdriver, 如果你想指定一个自己的 webdriver 路径,可以通过这个参数设置
slowMo number 使 Puppeteer 操作减速,单位是毫秒。如果你想看看 Puppeteer 的整个工作过程,这个参数将非常有用
args Array(String) 传递给 chrome 实例的其他参数,比如你可以设置浏览器窗口大小具体参数
timeout number 等待chrome实例启动的最长时间,默认是3000ms,如果传入0,则不限制时间
dumpio boolean 是否将浏览器锦程stdout和stderr导入到process.stdout和process.stderr中,默认为false
userDataDir string 设置用户数据目录,默认linux是在~/.config目录,window 默认在 C:Users{USER}AppDataLocalGoogleChromeUser Data, 其中 {USER} 代表当前登录的用户名
env Object 指定对chromium可见的环境变量,默认为process.env
devtools boolean 是否为每个选项卡自动打开DevTools面板,这个选项只有当headless设置为false的时候有效

browser对象api

方法名 说明
browser.close() 返回一个promise对象,用于关闭浏览器
browser.newPage() 返回一个promise对象,创建一个page实例

page对象

方法名 说明
page.goto(url[, options]) 返回一个promise对象,url是目标链接
page.waitForSelector() 等待某个选择器的元素加载之后,这个元素可以是异步加载的
page.evaluate(pageFunction[,args]) 返回一个可序列化的普通对象,pageFunction 表示要在页面执行的函数, args 表示传入给 pageFunction 的参数
2.爬取电影网站
const puppeteer = require("puppeteer");

/* 爬虫的目标链接地址: 豆瓣电影 */
const url = `https://movie.douban.com/tag/#/?sort=R&range=0,10&tags=`;

const sleep = time => new Promise(resolve => {
  setTimeout(resolve, time);
});

(async () => {
  console.log("crawler start to visit the target address");

  /* dumpio 是否将浏览器进程stdout和stderr导入到process.stdout和process.stderr中 */
  const browser = await puppeteer.launch({
    args: ["--no-sandbox"],
    dumpio: false
  });
  const page = await browser.newPage();
  await page.goto(url, {
    waitUntil: "networkidle2"
  });

  await sleep(3000);

  await page.waitForSelector(".more");

  for(let i = 0; i < 1; i++) {
    await sleep(3000);
    await page.click(".more");
  }

  const result = await page.evaluate(() => {
    let $ = window.$;
    let nodeItems = $(".list-wp a");
    let links = [];
    
    /* 获取对应的元素节点 */
    if(nodeItems.length >= 1) {
      nodeItems.each((index, item) => {
        let elem = $(item);
        let movieId = elem.find("div").data("id");
        let title = elem.find(".title").text();
        let rate = Number(elem.find(".rate").text());
        let poster = elem.find("img").attr("src").replace("s_ratio_poster","l_ratio_poster");

        links.push({
          movieId,
          title,
          rate,
          poster,
        })
      })
    }

    return links;
  });

  browser.close();
  console.log(result)
})();
3.爬取网站内容生成pdf文件
const puppeteer = require("puppeteer");
const url = "https://cn.vuejs.org/v2/guide/";
(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto(url, { waitUntil: "networkidle0" });
    /* 选择你要输出的那个PDF文件路径,把爬取到的内容输出到PDF中,必须是存在的PDF,可以是空内容,如果不是空的内容PDF,那么会覆盖内容 */
    let pdfFilePath = "./index.pdf";
    /* 根据你的配置选项,我们这里选择A4纸的规格输出PDF,方便打印 */
    await page.pdf({
        path: pdfFilePath,
        format: "A4",
        scale: 1,
        printBackground: true,
        landscape: false,
        displayHeaderFooter: false
    });
    browser.close();
})()
正在努力学习中,若对你的学习有帮助,留下你的印记呗(点个赞咯^_^)

往期好文推荐:

使用vue开发移动端管理后台

实现单行及多行文字超出后加省略号

node之本地服务器图片上传

纯css实现瀑布流(multi-column多列及flex布局)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105214.html

相关文章

  • 手把手教你如何用Crawlab构建技术文章聚合平台(一)

    摘要:本文将介绍如何使用和抓取主流的技术博客文章,然后用搭建一个小型的技术文章聚合平台。是谷歌开源的基于和的自动化测试工具,可以很方便的让程序模拟用户的操作,对浏览器进行程序化控制。相对于,是新的开源项目,而且是谷歌开发,可以使用很多新的特性。 背景 说到爬虫,大多数程序员想到的是scrapy这样受人欢迎的框架。scrapy的确不错,而且有很强大的生态圈,有gerapy等优秀的可视化界面。但...

    LinkedME2016 评论0 收藏0
  • 手把手教你如何用Crawlab构建技术文章聚合平台(一)

    摘要:本文将介绍如何使用和抓取主流的技术博客文章,然后用搭建一个小型的技术文章聚合平台。是谷歌开源的基于和的自动化测试工具,可以很方便的让程序模拟用户的操作,对浏览器进行程序化控制。相对于,是新的开源项目,而且是谷歌开发,可以使用很多新的特性。 背景 说到爬虫,大多数程序员想到的是scrapy这样受人欢迎的框架。scrapy的确不错,而且有很强大的生态圈,有gerapy等优秀的可视化界面。但...

    Jeffrrey 评论0 收藏0
  • puppeteer爬虫

    摘要:爬虫爬虫又称网络机器人。每天或许你都会使用搜索引擎,爬虫便是搜索引擎重要的组成部分,爬取内容做索引。那我萌就来探讨一下网络爬虫吧。对后关于不仅仅可以用来做爬虫,因为可以编程,无头浏览器,可以用来自动化测试等等。 @(爬虫)[puppeteer|] 爬虫又称网络机器人。每天或许你都会使用搜索引擎,爬虫便是搜索引擎重要的组成部分,爬取内容做索引。现如今大数据,数据分析很火,那数据哪里来呢,...

    felix0913 评论0 收藏0
  • 使用Node.js爬取任意网页资源并输出高质量PDF文件到本地~

    摘要:上面只爬取了京东首页的图片内容,假设我的需求进一步扩大,需要爬取京东首页中的所有标签对应的跳转网页中的所有的文字内容,最后放到一个数组中。 showImg(https://segmentfault.com/img/bVbtVeV?w=3840&h=2160); 本文适合无论是否有爬虫以及Node.js基础的朋友观看~ 需求: 使用Node.js爬取网页资源,开箱即用的配置 将爬取到的...

    seasonley 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<