当前位置: 首页 > 后端技术 > Python

一个简单的傀儡师例子

时间:2023-03-26 17:21:10 Python

工具和资料QQ群-Javascript高级爬虫(832946826)-作者自己的群,欢迎加入!awesome-java-crawler-作者收集的爬虫相关工具和资料前言该脚本的作用是抓取掌阅书城男女频各分类的完整图书信息,只有前三页按好评排序。本页面没有任何反爬取措施,适合作为一个简单的例子。大致开发流程:人工分析页面,分析URL和分页、分类等关键参数。人工分析页面内容,在控制台验证数据提取方式收集到的链接。用于数据提取的f方法实际上是通过page.evaluate转换成字符串在浏览器中执行,而不是在node环境中执行。但是因为双方的语言是一致的,所以可以直接和node源码一起写,以获得IDE支持,而在其他语言中,js代码只能以字符串的形式存在。puppeteer的page.evaluate可以直接返回浏览器端脚本返回的对象,直接传给node端很方便。源代码constfs=require("fs")constpuppeteer=require('puppeteer');consturl="http://www.ireader.com/index.php?ca=booksort.index&pca=booksort.index&pid=$pid&order=score&status=3&cid=$cid&page=$page"constpids=[10,68];//男性频率,女性频率constcids=[[11,27,19,22,16,39,42,50,54,57,60],[69,74,82,86,89,90,91,723]];//通道中的类别ID(async()=>{constbrowser=awaitpuppeteer.launch({//启动chrome浏览器//headless:false,//是否是headless模式,headless模式下可以调试首先,然后切换到无头模式以提高效率f=()=>{returnArray.from($('.bookMation')).map(e=>{constid=$('h3a',e).attr('href').match(/bid=(\d+)/)[1]//使用正则表达式提取链接bidconsttitle=$('h3a',e).text()constauthor=$('p.tryread',e).text().replace('试读','').trim()constdesc=$('p.introduce',e).text()返回{id,title,author,desc}})}letresult=[];for(constiinpids){constpid=pids[i]for(cidofcids[i]){for(letpg=1;pg<4;pg++){//只抓前三页constu=url.replace("$cid",cid).replace("$pid",pid).replace("$page",pg)awaitpage.goto(u);constres=awaitpage.evaluate(f)res.forEach(e=>{e.cid=cid;e.pid=pid})result=result.concat(res)console.log("页面"+pg+"done")}console.log("cid"+cid+"done")}console.log("pid"+pid+"done")}fs.writeFileSync("d:/tmp/ireader_hot.json",JSON.stringify(result),{encoding:"utf-8"})console.log("alldone")awaitbrowser.close();//关闭浏览器})();