const puppeteer = require('puppeteer');
const fs = require('fs');// 豆瓣top250电影
async function top250(i) {const browser = await puppeteer.launch({headless: false, //关闭无头模式defaultViewport: {width: 1200,height: 800},timeout: 60000});const page = await browser.newPage();await page.goto(`https://movie.douban.com/top250?start=0&filter=`);let alldata = [];alldata = alldata.concat(await getdata(page));for (let i = 0; i < 5; i++) { //控制翻页// 翻页await Promise.all([page.waitForNavigation(),page.click(' div > div.article > div.paginator > span.next > a', { delay: 1000 }),]);alldata = alldata.concat(await getdata(page)); //封装getdata函数console.log(`第${i + 2}页已记录`,'color:#0f0;');}fs.writeFile(`./output/doubantop250.json`, JSON.stringify(alldata), err => {if (err) return console.log("写入文件失败" + err.message);console.log('写入成功');})page.close();console.log("窗口关闭,任务完成");browser.close();
}async function getdata(page) {let titles = await page.$$eval('div > div.info > div.hd > a > span:nth-child(1)', titles =>titles.map(x => {return {title: x.innerText}}))let details = [];// 点击进去的详情页面for (let i = 1; i < 26; i++) {await Promise.all([page.waitForNavigation(),page.click(`ol > li:nth-child(${i}) div > div.info > div.hd > a`),]);// 跳转后的页面的详情介绍// 判断介绍是否展开const zk = await page.$('#link-report > span.short > a')if (zk) {await page.click('#link-report > span.short > a');//展开全部按钮let detail = await page.$$eval('#link-report > span.all.hidden', items =>items.map(x => {return {detail: x.innerText}}))details = details.concat(detail[0]);console.log(`第${i}个详情已采集`);// console.log(detail);} else {let detail = await page.$$eval('#link-report > span:nth-child(1)', items =>items.map(x => {return {detail: x.innerText}}))details = details.concat(detail[0]);console.log(`第${i}个详情已采集`);// console.log(detail);}await page.goBack();}let score = await page.$$eval('div > div.info > div.bd > div > span.rating_num', items => items.map(item => {return {score: item.innerText}}))let img = await page.$$eval('div > div.article > ol > li:nth-child(n) > div > div.pic > a > img', items => items.map(item => {return {img: item.src}}))let comment = await page.$$eval('p.quote > span', items => items.map(x => {return {comment: x.innerText}}))let id = await page.$$eval('div > div.pic > em', items => items.map(x => {return {id: x.innerText}}))for (let item in titles) {Object.assign(titles[item], id[item], score[item], img[item], comment[item],details[item])}return titles}top250();//执行

puppeteer爬取豆瓣top250电影及详细信息相关推荐

  1. scrapy爬取豆瓣top250电影数据

    scrapy爬取豆瓣top250电影数据 scrapy框架 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. sc ...

  2. Python爬取豆瓣Top250电影中2000年后上映的影片信息

    Python爬取豆瓣Top250电影中2000年后上映的影片信息 前言 双十一前加在京东购物车的一个东西,价格330,Plus会员用券后差不多310.双十一当天打开看了下399,还得去抢满300减10 ...

  3. [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

    这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对 ...

  4. 爬取豆瓣top250电影并分析

    爬取豆瓣top250电影,提取评论关键词,然后将同一国家的关键词做成一个词云,轮廓是每个国家的地图轮廓 爬取数据 需要爬取电影名称.导演.年份.地区和前10个评论除了地区,其他的都没什么问题,我们来研 ...

  5. 【实战1】用BeatuifulSoup解析器爬取豆瓣Top250电影的名称

    [实战1]用BeatuifulSoup解析器爬取豆瓣Top250电影的名称 一. 爬虫的普遍步骤 二. 项目目标分析 三.完整爬取代码 参考链接: https://www.bilibili.com/v ...

  6. 【实战2】爬取豆瓣Top250电影的海报

    [实战2]爬取豆瓣Top250电影的海报 一. 项目目标分析 二. 完整代码 参考链接: https://www.bilibili.com/video/BV1ZJ411N7Fq?p=4 一. 项目目标 ...

  7. python采用requests+bs4爬取豆瓣top250电影信息

    爬取豆瓣top250电影说明 (链接:https://movie.douban.com/top250,可爬取一页或者多页(输出电影的正标题(肖申克的救赎),副标题( The Shawshank Red ...

  8. 爬取豆瓣TOP250电影的评分、评价人数、短评等信息,并在其保存在sql数据库中。

    爬取目标 爬取豆瓣TOP250电影的评分.评价人数.短评等信息,并在其保存在sql数据库中. 最终实现效果如图: 确定爬取的URL 爬取的网页地址为:https://movie.douban.com/ ...

  9. Python爬虫菜鸟入门,爬取豆瓣top250电影 (自己学习,如有侵权,请联系我删除)

    Python爬虫菜鸟入门,爬取豆瓣top250电影 (自己学习,如有侵权,请联系我删除) import requests from bs4 import BeautifulSoup import ti ...

最新文章

  1. 新造车公司背后的「资本大佬」
  2. [云炬创业管理笔记]第三章打造优秀创业团队讨论4
  3. c语言指针输出两个数的最大值和最小值,并求和,有些不清楚这样写为什么不行。
  4. linux我ll查不到usr,Linux学习-文件查寻
  5. 腾讯陈炜:5G边缘计算助力高性能、大流量和行业物联类应用快速发展
  6. 深度学习pytorch--多层感知机(二)
  7. esp8266原理图_ESP8266_22基于自身ADC的电压采样
  8. 手把手系列|实操市场风险Var
  9. jdbc中excute,excuteUpdate,excuteQuery函数解释
  10. 例2.1 排序 - 九度教程第1题(排序)
  11. Python3网络爬虫:requests+mongodb+wordcloud 爬取豆瓣影评并生成词云
  12. Arora is a lightweight cross-platform web browser.
  13. 语音驱动嘴型与面部动画生成的现状和趋势
  14. Java for循环的几种用法详解(转载)
  15. matlab求二阶中心矩,opencv —— moments 矩的计算(空间矩/几何矩、中心距、归一化中心距、Hu矩)...
  16. idea Push Tags选All还是Current Branch?
  17. 豆瓣最新API-python
  18. This inspection finds all usages of methods that have @since tag in their documentation.
  19. 《Mysql必知必会》
  20. C#连接数据库代码示例

热门文章

  1. 程序员的职业素养:向世界宣告“我是专业人士”
  2. 使用acme.sh给静态博客申请免费https证书
  3. 初学Java—九九乘法表
  4. 今明Focatek相机
  5. 数据分析初探——以2020百度西安交大大数据竞赛:传染病感染人数预测为例
  6. python xpath入门_python爬虫入门实战(三)!xpath 和 csv!
  7. css hover后面的选择
  8. 运筹学——对偶单纯形法
  9. iperf+natapp做4g模块网络带宽测试
  10. html页面引入vue