抓取动态网页(完整的使用方式如下最近更新Workflow命令行帮助工具(组图))

优采云 发布时间: 2021-09-26 18:30

  抓取动态网页(完整的使用方式如下最近更新Workflow命令行帮助工具(组图))

  现在越来越多的网页使用前端渲染页面,这给抓取工作带来了很多麻烦。通过通常的方法,只会得到一堆js方法或者api接口。当然,我们不希望每个网站都那么努力地探索他们的 api。

  那有什么好办法,叫全能的谷歌老爸,puppeteer可以模拟chrome打开网页,还可以截图转换成pdf文件。当然,抓取数据不是问题,因为截图的前提是模拟前端渲染。效果就像实际打开网站。

  本文文章主要介绍如何通过puppeteer进行简单爬行

  下载

  1

  $ yarn add puppeteer

  用

  先看一个简单的例子,我们还是不问为什么直接运行代码

  1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

  const puppeteer = require('puppeteer');

(async () => {

const browser = await puppeteer.launch();

const page = await browser.newPage();

await page.goto('https://www.instagram.com/nike/');

// Get the "viewport" of the page, as reported by the page.

const dimensions = await page.evaluate(() => {

return {

width: document.documentElement.clientWidth,

height: document.documentElement.clientHeight,

title: document.title

};

});

console.log('Dimensions:', dimensions);

await browser.close();

})();

  运行后,你会发现它打印出了文档的宽度、高度和标题的各个属性。现在让我们分析一下这段代码的作用。

  分析选择器

  抓取页面时,可以借助谷歌浏览器的开发者工具直接复制选择器

  

  我们要获取这个页面的头像信息。从开发者工具复制的选择器如下

  1

  #react-root > section > main > article > header > div > div > div > img

  这时候我们就可以直接使用了

  1

2

3

  let avatarSelector = '#react-root > section > main > article > header > div > div > div > img'

let avatarDom = document.querySelector(avatarSelector)

avatar = avatarDom.src

  这样我们就可以很方便的分析某个dom元素了。当然,这种粘贴复制也不是万能的。很多时候我们需要对页面样式进行分析,才能找到更好的分析方法。

  完整的用法如下

  1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

  

const puppeteer = require('puppeteer');

(async () => {

const browser = await puppeteer.launch({headless: false});

const page = await browser.newPage();

await page.setJavaScriptEnabled(true);

await page.goto('https://www.instagram.com/nike/');

// Get the "viewport" of the page, as reported by the page.

const dimensions = await page.evaluate(() => {

// avatar

let avatarSelector = '#react-root > section > main > article > header > div > div > div > img'

let avatarDom = document.querySelector(avatarSelector)

let avatar = ''

if( avatarDom ){

avatar = avatarDom.src

}

// name

let nameSelector = '#react-root > section > main > article > header > section > div._ienqf > h1'

let nameDom = document.querySelector(nameSelector)

let name = ''

if( nameDom ){

name = nameDom.innerText;

}

return {

avatar: avatar,

name: name,

};

});

console.log('Dimensions:', dimensions);

await browser.close();

})();

  最近更新

  Alfred Workflow 命令行帮助工具

  最近阅读

  Go 判断数组中是否收录某项

  Vim 高级功能 vimgrep 全局搜索文件

  申请北京工作居留许可的一些细节

  Go 语法错误:函数体外的非声明语句

  Mac电脑查看字体文件位置

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线