摘要:一步一步構建一個應用開篇地址自己寫表單錄入電影信息比較費勁,所以選擇爬取豆瓣電影的信息主要爬取電影的封面主演年份產地簡介等信息。
[一步一步構建一個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應用-開篇](https://segmentfault.com/a/11... git地址 自己寫表單錄入電影信息比較費勁,所以選擇爬取豆瓣電影的信息主要爬取電影的封面、主演、年份、產地、簡介等信息。前端有個輸入框,輸入電影名然后...
摘要:線上地址主要從下面幾點入手一步一步搭建應用前后端初始化爬取豆瓣電影的電影信息開啟身份認證使用來做基于的用戶身份認證中使用來寫單元測試部署技術棧沒用之后改運行代碼到本地項目地址喜歡就一下吧前端后端需要安裝本項目端口并開啟權限認證。 介紹 斷斷續續利用周末時間做了兩個月,基于react和express的一個小項目差不多做完了。所以想寫一系列文章來總結一下前后端用到技術及遇到的問題和解決方法...
摘要:線上地址主要從下面幾點入手一步一步搭建應用前后端初始化爬取豆瓣電影的電影信息開啟身份認證使用來做基于的用戶身份認證中使用來寫單元測試部署技術棧沒用之后改運行代碼到本地項目地址喜歡就一下吧前端后端需要安裝本項目端口并開啟權限認證。 介紹 斷斷續續利用周末時間做了兩個月,基于react和express的一個小項目差不多做完了。所以想寫一系列文章來總結一下前后端用到技術及遇到的問題和解決方法...
摘要:一步一步構建一個應用開篇地址是一個單元測試框架,類似于前端的語法也相近用來測試接口的庫斷言庫,可讀性很高搭建項目根目錄下新建文件夾,中監聽文件下的所有文件接口描述這里我們來測試一個添加一條電影的接口河正宇金允石鄭滿植動作犯罪 [一步一步構建一個react應用-開篇](https://segmentfault.com/a/11... git地址 mocha 是一個node單元測試框架,類...
摘要:一步一步構建一個應用開篇地址是一個單元測試框架,類似于前端的語法也相近用來測試接口的庫斷言庫,可讀性很高搭建項目根目錄下新建文件夾,中監聽文件下的所有文件接口描述這里我們來測試一個添加一條電影的接口河正宇金允石鄭滿植動作犯罪 [一步一步構建一個react應用-開篇](https://segmentfault.com/a/11... git地址 mocha 是一個node單元測試框架,類...
閱讀 3564·2021-10-15 09:43
閱讀 3487·2021-09-02 15:21
閱讀 2193·2021-08-11 11:23
閱讀 3238·2019-08-30 15:54
閱讀 1923·2019-08-30 13:54
閱讀 3199·2019-08-29 18:35
閱讀 668·2019-08-29 16:58
閱讀 1736·2019-08-29 12:49