国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

一步一步搭建react應用-爬取豆瓣電影的電影信息

Bamboy / 848人閱讀

摘要:一步一步構建一個應用開篇地址自己寫表單錄入電影信息比較費勁,所以選擇爬取豆瓣電影的信息主要爬取電影的封面主演年份產地簡介等信息。

[一步一步構建一個react應用-開篇](https://segmentfault.com/a/11...

git地址

自己寫表單錄入電影信息比較費勁,所以選擇爬取豆瓣電影的信息主要爬取電影的封面、主演、年份、產地、簡介等信息。前端有個輸入框,輸入電影名然后去爬取電影信息錄入到MongoDB中

分析

打開豆瓣電影,搜索千與千尋

通過分析,發現

搜索后的列表是通過
https://movie.douban.com/subj...這個請求獲取的

要搜的電影一般都是列表的第一條,有時搜出來的第一條是明星的信息

需要的電影有一個url,指向這條電影的詳情,而我們想要的信息就在詳情接口里

PS(比較有意思的是最開始我爬取的時候,想要的信息就在這個接口的響應中,從響應里面提取出來就行,但后來我發現響應里沒有了,豆瓣電影里的搜索后的列表信息變成了js動態渲染出來的,所有的信息在響應的window_data中存放,所以又把代碼修改了下,使用phantom來渲染爬取到的頁面)

所有大體邏輯就是通過接口A獲取一個電影列表,從列表中提取出我們需要的電影詳情的url B,爬取B接口,獲取詳情,從詳情中提取信息

工具

phantom 通過plantom渲染爬取的頁面,頁面中的js代碼也會相應的執行

cheerio 服務端的一個實現jquery功能的庫,可以方便的獲取響應中的html中我們要的信息

爬取

項目接口 /api/reptile/:name

代碼

var express = require("express");
var router = express.Router();
const CONFIG = require("../config/config")
const cheerio = require("cheerio")
const rq = require("request-promise")
var phantom = require("phantom");


function getMovieSubjectUrl(name) {
  var _ph, _page, _outObj;
  return phantom.create().then(ph => {
    _ph = ph;
    return _ph.createPage();
  }).then(page => {
    _page = page;
    return _page.open("https://movie.douban.com/subject_search?search_text=" + encodeURIComponent(name));
  }).then(status => {
    return _page.property("content")
  }).then(content => {
    _page.close();
    _ph.exit();
    return content
  }).catch(e => console.log(e));
}

function getMovieDetail(href, res, next) {
  rq(href).then(str => {
    const $ = cheerio.load(str)
    const data = fillData($)
    res.json({
      code: CONFIG.ERR_OK,
      data
    })
  })
}


function fillData($) {
  const movie = {
    thumb: "",
    actors: "",
    type: "",
    time: "",
    instruct: ""
  }
  /**
   * 為方便提取數據,換行標簽替換
   */
  let info_html = $("#info").html().replace(/
/g, "**") let txt = cheerio.load(info_html).text() txt = txt.replace(/s+/g, "").split("**") movie.thumb = $("#mainpic img").attr("src") movie.instruct = $("#link-report").find("span[property]").text() movie.actors = txt[2].split(":")[1].split("/") movie.type = txt[3].split(":")[1].split("/") movie.time = txt[6].split(":")[1] return movie } router.get("/:name", function (req, res, next) { getMovieSubjectUrl(req.params.name).then(str => { const $ = cheerio.load(str) let detail = $(".detail") if (detail.length) { let a if (detail.eq(0).has(".rating_nums").length) { a = detail.eq(0).find(".title a") } else { a = detail.eq(1).find(".title a") } getMovieDetail(a.attr("href"), res, next) } else { next(10001) } }); }) module.exports = router;

前端

reptile.jsx

import React from "react";
import {
    Button,
    Switch
} from "antd-mobile"
import cloneDeep from "lodash/cloneDeep"
import Util from "../util/Util.js"
import MovieInfo from "./movieInfo"
import DownForm from "./download-form"

export default class Reptile extends React.Component {
    constructor(props) {
        super(props)
        this.state = {
            m_name: "",
            m_info: null,
        }
        this.reptile = this.reptile.bind(this)
    }

    /**
     * 爬取數據
     */
    reptile() {
        if (!this.state.m_name) {
            return
        }
        Util.fetch("/api/reptile/" + this.state.m_name).then(data => {
            if (data.code) {
                Util.Toast.info(data.message)
                return
            }
            this.setState({
                m_info: data.data,
            })
        })
    }

    render() {
        return (
            
{ this.setState({ m_name: e.target.value }) }} />
) } }

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19092.html

相關文章

  • 步一搭建react應用-爬取豆瓣電影電影信息

    摘要:一步一步構建一個應用開篇地址自己寫表單錄入電影信息比較費勁,所以選擇爬取豆瓣電影的信息主要爬取電影的封面主演年份產地簡介等信息。 [一步一步構建一個react應用-開篇](https://segmentfault.com/a/11... git地址 自己寫表單錄入電影信息比較費勁,所以選擇爬取豆瓣電影的信息主要爬取電影的封面、主演、年份、產地、簡介等信息。前端有個輸入框,輸入電影名然后...

    lixiang 評論0 收藏0
  • 步一步構建一個react應用-開篇

    摘要:線上地址主要從下面幾點入手一步一步搭建應用前后端初始化爬取豆瓣電影的電影信息開啟身份認證使用來做基于的用戶身份認證中使用來寫單元測試部署技術棧沒用之后改運行代碼到本地項目地址喜歡就一下吧前端后端需要安裝本項目端口并開啟權限認證。 介紹 斷斷續續利用周末時間做了兩個月,基于react和express的一個小項目差不多做完了。所以想寫一系列文章來總結一下前后端用到技術及遇到的問題和解決方法...

    BigTomato 評論0 收藏0
  • 步一步構建一個react應用-開篇

    摘要:線上地址主要從下面幾點入手一步一步搭建應用前后端初始化爬取豆瓣電影的電影信息開啟身份認證使用來做基于的用戶身份認證中使用來寫單元測試部署技術棧沒用之后改運行代碼到本地項目地址喜歡就一下吧前端后端需要安裝本項目端口并開啟權限認證。 介紹 斷斷續續利用周末時間做了兩個月,基于react和express的一個小項目差不多做完了。所以想寫一系列文章來總結一下前后端用到技術及遇到的問題和解決方法...

    lylwyy2016 評論0 收藏0
  • 步一搭建react應用-node中使用 mocha + supertest + should 來

    摘要:一步一步構建一個應用開篇地址是一個單元測試框架,類似于前端的語法也相近用來測試接口的庫斷言庫,可讀性很高搭建項目根目錄下新建文件夾,中監聽文件下的所有文件接口描述這里我們來測試一個添加一條電影的接口河正宇金允石鄭滿植動作犯罪 [一步一步構建一個react應用-開篇](https://segmentfault.com/a/11... git地址 mocha 是一個node單元測試框架,類...

    dadong 評論0 收藏0
  • 步一搭建react應用-node中使用 mocha + supertest + should 來

    摘要:一步一步構建一個應用開篇地址是一個單元測試框架,類似于前端的語法也相近用來測試接口的庫斷言庫,可讀性很高搭建項目根目錄下新建文件夾,中監聽文件下的所有文件接口描述這里我們來測試一個添加一條電影的接口河正宇金允石鄭滿植動作犯罪 [一步一步構建一個react應用-開篇](https://segmentfault.com/a/11... git地址 mocha 是一個node單元測試框架,類...

    chengtao1633 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<