资讯专栏INFORMATION COLUMN

puppeteer进阶版_爬取小说站

qpal / 843人阅读

摘要:写爬虫抓取页面是不是还需要等待页面有数据了才能抓取,那么页面渲染的这段时间虽然不长但架不住多啊是不是可以省去呢时间要好好的利用起来基础不太了解的可以参考我这篇简单使用的文章使用抓取接口拦截数据这里有小伙伴就要说了我都知道接口了直接去请求不就

写爬虫抓取页面是不是还需要等待页面有数据了才能抓取,那么页面渲染的这段时间(虽然不长但架不住多啊)是不是可以省去呢 时间要好好的利用起来 基础不太了解的可以参考我这篇简单使用的文章
使用puppeteer抓取接口拦截ajax数据
这里有小伙伴就要说了我都知道接口了直接去请求不就完了吗,python,node,axios,原生的ajax那个不行啊
哈哈,那要是接口参数中有随机数呢,有随机时间点呢,有随机时间戳和uuid再混起来呢
分分钟怀疑人生
来看小说站的接口参数 咱们准备抓取的信息

图中标记的自上往下分别是:

书籍id

要抓取的信息

接口

接口地址

接口数据

怀疑人生的时候到了,来看请求参数

首先是 post 请求

再来分析Form Data数据

bookID和user_id都没啥事

timestamp这个参数是有一定间隔时间的时间戳

头大的是这个, sign, 黑人问号脸(这是个啥)

翻腾了好久找了一个js文件发现了sign的由来

还是个md5加密的

那么问题来了

这个r,通过这个接口可以知道它就是bookid了

小问题是这个有固定间隔时间的timestamp怎么获取,喜欢等待的小伙伴可以试试等等看,具体我也不知道,不过应该在10分钟以上了

大问题是这个bookKey是个啥啊,找遍了也没找到,我能怎么办,我也很绝望啊,没办法只能放大招了


来来来
在官网的api可以看到这么几个,哇,看到这哥几个莫名的兴奋啊,点过去再看看,就问你激动不激动
看到这里我就不多啰嗦了,直接上代码(详细说明在注释里)


代码最为关键的地方截图

结果截图

突然顿悟,都这样了,试问页面上还有啥是拿不到的,完整代码 转载请附上本文章地址
const puppeteer = require("puppeteer");
const mongodb = require("mongodb")
// mongoDB
const mongo_url = "mongodb://127.0.0.1:27017/book"
const mongoClient = mongodb.MongoClient
// 休眠函数
function sleep(second) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(" enough sleep~");
        }, second);
    })
}
// 站点地址url
var url = `http://t.shuqi.com/route.php?pagename=route.php#!/ct/cover/bid/6070553`

class Parse {
  constructor() {
    this.page = null
    this.browser = null
    this.bookMessage = {}
  }
  async init() {
    // 构造浏览器对象
    // 显示浏览器
    this.browser = await puppeteer.launch({
      "headless": false,
    });
    // 创建页面
    this.page = await this.browser.newPage();
    // 模拟浏览器信息
    const UA = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36";
    await Promise.all([
        this.page.setUserAgent(UA),
        // 允许执行js脚本
        this.page.setJavaScriptEnabled(true),
        // 页面视口大小
        this.page.setViewport({width: 1100, height: 1080}),
    ]);
    await this.getBook()
  }
  async getBook() {
    // 打开页面
    await this.page.goto(url);
    let page = await this.page
    // 等待页面请求完成
    page.on("requestfinished", request => {
      // 查看所有请求地址
      // console.log(request.url)
      // ajax
      if (request.resourceType == "xhr") {
        // 匹配所需数据的请求地址
        if(request.url.indexOf("http://walden1.shuqireader.com/webapi/book/info") != -1) {
          (async () => {
            try {
              // 获取数据并转为json格式
              let res = await request.response();
              let result = await res.json();
              let res_data = result.data     
              // 接口数据中找到需要的数据      
              this.bookMessage = {                        
                "book_name": res_data.bookName,              
                "book_summary": res_data.desc,              
                "author_name": res_data.authorName,              
              }
              let data = await this.bookMessage
              mongoClient.connect(mongo_url, (err, db) => {                
                db.collection("shuqi_test").insert(data,(err, result) => {
                    if(err) {
                      console.log("连接失败")
                    }
                    // 关闭浏览器            
                    this.browser.close()                    
                    // 关闭数据库连接
                    db.close()
                  }
                )
              })
            } catch(err) {
              console.log(err)
            }
          })()
        }
      }
    });
  }
}

let parse = new Parse()
parse.init()

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

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

相关文章

  • puppeteer_node爬虫分布式进阶

    摘要:前面的文章将做爬虫的基础一直到部署都梳理了一遍,现在来看一下分布式的处理为什么需要分布式需要抓取的不同数据有很多,会同时开启无头浏览器去抓取,然后获取到数据后又无厘头的一股脑挤进数据库无法保证同一时刻需要的数据只有一个操作在进行分布式选择因 前面的文章将puppeteer做爬虫的基础一直到部署都梳理了一遍,现在来看一下分布式的处理 1) 为什么需要分布式 1. 需要抓取的不同数据...

    sutaking 评论0 收藏0
  • puppeteer的简单使用_爬取页面信息

    摘要:使用无头浏览器做爬虫有什么拿什么它是的一个用来操纵浏览器的的库,对的你没看错,就是操作浏览器的,细思极恐啊简单说就是浏览器有的它都有了当然有些功能也正在开发中可以注册,模拟登陆,设置操作事件,执行脚本团队对其维护,厉害了吧文档地址安装首先 使用chrome无头浏览器做爬虫 - 有什么拿什么 puppeteer 它是Node的一个用来操纵浏览器的API的库,对的你没看错,就是操作浏览器的...

    ARGUS 评论0 收藏0
  • Koa2 + Mongo + 爬虫 搭建 小说微信小程序(本地开发篇)

    摘要:前言根据慕课网实现电影微信公众号前后端开发学习后的改造由于上下班期间会看会小说,但是无奈广告太多,还要收费,于是结合课程,进行开发,并上传到自己的微信小程序。 前言:根据慕课网 Koa2 实现电影微信公众号前后端开发 学习后的改造 由于上下班期间会看会小说,但是无奈广告太多,还要收费,于是结合课程,进行开发,并上传到自己的微信小程序。 showImg(https://segment...

    Kross 评论0 收藏0
  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • python爬取某趣阁小说(2.0),十分钟爬完一千六百章

    摘要:返回每个章节的集合。爬取完成,共计用了分钟左右。判断使用还是使用变量来存放未变化的,若下次循环与相等,说明此次请求没有成功,,因为某些页面本身存在错误没有数据,则需要跳过。 ...

    My_Oh_My 评论0 收藏0

发表评论

0条评论

qpal

|高级讲师

TA的文章

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