一 安装依赖

  1. yarn init -y
  2. yarn add koa puppeteer
  3. yarn add nodemon -g(看情况)

二 抓取页面

  1. const puppeteer=require('puppeteer');
  2. const url="https://movie.douban.com/top250";
  3. async function run(){
  4. /* 1.启动puppeteer,创建一个Chrome的实例 */
  5. const browser=await puppeteer.launch();
  6. /* 2.在浏览器中新建一个页面 */
  7. const page=await browser.newPage();
  8. /* 3.使用page.goto()函数去打开一个页面 */
  9. await page.goto(url)
  10. /* 4.抓取数据--使用screenshot函数去抓取页面 */
  11. await page.screenshot({
  12. path:"douban.png"
  13. })
  14. /* 5.关闭浏览器 */
  15. await browser.close()
  16. }
  17. run()
  1. yarn start

三 抓取页面数据 拉勾网 招聘

  1. const puppeteer=require('puppeteer');
  2. const url="https://www.lagou.com/zhaopin/";
  3. async function run(){
  4. /* 1.启动puppeteer,创建一个Chrome的实例 */
  5. const browser=await puppeteer.launch(
  6. {
  7. headless:false,
  8. slowMo:20
  9. }
  10. );
  11. /* 2.在浏览器中新建一个页面 */
  12. const page=await browser.newPage();
  13. /* 3.使用page.goto()函数去打开一个页面 */
  14. await page.goto(url,{
  15. waitUntil:'networkidle2'
  16. })
  17. /* 4.选中点击的元素 */
  18. /* 5.让页面等待1s */
  19. await page.waitFor(2000)
  20. await page.hover(".con_list_item")
  21. /* 6.page.evaluate() 可以让我们使用DOM选择器 */
  22. let res=await page.evaluate(()=>{
  23. var $=window.jQuery;
  24. var items=$(".con_list_item"); //抓取那一块的字段名
  25. var links=[];
  26. if(items.length>0){
  27. items.each((index,item)=>{
  28. var company_name=$(item).find(".company_name a").html();
  29. var com_logo=$(item).find(".com_logo img").attr("src");
  30. var money=$(item).find(".p_bot .money").html();
  31. var position=$(item).find(".p_top h3").html();
  32. links.push({
  33. company_name,
  34. com_logo,
  35. money,
  36. position
  37. })
  38. })
  39. }
  40. return links;
  41. })
  42. //关闭浏览器
  43. browser.close()
  44. console.log(res)
  45. }
  46. run()

第一章 puppeteer爬虫 - 图1

四 让数据返回前端

新建一个文件夹,再建一个db.js,将index,js里面的内容放到里面

  1. const puppeteer=require('puppeteer');
  2. const url="https://www.lagou.com/zhaopin/";
  3. async function run(){
  4. /* 1.启动puppeteer,创建一个Chrome的实例 */
  5. const browser=await puppeteer.launch(
  6. // {
  7. // headless:false,
  8. // slowMo:20
  9. // }
  10. );
  11. /* 2.在浏览器中新建一个页面 */
  12. const page=await browser.newPage();
  13. /* 3.使用page.goto()函数去打开一个页面 */
  14. await page.goto(url,{
  15. waitUntil:'networkidle2'
  16. })
  17. /* 4.选中点击的元素 */
  18. /* 5.让页面等待1s */
  19. await page.waitFor(2000)
  20. await page.hover(".con_list_item")
  21. /* 6.page.evaluate() 可以让我们使用DOM选择器 */
  22. let res=await page.evaluate(()=>{
  23. var $=window.jQuery;
  24. var items=$(".con_list_item"); //抓取那一块的字段名
  25. var links=[];
  26. if(items.length>0){
  27. items.each((index,item)=>{
  28. var company_name=$(item).find(".company_name a").html();
  29. var com_logo=$(item).find(".com_logo img").attr("src");
  30. var money=$(item).find(".p_bot .money").html();
  31. var position=$(item).find(".p_top h3").html();
  32. links.push({
  33. company_name,
  34. com_logo,
  35. money,
  36. position
  37. })
  38. })
  39. }
  40. return links;
  41. })
  42. browser.close()
  43. return res;
  44. }
  45. module.exports=run; //导出

五 在index.js中导入db.js

  1. const run=require('./reptile/db');
  2. const koa=require('koa');
  3. const app=new koa();
  4. app.use(async ctx=>{
  5. var data=await run();
  6. ctx.body=data;
  7. })
  8. app.listen(8080)

六 安装路由router

  1. //1.安装依赖
  2. yarn add koa-router
  3. //2.导入
  4. const Router=require('koa-router);
  5. const router=new Router();
  6. //3.使用app.use(router.routes())

index.js

  1. const run=require('./reptile/db');
  2. const koa=require('koa');
  3. const Router=require('koa-router');
  4. const router=new Router();
  5. const app=new koa();
  6. router.get("/zhaopin",async ctx=>{
  7. var data=await run();
  8. ctx.body=data;
  9. })
  10. app.use(router.routes())
  11. app.listen(8080)

直接使用localhost:8080/zhaopin看效果

七 跨域 渲染数据

index.js

  1. //1.安装依赖
  2. yarn add koa2-cros
  3. //2.导入
  4. const cors=require('koa2-cors')
  5. //3.使用
  6. app.use(cors())

八 使用aja请求数据

新建一个index.html文件 引用jQuery

  1. <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
  2. <script>
  3. var url="http://localhost:8080/zhaopin";
  4. $.ajax({
  5. url,
  6. success:res=>{
  7. console.log(res)
  8. }
  9. })
  10. </script>